pass-1:前端JS检测绕过
JS代码对文件后缀进行校验
1.可以选用js插件禁用网站javascript
2.可以尝试把checkFile函数删了,变成return true ,或者直接删了
3.上传一个包含—句话的图片马,bp抓包修改filename为.php后缀,发包绕过源码:
pass-2: MIME类型检测绕过MIME
超文本标记语言.html文件: text/html
普通文本.txt文件: text/plain
PDF文档.pdf: application/pdf
Microsoft Word文件.word: application/msword.
PNG图像.png: image/png
GIF图像.gif: image/gif
MPEG文件.mpg..mpeg: video/mpeg。
AVI文件.avi: video/x-msvideo
原理:检测图片文件上传过程中数据包的Content-Type字段的值,来判断上传文件是否合法。对数据包的MIME(content-type)进行了限定,只允许image/jpeg,image/png,image/gif 类型的图片内容数据传输。
绕过方法:用burpsuit载取并修改数据包中的Content-Type类型进行绕过。
1、上传正常文件(png,jpg,gif),bp抓包修改文件后缀
2、上传非正常文件(php),bp抓包修改content-type值
pass-3:文件后缀检测-黑名单绕过
限制
1.限制几种常见后缀(包括大小写)
2搠除文件名末尾的点
3.去除特殊字符串::$DATA (php在window的时候如果文件名+ "::$DATA"会把::SDATA之后的数据当成文件流处理不会检测后缀名,且保持"::$DATA"之前的文件名,他的目的就是不检查后缀名)
4.删除首尾的空格
绕过
上传特殊可解析后缀绕过: php2、php3、php4、php5、phtml
pass-4:文件后缀检测-黑名单绕过(.htaccess)
限制
1.严格限制文件后缀名(包括大小写)
⒉删除文件名末尾的点
3.去除特殊亨符串::$DATA4.删除首尾的空格
绕过
未对.htaccess文件进行限制,上传.htaccess分布式配置文件:
<FilesMatch "x.jpg">
SetHandler application/ x-httpd-php</FilesMatch>
.htaccess文件(或者"分布式配置文件”) ,全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法,即在一个特定的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。
然后上传一个jpg图片马.jpg图片即可被当作php文件执行图片里的php代码.
pass-5:文件后缀检测-后缀名点空格绕过(..)
限制
1.严格限制文件后缀名(包括大小写、.htaccess)
⒉.删除文件名末尾的点
3.去除特殊字符串::$DATA
4.删除首尾的空格
绕过
通过多重点和空格来绕过: filename=as.php. .
或者
.user.ini用户自定义配置文件使用
.user.ini使用前提:
1、脚本语言:PHP
2、服务器:使用CGI/FastCGI模式
3、配置:php.ini中user_ini.filename = ".user.ini",user_ini.cache_ttl =某个数
4、权限:上传的目录有可执行权限
利用:
1、使用bp抓包后,将文件名改为shell.php. .(点空格点)
2、本关未将大小写统一,然后验证,可以尝试爆破
3、利用用户自定义配置文件.user.ini
配置好.user.ini文件 : auto_propend_file=shell.png
上传.user.ini配置文件 然后上传图片码
pass-6:文件后缀检测-后缀名大小写绕过(.Php..phP)
限制
1.严格限制文件后缀名(.htaccess)
2删除文件名末尾的点
3.去除特殊字符串:: $DATA
4.删除首尾的空格
绕过
未完全限制后缀名大小写,通过Php . phP进行绕过
pass-7:文件后缀检测-后缀名空格绕过(.php .)
限制
1.严格限制文件后缀名(包括大小写、.htaccess)
2删除文件名末尾的点
3.去除特殊字符串::$DATA
绕过 没有使用trim()函数,进行首尾去空
未过滤文件后缀名的空格.通过 filename=as.php . 或者filename=as. php绕过
Pass8(未去点号,绕过黑名单)
特点:
没有使用deldot()函数,去掉文件名末尾的点号
分析:
后面关卡应该基本上是后端检查
考虑:
MIME检测:如content-type值
点空格点:是否可利用系统特性(还有考虑能否被解析)
过滤不全:是否存在爆破可能
空格:是否能够利用空格绕过黑名单
点号:是否能够利用点号绕过黑名单
利用:
1、在文件名后加点号
(windows可能会将点号直接去掉,需要在bp里面改)filename=as.php.
pass-9:文件后缀检测-特殊字符串虽::$DATA 绕过(.php::$DATA)
限制
1.严格限制文件后缀名(包括大小写、.htaccess)
2.删除文件名末尾的点
3.删除首尾的空格
绕过
未过滤特殊字符串::SDATA,通过filename=as.php : : $DATA绕过
原理: php在window的时候如果文件名+"::DATA"会把::DATA之后的数据当成文件流处理不会检测后缀名,且保持"::$DATA"之前的文件名,他的目的就是不检查后缀名
pass-10:文件后缀检测-后缀名多重点空格绕过(.php. .) 检测规则的一次性
限制
1.严格限制文件后缀名(包括大小写、.htaccess)
2.删除文件名末尾的点
3.去除特殊字符串::$DATA
4.删除首尾的空格
绕过
检测规则,会去掉对应的预先设定字符,但未循环执行
通过多重后缀名点空格绕过filename=as.php. .
pass-11:文件后缀检测-双写绕过
限制
1.严格限制文件后缀名(包括大小写、.htaccess)
⒉删除文件名末尾的点
3.去除特殊字符串::$DATA
4.删除首尾的空格
绕过
检测规则,会去掉对应的预先设定字符
但未循环执行
通过使用双写来绕过一次检测,如phphpp
pass-12:文件后缀检测-GET方式00截断绕过(save_path=/upload/as.php%00)
00截断限制条件: PHP<5.3.29. magic_quotes_gpc为Off状态
原理:move_uploaded_file(底层为C),遇到0x00会截断(16进制),%00(URL编码)
限制
1.白名单只允许jpg','png','gif后缀图片文件
2.上传文件由路径+随机字符+当前时间+上传文件名最后出现的后缀名重新命名绕过
文件上传路径可控(通过GET方式发送到服务端),抓包修改上传路径
上传图片马 (在bp里面加%00去截断 ) save_path=../upload/as.php%00,即可绕过。
pass-13:文件后缀检测-POST方式00截断绕过(../upload/as.php%00)
00截断限制条件:PHP<5.3.29. magic quotes_gpc为Off状态
原理:move_uploaded_file(底层为C),遇到0x00会截断(16进制),%00(URL编码)
限制
1.白名单策略,只允许jpg",'png'.,' gif后缀图片文件上传
2.上传文件由路径+随机字符+当前时间+上传文件名最后出现的后缀名重新命名绕过
文件上传路径可控(通过POST方式发送到服务端),抓包修改上传路径../ upload/as.php+,修改+的hex值20为00
注意:因为post不会像get对%00进行自动解码,因此得使用url-decode解码一次;
pass-14:文件内容检测-文件头检测绕过(GIF89a)
主要是检测文件内容开始处的文件幻数文件格式幻数(外语: magic number),它可以用来标记文件或者协议的格式,很多文件都有幻数标志来表明该文件的格式
常见图片类型的文件幻数如下:
1.要绕过jpg文件幻数检测就要在文件开头写上固定的值,然后在文件幻数后面加上自己的一句话木马代码就行了。
过判断文件的前两个字节,判断文件类型
1、Png:89 50 4E 47 0D 0A 1A 0A
2、Jpg:FF D8
3、Gif:47 49 46 38 39|37 61
4、Bmp:42 4D
限制
1.只允许jpg. png.gif类型文件上传.通过读取上传文件内容开头的两个字节,进行判断。
2图片马无法字节解析,需要配合其他漏洞,如文件包含漏洞。
绕过
一句话木马开头添加图片文件幻数。如;
GIF89a
<?php @eval(s__POST[pass]);2>
或者生成图片马;
copy 1.jpg/b + 1.php/a 2.jpg
pass-15:文件内容检测-getimagesize()函数绕过
getimagesize函数将测定任何GIF,JPG,PNG,SWF. SWC,PSD,TIFF, BMP,IFF,JP2,JPX,J82,JPC,XBM或WBMP图像文件的大小并返回图像的尺寸以及文件类型和一个可以用于普通HTML文件中IMG标记中的 height/width文本字符串。如果不能访问filename指定的图像或者其不是有效的图像,getimagesize()将返回FALSE并产生一条E_WARNING级的错误。
PHP获取图像信息 getimagesize函数_PHP_不忘初心,方得始终-CSDN博客
限制
1.getimagesize函数检测图像大小信息
绕过
通过图片马 或 图片标识字段+—句话木马绕过
pass-16:文件内容检测-exif_imagetype函数绕过
exif_imagetype读取一个图像的第一个字节并检查其签名。
限制
1.使用exif_imagetype函数检测上传文件是否是图像类型,
绕过
通过图片马绕过
pass-17∶文件内容检测-图片二次渲渠绕过(代码注入绕过)
根据给定的图像文件创建一个新的图像。
限制 二次渲染:后端对文件的内容进行重写
1.只允许jpeg.png.gif类型文件上传
2. png图片文件二次渲染: imagecreatefrompng函数
3.jpeg图片文件二次渲染: imagecreatefromjpeg函数
4. gif图片文件二次渲染: imagecreatefromgif函数
绕过
通过对比渲染前后的图片,寻找未被渲染的地方,并在其中插入语句
可以用图像处理软件对—张图片进行代码注入,这类攻击的原理是:在不破坏文件本身的渲染情况下找一个空白区进行填充代码,一般是图片的注释区,这样能保证本身文件结构是完整的,对于渲染测试基本上都能绕过。
可以直接使用Hex软件(如010 Editor、winhex等)在未被渲染的位置写入代码(不能损坏文件,不然可能会被检测为非图片格式)(是替换原位置代码,且原位置代码无伤大雅)