文件上传绕过
ID
|
技术描述
|
利用场景/条件
|
过程
|
参考
|
武器库关联
| ||||
---|---|---|---|---|---|---|---|---|---|
S1 | 00截断_url |
|
当url中出现%00时就会认为读取已结束 eg:https://mp.csdn.net/upfiles/?filename=test.php%00.txt 此时输出的是test.php ps:网上大部分教程提到这个技术,其实这个方法只适合任意文件上传后的利用,在上传php文件,因为url读取的内容在%00时就结束了,导致上传的文件一样会被拦截 |
https://www.jianshu.com/p/71b8b554d9b3http://www.admintony.com/%E5%85%B3%E4%BA%8E%E4%B8%8A%E4%BC%A0%E4%B8%AD%E7%9A%8400%E6%88%AA%E6%96%AD%E5%88%86%E6%9E%90.html | |||||
S2 | 00截断_php |
|
ps:有一个重点是修改上传的路径进行00截断,而不是文件名 0x开头表示16进制,0在十六进制中是00, 0x00就是%00解码成的16进制
这里在php的后面添加了一个空格和字母a,其实a写不写都可以,这里加a是为了显示空格的位置。空格是为了占位,方便修改00。然后打开hex,(空格的16进制为0x20)修改16进制内容,把20改成00:
这样上传文件时检测的是1.jpg,不会触发过滤,和路径合并后,因为00截断机制,最终保存的文件名为1.php,相当于上传了一个1.php的文件 另外:
|
https://www.jianshu.com/p/71b8b554d9b3http://www.admintony.com/%E5%85%B3%E4%BA%8E%E4%B8%8A%E4%BC%A0%E4%B8%AD%E7%9A%8400%E6%88%AA%E6%96%AD%E5%88%86%E6%9E%90.html | |||||
S3 |
客户端JavaScript检测 |
客户端进行了JS校验检测 |
|
https://www.cnblogs.com/TomDwan/p/14550984.html | |||||
S4 |
服务器后端检测_ 文件类型检测 |
检验请求中content-type是否符合可接受的上传类型 |
抓包将http请求头中的content-type改为可接受图片形式,即可绕过,如 "image/gif" "image/png" "image/jpeg" |
https://www.cnblogs.com/TomDwan/p/14550984.html | |||||
S5 |
服务器后端检测_文件头类型检测 |
使用getimagesize()函数来获取文件的MIME类型,通过文件头进行判断文件类型 |
先使用编辑工具在数据最前面添加图片的文件头进行伪造,即可绕过,如: gif: GIF89ajpg jpeg: FF D8 FF png: 89 50 4E 47 0D 0A |
https://www.cnblogs.com/TomDwan/p/14550984.html | |||||
S6 |
服务器后端检测_ 文件内容检测 |
对文件的内容做检测 |
从特殊敏感字符开始进行Fuzz测试,探测webshell中有多少必要的字符存在被替换,如果构成webshell执行的字符被替换得较多,剩下未过滤的字符的难以支撑webshell执行,可以换个角度利用系统,调用脚本语言,如<script language='php'>system('ls');<script> |
https://www.cnblogs.com/TomDwan/p/14550984.html | |||||
S7 | 二次渲染 | 主要就是后端调用了php的GD库,利用imagecreatefromjpeg()函数提取了文件中的图片数据,然后再重新渲染 | 借鉴二进制中钩子的思想,其实就是在上传图片中找一块"地方",存储webshell,这块"地方"要求在后端处理后没有被过滤掉。那就上传一个正常的文件,然后下载下来,diff一下,查看哪些位置没有被改动过,然后添加webshell进行尝试。 | https://www.cnblogs.com/TomDwan/p/14550984.html | |||||
S8 | IIS 5.x/6.0解析漏洞 |
IIS 5.x/6.0 |
1.目录解析
即:新建一个名为”test.asp”的目录,该目录中的任何文件都被IIS当做asp程序执行(特殊符号是”/“)
即分号后的不被解析,仍被IIS当做asp程序执行。 |
https://zerlong.com/300.html | |||||
S9 |
IIS7.0/IIS 7.5/ Nginx <8.03畸形解析漏洞 |
|
在默认Fast-CGI开启状况下,上传一个名字为wooyun.jpg,内容为
|
https://yinwc.github.io/2018/07/02/iis%E6%96%87%E4%BB%B6%E8%A7%A3%E6%9E%90%E6%BC%8F%E6%B4%9E/https://zerlong.com/300.html | |||||
S10 |
Windows操作系统规则 |
|
|
https://yinwc.github.io/2018/07/02/iis%E6%96%87%E4%BB%B6%E8%A7%A3%E6%9E%90%E6%BC%8F%E6%B4%9E/https://blog.csdn.net/weixin_44032232/article/details/109005766 | |||||
S11 |
Nginx空字节代码执行漏洞 |
nginx version0.5.,0.6., 0.7 <= 0.7.65, 0.8 <= 0.8.37 | Nginx在图片中嵌入PHP代码然后通过访问 xxx.jpg%00.php可以解析php代码,所有可以构造图片马进行解析,下面S17有图片马的构造方法 |
https://zerlong.com/300.html | |||||
S12 | 绕过安全狗 | 安全狗4.0 |
|
https://mp.weixin.qq.com/s?__biz=MzI5MDU1NDk2MA==&mid=2247496973&idx=1&sn=6843d879919ee0ee69311cc4befc05ec&chksm=ec1ca032db6b2924c5a7b7e2f38ff6e4fabbc16dca1332fd8166b18965253e13c618737dea7e#rd | |||||
S13 | apahce换行解析漏洞 | Apache 2.4.0~2.4.29 |
|
https://zhuanlan.zhihu.com/p/125115734 | |||||
S14 |
Apache多后缀解析漏洞 |
使用module模式与php结合的所有版本 apache存在未知扩展名解析漏洞(如果是使用fastcig模式与php结合的所有版本apache不存在此漏洞) |
上传index.php.abc文件 Apache会将其解析为php文件。这样可以绕过后台的后缀检测 |
https://zhuanlan.zhihu.com/p/125115734 | |||||
S15 | 条件竞争 |
|
首先上传一个可以在访问路径下写入webshell的php文件, 同时我们使用多线程并发的访问刚刚上传的文件,总会有一次在上传文件到删除文件这个时间段内访问到上传的php文件,一旦我们成功访问到了上传的文件,那么它就会向服务器写一个webshell文件。 |
https://cloud.tencent.com/developer/article/1650655 | |||||
S16 | 黑名单绕过 | 服务器使用黑名单进行过滤,可以尝试使用其他的后缀名绕过 |
|
||||||
S17 | 图片马 | 需要结合文件包含漏洞或者其他解析漏洞 | copy a.jpg/b+yi.asp/a b.jpg (a.jsp是正常图片,yi.asp是木马,最后b.jpg是图片马,结合文件包含漏洞可以利用) | ||||||
S18 | zip文件自解压 |
|
如果解压后的路径不变的话比较容易利用,比如上传a.zip后自动解压出a.php,那么上传成功 | ||||||
S19 | 大小写&双写绕过 | 服务器过滤规则不严谨的情况下 |
大小写:c.AsP 双写:c.asaspp |
||||||
S20 | .htaccess绕过 |
|
eg:SetHandler application/x-httpd-php 或AddType application/x-httpd-php .jpg 的.htaccess文件(具体内容根据语言和apache版本决定)使得原本无害的后缀文件强制使用php或其他语言进行解析
|
||||||