第一题 前端JS绕过
lasIndexOf
是返回函数最后一次出现的地方(从右到左); substring
是用来截取函数的; indexOf
是返回,表示从.出现的地方开始截取并判断是否在允许的字符串内。
上传一句话木马,对我进行了弹窗,判断是前端js
验证。
绕过方法:
1.按F12
打开调控台,删除下面这个验证js代码。
onsubmit="return checkFile()
2.上传成功,返回图片信息即路径地址
/upload/1.php
具体操作参考文章:https://blog.csdn.net/m0_53008479/article/details/121420258
第二题 MIME-TYPE
验证绕过
($_FILES['upload_file']['type'] == 'image/jpeg')
判断文件类型是否为图片
绕过方法:
通过burp捉包修改Content-Disposition:
上传php文件
第三题 黑名单检测(特殊16进制后缀绕过)
绕过方法:
1.用特殊16进制后缀截断尝试,例如0xf7
,将插入的字节填为
f7p+
0x00
截断的思路即为将+之后的内容忽略掉
%00
是被服务器解码为0x00
发挥了截断作用
../upload/202108050019484083.php
第四题 黑名单检测 (.htaccess
文件绕过)
添加可以执行php的文件类型:
AddType application/x-httpd-php .php
<FilesMatch \.jpg$>
SetHandler application/x-httpd-php
</FilesMatch> //这个会覆盖前面的
copy 1.jpg/b+1.php/a 2.jpg //制作一句话木马图片
我只能用.txt,服务器不支持
第五题 黑名单过滤(后缀名特殊字符多写)
绕过方法:
1.php. . (两个点中间加个空格)
windows在创建文件的时候,末尾的点会被去掉
第六题 黑名单过滤(大小写绕过)
对后缀名进行大小写,例如1.pHP
windows在创建文件的时候,忽略大小写,实际保存的文件名后缀即为php
第七题 黑名单过滤(空格绕过)
空格可以绕过
windows在创建文件的时候,空格会被忽略
第八题 黑名单过滤(点绕过)
点可以绕过
windows在创建文件的时候,点会被忽略
第九题 黑名单过滤(流文件绕过)
::$DATA
可以绕过
windows在创建文件的时候,结尾流文件后缀会被忽略
第十一题 黑名单过滤(后缀名双写绕过)
绕过方法:
直接上传一个php
文件,发现可以上传,但是查看返回路径发现,只有文件名,没有文件后缀名。则认
为他是将php
替换为空了。
那么我们抓包将后缀名改成双写即可绕过,即11.pphphp
返回成功11.php
第十二题 白名单 get型%00截断
%00
截断的概念和原理:
在url中%00
表示ASCll码中的0,而0作为特殊字符保留,表示字符结束; 当url中出现%00
时就认为读取已结束,而忽略后面上传的文件或者图片,只上传截断前的文件或图片。
要求:php版本小于5.3.4,且php中的magic.quotes.gpc
为OFF
状态
文件保存的方式是上传路径+随机时间+截取的文件后缀
先上传一个php文件,返回信息发现只允许上传.jpg|.png|.gif
类型文件!认定为白名单验证。
通过抓包修改get 参数,然后通过file_ext无效,这样就可以上传php
文件因此可以利用%00
截断绕过。
上传jpg文档发现可以上传,则我们抓包,发现是GET型将路径信息暴露出来,我们尝试用00截断,直接在save_path接收的值后面加上,1.php%00
并且将文件名改为1.jpg
。成功上传,返回路径信息。
因为网站的原因GET提交参数到服务器系统中,系统在对文件名的读取时,如果遇到0x00
,就会认为读取已结束。
第十三题 白名单 POST型%00截断
上传jpg文档,发现是POST型将路径信息暴露出来,我们尝试用00截断,然后将save_path
接收的值改为../upload/1.php
(有个空格),然后调整到hex中,将空格改为00
,发包,发现上传成功,返回路径信息。
第十四题 文件头检测
unpack()
函数从二进制字符串对数据进行解包返回数组一个字节为一个值)
intval()
函数通过使用指定的进制 base
转换(默认是十进制),返回变量 var
的 integer
数值
getimagesize()
函数用于获取图像大小及相关信息,成功返回一个数组
copy 8.png/b + 1.php/a 9.png
上传一句话图片木马,将文件后缀改为
php
上传成功,但返回的为jpg
格式文件。
根据页面提示,点开文件包含漏洞页面。
根据页面提示,通过GET请求的file参数填写我们的图片地址。
第十五题 文件头检测 代码函数用的是getimagesize()
类型验证
本关一样使用图片马,和第十四题一样
第十六题 文件头检测代码函数用的是exif_imagetype()
类型验证
exif_imagetype()
— 判断一个图像的类型
开启文章开头环境说明中的extension=php_exif.dll
参考这个文章:https://www.freesion.com/article/48421366176/
第十七题 二次渲染绕过
先尝试上传一个gif格式的一句话图片木马,上传成功,右击图片查看图像。
用文件包含漏洞解析发现是并没有成功。
用010editor
把木马插入到图片中。
再对新修改的一句话图片木马上传,上传成功。
我没做出来
第二十题 保存名称可控,00截断
上传一句话木马,并且修改文件名php
后缀,发现并不能上传上去
抓包修改上传名为2.php
,有个空格,我们再进入hex将空格的20修改为00进行截断,发现上传成功。
第二十一题 数组拼接后缀名
php修改后缀jpg上传抓包