AddHandler导致的解析漏洞
如果服务器给.php后缀添加了:AddType application/x-httpd-php .php
Apache默认一个文件可以有多个以点分隔的后缀,当右边的后缀无法识别,则继续向左识别。当我们请求这样一个文件:1.php.eee
.eee
无法被识别,继续向左识别发现后缀是php,就会被当作php文件解析。
漏洞修复
将AddHandler,改成SetHandler,写好正则
Apache 解析漏洞(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
限制:获取文件名时不能用$_FILES[‘file’][‘name’]
,因为它会自动把换行去掉。
漏洞复现
cd vulhub
cd httpd
cd CVE-2017-15715
docker-compose up -d
启动docker环境
访问服务器ip:8080
上传一个php文件抓包,将数据包进行修改在evil.php后面添加\n也就是十六进制0a
切换Hex模式,添加0a,上传成功
访问文件路径,上传成功
漏洞修复
1、升级到最新版本
2、或将上传的文件重命名为为时间戳+随机数+.jpg的格式并禁用上传文件目录执行脚本权限
3、获取文件名时使用去掉自动换行的函数,比如 $_FILES['file']['name']
Nginx解析漏洞
漏洞介绍
当我们访问 http://www.xxx.com/a.jpg/b.php
的时候,如果b.php不存在,php就会向前解析,如果a.jpg存在,会把a.jpg 当作php文件解析,这样就产生了漏洞。
漏洞复现
1、打开php.ini文件设置cgi.fix_pathinfo=1(好像默认就是这样)
2.在网站根目录下建一个111.txt的文件
3.访问http://127.0.0.1/111.txt
,发现是能正常访问的,txt文件也没有被当成php文件解析
4.当我们在原有的文件后面去加上一个根目录不存在的php文件,发现txt文件里面的内容被当作php文件被解析了
5.当我们把cgi.fix_pathinfo=1,改成cgi.fix_pathinfo=0,保存文件重启服务,就不会被解析了
漏洞修复
将cgi.fix_pathinfo=1,改成cgi.fix_pathinfo=0
IIS5.x/6.0解析漏洞
服务器默认不解析“;”以后的内容,导致xxx.asp;.jpg被解析成xxx.asp。
还有一种,当创建.asp的文件目录时,在此目录下的任意文件,服务器都解析为asp文件,www.xx.com/xxx.asp/1.jpg,这里会将1.jpg文件当作.asp文件解析
IIS7解析漏洞和nginx一样都是cgi配置问题,修复也是一样,设置cgi.fix_pathinfo=0,这里就不赘述了