目录
知识点
1、文件上传-前端验证
2、文件上传-黑白名单
3、文件上传-user.ini妙用
4、文件上传-PHP语言特性
详细介绍
1、检测层面:前端,后端等
2、检测内容:文件头,完整性,二次渲染等
3、检测后缀:黑名单,白名单,MIME检测等
4、绕过技巧
5、前置知识
案例演示-CTFSHOW-文件上传-151到161关卡
CTF-文件上传-151
CTF-文件上传-152
CTF-文件上传-153
CTF-文件上传-154
CTF-文件上传-156
CTF-文件上传-157
CTF-文件上传-159
CTF-文件上传-160
CTF-文件上传-161
.user.ini:有php就可以使用
.user.ini:php支持基于每个目录的ini文件配置,如果php运行在apache里与.htaccess有同样的效果
前端:检测代码写到前端,如js等
后端:采用后端代码,检测代码需要通过发包发到对方服务器,然后服务器进行检测这个文件上传成功或者失败。
从检测层面的基础上面在往里细节就是检测内容和后缀
文件头、完整性、二次渲染
通过后缀检测可以检测到上传文件的类型。尽量按照网站的脚本语言来进行后门的格式,否则容易不支持格式。
黑名单:声明一个禁止上传的黑名单,符合黑名单的内容就会失败
白名单:声明了允许上传的白名单,符合白名单的内容就可以上传
MIME:比如多个图片(png,jpg)或者多个文本都有不同的后缀名,mime会有一种归类来进行文件上传的判断是否符合
前端、MIME、上传.user.ini文件进行包含、{}绕过[]过滤、反引号、包含日志文件、添加文件头部验证
后门代码需要用特定格式后缀解析(比如是php的后门代码必须是php的格式才可以进行解析),不能以图片后缀解析脚本后门代码(解析漏洞除外)
如:jpg图片里面有php后门代码,不能被触发,所以连接不上后门,除非使用.user.ini
思路:修改前端代码
尝试上传php后门脚本,发现失败
通过检查源码,可以断定是通过前端进行验证后缀
直接修改前端代码,就可以正常上传php后门
php一句话木马:
访问目录下的1.php,并将利用后门获取flag
该关卡用151关卡的方法肯定是不行的,所以不在演示
思路:因为是MIME判断,修改Content-Type的参数
先修改页面源代码绕过前端验证
分别上传php和png图片,抓包进行比较。可以明显发现两个数据包的Content-Type不太一样。该验证就为MIME验证。
那么可以直接通过修改Content-Type的值,在上传php文件时把值修改成png时的值,进行MIME的绕过
通过后门获取flag
该关肯定之前的办法都不行,所以不尝试前端和MIME的绕过,也可以尝试修改filename的文件后缀、尝试修改后缀名的大小写(如果是linux不能,因为在访问文件时linux区分大小写)、尝试多后缀解析(例如:php5、php7等)
思路:利用user.ini文件进行包含
那么可以尝试使用user.ini,index.php可以直接让user.ini生效从而利用.user.ini包含1.png文件,1.png里包含的php后门程序,通过情况下png格式无法让php代码生效,所以使用到了.user.ini。
注意:上传.user.ini文件时要将Content-Type改为image/png格式
利用后门获取flag
155关卡与154相同
思路:该关过滤php字符,只需要写入不带php字符的代码就可以了。
上传user.ini文件,发现没有任何问题。但是上传带有后门脚本的文件时发现上传失败
将内容修改成普通内容是可以正常上传的,通过不断测试发现了是过滤了php字符
那么只需要写入不带php字符的代码就可以了。这里为各位总结了一下
echo '123';?> //前提是开启配置参数short_open_tags=on
=(表达式)?> //不需要开启参数设置
<% echo '123';%> //前提是开启配置参数asp_tags=on
<script language=”php”>echo '1'; script> //不需要修改参数开关
选择符合条件的代码进行上传,获取flag
思路:上传文件时过滤后门脚本中的中括号,直接利用大括号即可
上传user.ini文件和后门脚本文件,把包含变量的中括号改为大括号
直接访问获取flag,获取利用菜刀蚁剑连接后门
157与158相同
思路:该关直接过滤了分号和{},那么直接让包含的图片输出flag即可
上传user.ini文件和后门代码文件
直接访问upload文件即可获取flag
思路:该关过滤(),那么system就不可以使用,可以利用反引号执行代码
访问index.php触发.user.ini文件,.user.ini文件触发test文件,最后触发代码获取falg
思路:该题因为过滤了反引号,所以可以从日志文件入手 ,让user.ini文件包含图片文件,图片文件包含日志文件,修改日志文件的UA头实现后门代码。
然后直接访问upload文件,并利用post传参。或者直接上菜刀获取flag都可。
思路:该题考的是文件头部检测是否为图片格式文件:不同的文件,比如png,jgp都有不同的文件头
那么再上传user.ini文件和包含日志的图片文件时,在开始部分加上文件头的信息绕过验证
访问页面,抓包并修改UA头