Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在 一个解析漏洞,在解析PHP时,a.php\x0a将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。
可以看到这里获取文件名是需要单独post一个name的,因为如果通过 $FILES'file' 获 取文件名的话,会把\x0a自动去除,所以 $FILES'file' 这种方式获取文件名就不会造成 这个漏洞.
apache :2.4.0~2.4.29版本
在这里我自己搭建了Vulfocus漏洞复现平台
3.1 前提:会使用docker的基本命令(哔站上的教程的挺多的)
3.2 拉取vulfocus镜像:docker pull vulfocus/vulfocus:latest
3.3 运行拉下来的镜像:docker run -d -p 80:80 -v /var/run/docker.sock:/var/run/docker.sock -e VUL_IP=0.0.0.0 8e55f85571c8
3.4 访问页面
3.5 开启靶场
3.6 设置burp代理,将浏览器的流量代理到burp上,进行拦截(在这里我使用的是SwitchyOmega火狐插件)
自己写个表单,用来向服务器上传webshell
3.7 访问该静态网页,这里上传如下webshell,对流量进行抓包
<?php phpinfo();?>
3.8 后台源码进行分析
<?php if(isset($FILES['file'])){ #1.php php $name =basename($POST['name']); $ext = pathinfo($name,PATHINFO_EXTENSION); $array=array('php','php3','php4','php5','phtml','pht'); if(in_array($ext,$array)){ exit('bad file'); } move_uploaded_file($_FILES'file','./'.$name); } ?>
后台是通过黑名单方式过滤了php后缀的文件,根据最开始的知识,什么样的文件算是php文件呢?在 有定义,这句话的意思是以php结尾的文件都算php文件,在正则中表示匹配输入字符串的结尾位置。 如果设置了 RegExp对象的 Multiline属性,则也匹配 \n 或 \r 恰好,我们在文件末尾加了0x0a(n),所以被匹配成功了。
a.0x0d \r CR这三者代表是回车,是同一个东西,回车的作用只是移动光标至该行的起始位置
b.0x0a \n CL这三者代表换行,是同一个东西,换行至下一行行首起始位置;
3.9发送到repeater进行修改重发
直接访问:http://192.168.4.157:31071/a.php%0a 上传上去的webshell执行成功
ctrl+F 查找flag
1.升级到最新版本
2.或将上传的文件重命名为为时间戳+随机数+.jpg的格式并禁用上传文件 目录执行
2022年已经过去了,在2022年经历了很多事情,虽然过得不算如意,但都挺过来了,一路走来,从没放弃过对安全的追求,安全是我最痴迷的。那段记忆既让我留恋,又使我害怕,不要活在过去,大步向前,没有什么可以难倒我的,大学生涯也快结束了,有时真的感叹时间的飞逝啊,愿你我安好。拿出魄力去做自己热爱的事情,去追求自己的安全,好好安排好2023的计划,2023静心让自己的安全技术再突破,为以后的发展做好准备。时刻准备着,网安人,你绝对不平凡,相信自己,加油!