漏洞介绍:
Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。
影响版本:Apache 2.4.0~2.4.29 存在一个解析漏洞;在解析PHP时,1.php\x0A
将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。
漏洞产生分析:
我们查看相关配置:读取配置文件,前三行的意思是把以 .php
结尾的文件当成 PHP
文件执行。问题就在它使用的是 $
符号匹配的,我们都知道这个符号在正则表达式中的意思是匹配字符串的末尾,是会匹配换行符的,那么漏洞就这样产生了。
进入容器里,打开index.php,发现如果文件后缀名为 php、php3、php4、php5、phptml、pht都会返回为:bad file ;也就是说,过滤掉了那些后缀名,通过上图发现;我们可以通过换行符拉进行绕过。
docker exec -it c6bc05f11c7d /bin/bash
漏洞复现:
1、我们正常上传文件1.php;发现出现bad file;那就是说将我们的php文件给过滤掉了
2、打开我们的bp工具;上传文件抓包并在文件名后面增加一个 0a
也就是换行符;
访问成功,不再是bad file;我们修改后不会被过滤;
打开我们的浏览器,加入1.php%0a路径
漏洞复现成功!
这个漏洞还需要其他条件:
1、如果获取文件名的是 $_FILES['file']['name']
,而不是 $_POST['name']
,这个漏洞就不会产生,因为前者会自动去掉换行。
2、服务器要是 linux
,因为 windows
不支持带有换行符后缀的文件。
总结:对于程序而言,后缀名为 php%0a ;而不是php了,就不会拦截了;但对于mod_php而言,就会舍弃该换行符,因此会被过滤;该漏洞危害性不是很大,通过升级版本便可修复。