黑名单规则绕过
绕过前端 js 检测方法
判断是否为前端检测还是后端服务器检测方法
前端绕过,我们可以通过浏览器中F12进入开发者模式修改前端代码
或者
上传一个jpeg等image格式的后缀,里面内容是恶意代码,通过BP抓包修改jpeg为.php后缀;达到绕过前端规则的目的
绕过 contnet-type 检测上传
对于一些上传模块,会对http类型头进行检测,如果是图片类型,允许上传文件到服务器,否则返回上传失败
因为服务器端是通过content-type判断类型,content-type在客户端可被修改。所以此文件上传也有可能被绕过风险
抓包修改content-type类型为后台允许的类型image/jpeg
在repeater中,方便查看响应包及其上传后的大马路径
通过在浏览器中输入大马所在路径,发现后台成功解析
常见MIME类型
超文本标记语言 .htmltext/html普通文本 .txttext/plainRTF 文本 .rtfapplication/rtfGIF 图形 .gifimage/gifPNG图形 .pngimage/pngJPEG 图形 .jpeg、.jpgimage/jpegau 声音文件 .auaudio/basicMIDI 音乐文件 mid、.midiaudio/midi、audio/x-midiRealAudio 音乐文件 .ra、.ramaudio/x-pn-realaudioMPEG 文件 .mpg、.mpegvideo/mpegAVI 文件 .avivideo/x-msvideoGZIP 文件 .gzapplication/x-gzipTAR 文件 .tarapplication/x-tar
绕过黑名单上传
上传模块时,有时会写成黑名单过滤机制,后台服务器会将上传的文件后缀名与程序中黑名单(代码中会提示不允许php、asp等提示则判断为黑名单限制)进行检测,如果后缀名在黑名单列表内,则禁止上传改文件
上传黑名单以外的后缀名即可。
在 iis 里 asp 禁止上传了,可以上传 asa cer cdx 这些后缀,如在网站里允许.net执行,可以上传 ashx 代替 aspx。如果网站可以执行这些脚本,通过上传后门即可获取 webshell。
在不同的中间件中有特殊的情况,如果在 apache 可以开启 application/x-httpd-php
在 AddType application/x-httpd-php .php .phtml .php3
后缀名为 phtml 、php3 均被解析成 php 有的 apache 版本默认就会开启。
上传目标中间件可支持的环境的语言脚本即可,如.phtml、php3。
此时我们上传一个后缀为php3的shell文件,发现后台成功上传且解析(另外在windows下搭建环境的话需要php为5.2.x的版本)
同解析后缀名
. htaccess 重写解析绕过上传
在文件上传处,黑名单过滤了所有的能执行的后缀名,如果允许上传.htaccess
.htaccess文件的作用是 可以帮我们实现包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定 IP 地址的用户、只允许特定 IP 地址的用户、禁止目录列表,以及使用其他文件作为 index 文件等一些功能。
在 htaccess 里写入 SetHandler application/x-httpd-php 则可以文件重写成 php 文件。
要 htaccess 的规则生效 则需要在 apache 开启 rewrite 重写模块,因为 apache是多数都开启这个模块,所以规则一般都生效
本地创建.htaccess文件并将如下内容加入其中(意为上传的png图片,并且通过处于相同目录下的htaccess文件会将png文件当做php执行脚本去解析)
<FilesMatch 'png'>
SetHandler application/x-httpd-php
</FilesMatch>
之后将编辑好的.htaccess文件上传到后台
接下来上传内置好PHPinfo函数的图片,看是否后台能解析
大小写绕过上传
后台若是没有对上传的后缀名的大小写进行严格判断,导致可以更改后缀大小写可以被绕过。如 PHP、 Php、 phP、pHp
通过查看黑名单,发现phP没有禁止,我们尝试上传
空格绕过
如果文件名后缀没有过滤空格的话,我们可以抓包通过空格进行绕过
利用 windows 系统特征绕过上传
在win系统中,系统对文件名后缀有点的,比如.php.会把最后的点忽略系统最终解析为.php;因此针对于windows系统可以尝试后缀加点进行绕过
::$DATA (NTFS 交换数据流)绕过上传
如果后缀名没有对::$DATA 进行判断,利用 windows 系统 NTFS 特征可以绕过上传。
::$DATA # 其中一个冒号表示创建文件,两个冒号表示写入文件内容
利用 windows 环境的叠加特征绕过上传
在 windwos 中如果上传文件名 shell.php:.jpg 的时候,会在目录下生产空白的
文件名 shell.php
再利用 php 和 windows 环境的叠加属性,
以下符号在正则匹配时相等
双引号" 等于 点号.
大于符号> 等于 问号?
小于符号< 等于 星号*
文件名.<或文件名.<<<或文件名.>>>或文件名.>><空文件名
先上传一个jpg文件,内置phpinfo函数
抓包修改后缀为ggbond.php:.jpg后发包,此时服务器已经创建了ggbond.php空白文件
接下来继续在repeater模块中操作
请求包中修改文件名为ggbond.>>>其中三个大于号表示匹配后面三个后缀并将内容写入到匹配的文件中
也可以使用phpinfo.php:$DATA 命令上传并创建空白文件
之后如何写入内容,同上
双写后缀名绕过
有的代码会把黑名单后缀名替换成空 $file_name = str_ireplace($deny_ext,"", $file_name);(str_ireplace则为此作用)
比如a.php会被后台将php替换为空,此时我们可以使用双写绕过
例如pphphp等绕过限制
白名单规则绕过
上面都是黑名单绕过姿势,如果黑名单上传检测后,没有限定后缀名,绕过的方法很多;
接下来就开始针对于白名单规则的一个绕过姿态,相对于黑名单而言,白名单较为安全,但是有可控的参数目录,也存在被绕过的风险
目录可控%00 截断绕过上传
PHP版本<5.3.4
关闭magic_quotes _gpc(magic_quotes _gpc=OFF)
代码中使用白名单限制上传的文件后缀名,只允许指定的图片格式。但是$_GET['save_path']服务器接受客户端的值,这个值可被客户端修改。所以会留下
安全问题。
在URL请求行中构造payload
../upload/ggbond.php%00
当ggbond.php%00和maggbond.jpg拼接之后在后端会被最终识别为ggbond.php(%00后面内容会被截断不会读取)
目录可控 POST 绕过上传
上面是 GET 请求的,可以直接在 url 输入%00 即可截断,但是在 post 下直接注入%00 是不行的,需要把%00 解码变成空白符,截断才有效。才能把目录截断成文件名。
第十二关代码同样是白名单限制后缀名,$_POST['save_path']是接收客户端提交的值,客户端可任意修改。所以会产生安全漏洞。
在请求体中对1构造的payload的%00进行编码绕过
成功上传
文件头检测绕过上传
有的文件上传,上传时候会检测头文件,不同的文件,头文件也不尽相同。常见的文件上传图片头检测 它检测图片是两个字节的长度,如果不是图片的格式,会禁止上传。
常见的文件头
- JPEG (jpg),文件头:FFD8FF
- PNG (png),文件头:89504E47
- GIF (gif),文件头:47494638
- TIFF (tif),文件头:49492A00
- Windows Bitmap (bmp),文件头:424D
将内置函数放入动图gif中(下面copy命令在windows的DOS命令行中执行生成)
copy 3.gif/b+phpinfo.php dt.gif
查看恶意gif文件是否成功创建
上传恶意gif文件并且复制上传后的gif文件路径
在文件包含漏洞处对其上传恶意文件进一步读取
成功解析
文件头检测绕过上传方法二
直接上传phpinfo文件,在抓取的数据包中手工写入符合需求的文件头
接着通过文件包含漏洞成功解析phpinfo动态脚本
图片检测函数绕过上传
getimagesize 函数是获取图片的大小,如果头文件不是图片会报错直 接可以用图片马绕过检测
方法可直接用上面上传gif恶意文件方法绕过,下面我再通过jpg文件型图片马进行演示
接着通过文件包含漏洞解析成功
uploadlabs第十五关时候phpstudy需要开启exif服务,如下图;之后绕过方法同上
绕过图片二次渲染上传
有些图片上传,会对上传的图片进行二次渲染后在保存,体积可能会更小,图片会模糊一些,但是符合网站的需求。例如新闻图片封面等可能需要二次渲染,因为原图片占用的体积更大。访问的人数太多时候会占用很大带宽。二次渲染后的图片内容会减少,如果里面包含后门代码,可能会被省略。导致上传的图片马,恶意代码被清除。
首先判断图片是否允许上传git文件;gif 图片在二次渲染后,与原图片差别不会太大。一般针对于二次渲染攻击最好用gif图片马
将原图片上传,下载渲染后的图片进行对比(原图会动,渲染后的新图片不会动了),找相同处,覆盖字符串,填写一句话后门,或者恶意指令
成功解析上传的二次渲染gif文件
文件名可控绕过上传
文件上传时,文件名的可被客户端修改控制,会导致漏洞产生。
%00截断
%00截断需要gpc关闭
php 版本小于 5.3.4
Nginx0.83
成功上传
分号;截断
;截断需要1在IIS6.0环境中才能绕过
/、绕过
杠点绕过,无版本限制条件
与中间件漏洞配合绕过
apache 1.x/2.x 遇到不认识的后缀名会先从后向前解析,具体分析如下
phpinfo.php.a 与apache中间件漏洞配合可以上传,但是是否能解析需要看相应中间件版本
phpinfo.php.a 会被中间件从右向左解析为a.php
数组绕过上传
有的文件上传,如果支持数组上传或者数组命名。如果逻辑写的有问题会造成安全隐患,导致不可预期的上传。这种上传攻击,它是属于攻击者白盒审计后发现的漏洞居多。
总结
判断是否为黑白名单,如果是白名单 寻找可控参数。如果是黑名单禁止上传,可以用有危害的后缀名批量提交测试,查找未加入黑名单的执行脚本。
防御手段
- 通过服务器后端对上传的⽂件进⾏过滤,防⽌本地⽂件上传限制被绕过
- 及时查看最新公布漏洞通告,如果服务器中涉及相关组件,要及时更新补丁包
- 对⽂件上传的⽬录进⾏控制,设置为不可执⾏ 。只要保证web容器⽆法解析该⽬录下⾯的⽂件,即使攻击者上传了脚本⽂件,服务器不对其进⾏解析,⽊⻢ 等也不会⽣效。
- 对上传⽂件类型进⾏判断。可以结合使⽤MIME Type、后缀检查等⽅式。在⽂件类型检查中,尽量使⽤⽩名单⽅式,⿊名单和前端都属于不可靠的。
- 使⽤随机数改写⽂件名和⽂件路径 。⽂件上传如果要执⾏代码,则需要⽤户能够访问到这个⽂件。在某些环境中,⽤户可以进⾏病毒⽊⻢等有害⽂件上传,但如果应⽤随机数改写了⽂件名和路径,攻击者在不知道程序源码情况下不了解随机数等规则,即不知道⽂件名称就不能访问。还有像shell.php.rar.rar 和crossdomain.xml 这种⽂件,都将因为重命名⽽⽆法攻击。
- 单独设置⽂件服务器的域名,⼀般信息搜集过程中都会进⾏的⼀项就是旁站和C端的收集,如果⽂件服务器和主站等在同⼀域名下,浏览器同源策略的关系,有可能攻击者通过⼀个点进⾏整体环境服务器的渗透。在单独设置⽂件服务器之后,⼀系列客户端攻击将失效,⽐如上传 crossdomain.xml、上传包含Javascript 的 XSS 利⽤等问题将得到解决。
版权归原作者 爱吃仡坨 所有, 如有侵权,请联系我们删除。