-- 情况绕过 --
前端检测绕过
- 简介: 前端检测上传的文件的后缀名
- 绕过:
- 先上传合法的文件, 再抓包修改为漏洞文件
- 修改相关检测的js代码
- 禁用js (火狐禁用js)
地址栏输入about:config
在搜索地址栏中输入javascript.enabled
鼠标右键第一个,弹出菜单。再点击切换
当一行的中的,值由trun变成false。时候说明已经关闭了。
后端检测文件类型
- 检测content-type: 直接修改为合法MIME (对文件功能无影响)
类型 |
描述 |
典型示例 |
text |
表明文件是普通文本,理论上是人类可读 |
text/plain ,
text/html ,
text/css, text/javascript |
image |
表明是某种图像。不包括视频,但是动态图(比如动态gif)也使用image类型 |
image/gif ,
image/png ,
image/jpeg ,
image/bmp ,
image/webp ,
image/x-icon ,
image/vnd.microsoft.icon |
audio |
表明是某种音频文件 |
audio/midi ,
audio/mpeg,audio/webm,
audio/ogg,audio/wav |
video |
表明是某种视频文件 |
video/webm , video/ogg |
application |
表明是某种二进制数据 |
application/octet-stream ,
application/pkcs12 ,
application/vnd.mspowerpoint ,
application/xhtml+xml ,
application/xml ,
application/pdf |
类型 |
后缀 |
文件头(文件签名) |
JPEG |
jpg |
FF D8 FF |
PNG |
png |
89 50 4E 47 0D 0A 1A 0A |
GIF |
gif |
47 49 46 38 37 61 (GIF87a) 或 47 49 46 38 39 61 (GIF89a) |
XML |
xml |
3C 3F 78 6D 6C |
ZIP Archive |
zip |
50 4B 03 04 |
RAR Archive |
rar |
52 61 72 21 |
Windows Bitmap |
bmp |
42 4D C0 01 |
TIFF |
tif |
49 49 2A 00 |
HTML |
html |
68 74 6D 6C 3E |
MS Word/Excel |
doc/xls |
D0 CF 11 E0 |
RIFF |
webp |
52 49 46 46 |
后端检测扩展名(黑名单)
- 特殊解析后缀绕过尝试一些可平替的冷门格式 php平替: php3,php4,php5,phtml,pht,phps
- 大小写绕过将文件后缀大小写
- 点绕过windows文件名后缀后加点号会被自动删除, linux后缀后空白符后的点号会自动删除,但数据包中可以加上点号,上传后自动删除
- 空格绕过文件名后缀后加空格会被自动删除,但数据包中可以加上空格,上传后自动删除
- .htaccess解析绕过apache中.htaccess文件可以将同目录文件 名字中含指定字符串的 按照固定的方式解析, 可以先上传.htaccess再上传脚本文件
常用.htaccess设置
AddType application/x-httpd-php .png
<FilesMatch "1">
SetHandler application/x-httpd-php
</FilesMatch>
- .user.ini解析绕过apache中.user.ini文件可以配置同目录文件的部分设置(除PHP_INI_SYSTEM模式的配置以外都可以在.user.ini中进行重写) 注:若没反应记得多刷新一下(经常这样), 该方法类似于[[文件包含]] (除了不能用伪协议, 相关绕过方法可参考)
常用.user.ini设置
1. auto_append_file=filename //一个相当于在每个php文件尾部加上 include('filename')
2. auto_prepend_file=filename //一个相当于文件内容开始加上 include('filename')
filename实际为路径,可为绝对路径和相对路径
上面两个则为利用文件包含漏洞执行代码
使用前提:服务器使用CGI/FastCGl模式,上传目录下要有可执行的php文件来执行include('filename')
.user.ini只对他同一目录下的文件起作用
- **::绕过文件名后加上DATA绕过(windowsphp)∗∗文件名后加上‘::DATA
会将其后的数据当成文件流处理,不会检测后缀名, 上传到服务器的文件在Windows中会自动去掉
::$DATA`
- 后缀名嵌套(双后缀名绕过)若后端仅为有限次替换黑名单上后缀名为空后再传入,则嵌套后缀名如.pphphp
- 配合解析漏洞配合相应中间件的解析漏洞
- 伪装文件夹在数据包中在文件名后面加上/.将文件伪装成文件夹,最后保存时正常, 但检测到的后缀名为
后缀名
/. (在/.后面再利用%00.<正常文件格式>可以绕过白名单)
后端检测扩展名(白名单)
- %00截断(php版本小于5.3.29,关闭[[魔术引号]])
- 原理:在保存文件时路径中%00后的字符会被忽略
- 修改文件的上传地址,在地址后面加上想要的文件名加上%00,该方法能截断后端给文件命名的操作,%00后的路径名会被忽略——注:在get中用%00,在post等中要将%00解码 例子:如修改上传路径./upload为./upload/1.php%00966,并上传文件123.jpg 在后端则会将文件保存为./upload/1.php%00<后端想要赋予的文件名>.jpg, 最后将上传的文件123.jpg保存为文件1.php
- 修改文件的上传名字,在文件脚本格式后面加上%00与另外一个正常格式,若后端只能检测在最后面的一个格式,则可以绕过
- 配合文件包含通过文件包含会将所有类型文件当作php解析的特点, 以进行代码执行
图片二次渲染绕过
- 简介: 许多服务会将上传的图片渲染后进行显示, 此时可能会改变写入图片马的代码部分缺失
- 绕过: 比较新旧文件的内容,识别出相同(未被改变)的部分,将后门代码写到该部分 (待定)
条件竞争
- 简介: 服务可能会将上传的文件先保存于可访问目录, 后再进行更改(改名,删除,换位置等), 更改后可能导致无法访问/位置未知
- 绕过: 通过条件竞争(原理-文件被访问时无法对其进行更改, 会造成更改的代码堵塞), 上传文件后不断访问该文件, 使得木马执行后再被更改
文件目录位置无法访问
思路: 先上传一个zip,其中压缩了一个链接到/var/www/html的软链接test。然后,再上传一个zip,这次的zip中含有一个正常的文件夹test,里面有一句话木马的php文件。
第一次解压,会在tmp目录下产生一个软链接test。在第二次解压时,因为存在同名的文件(软链接test和正常文件夹test),此时解压程序会将test文件夹中的文件试图解压到已经存在的test中,而这个已经存在的test指向了/var/www/html,所以实际的解压位置就变成了/var/www/html