文件上传漏洞总结:原理与利用技巧

文件上传漏洞总结:原理与利用技巧

一、形成原理

攻击者突破了服务端的限制成功上传了可执行的恶意脚本文件。(或是上传大量文件——DOS攻击)

二、绕过技巧

0x01.文件后缀拦截绕过

Ⅰ.前端验证

前端验证没有安全性可言

  • 在浏览器禁用JS
  • 在浏览器正常发包,用代理软件抓包并篡改
Ⅱ.黑名单验证

黑名单验证有一定的安全性,绕过的思路是利用解析漏洞(Ⅰ.利用后端验证代码存在的匹配缺陷(过滤不全)Ⅱ.利用中间件的解析漏洞)

A.利用服务端代码存在的匹配缺陷(过滤不全)
1. 可被脚本程序解析的其他后缀

​ php:(.phpar | .php3 | .php4 | .php5 | .phps等)

​ 其他参考某靶场的一个黑名单:

$deny_ext = array( ".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess",".ini"
);
2. 大小写绕过

.php => .Php.pHp

3. 双写绕过

.php => .phphpp

B.利用其他“组件”的漏洞
1.Apache
1.1. Apache解析漏洞

(从右往左识别,并跳过无法识别的后缀名)

webshell.php.abc.def => Apache解析 => webshell.php

1.2. 上传.htaccess来修改Apache的解析配置项

如上传这样的.htaccess文件:

<FilesMatch "webshell">
SetHandler application/x-httpd-php
</FilesMatch>
2.IIS
2.1.分号截断

webshell.php;xxx.jpg=>webshell.php(6.x)

2.2.斜杠绕过

webshell.jpg/1.php=>webshell.php(7.0、7.5)

3.Nignx
3.1.斜杠绕过

webshell.jpg/1.php=>webshell.php(<8.03)

4.Windows
4.1. 点绕过

.php => .php.

4.2. 空格绕过

后端验证代码未删除空格(从而绕过黑名单),而Windows在处理文件名时会把空格省略

.php => .php(空格)

4.3. ::$DATA绕过

Windows的NTFS会将文件名后带::$DATA的当作文件流处理,躲过验证并保留之前的文件名

.php => .php::$DATA

​ 那么文件名为“webshell”的文件都会被当作php脚本执行(这里的文件名不包含后缀,如webshell.jpgwebshell.png

Ⅲ.白名单验证

白名单一般有更好的安全性(不会漏掉过滤项),绕过思路是找服务端文件操作的逻辑漏洞或更底层的截断漏洞(C语言将0认为是程序语句结束的标志)

1. MIME-Type绕过、Content-Type绕过(可尝试大小写)

在BurpSuite中修改即可

2. %00绕过——GET

对于GET,在BurpSuite的Raw视图下,对请求行添加%00
在这里插入图片描述

3. 0x00绕过——POST

对于POST,则需要在BurpSuite的Hex视图下,修改对应的二进制数据

在这里插入图片描述

0x02.文件内容拦截绕过

1.对文件内容进行二进制验证(仅对文件头验证)
  • 在文件二进制内容的开头添加文件幻数

    • GIF:47 49 46 38 39 61(GIF89a)

    • JPG:FF D8 FF E0 10 4A 46 49 46

    • PNG:89 50 4E 47 0D 0A 1A 0A

2.进行二次渲染

对比经由服务器渲染前后的图片的二进制内容(用WinHex等),尝试把“仍然存活,未变化”的内容替换为一句话木马

3.先存再判断是否删除

条件竞争:多线程快速上传并访问一个能生成新webshell的脚本文件

4.多文件上传

在POST的body中写入多个文件数据,一个合法文件,第二个为非法内容

0x03.Ⅵ.其他

1. 制作图片马

在这里插入图片描述

2. 更多绕过Tips

1.多文件上传
在POST的body中写一个合法文件,再写一个webshell文件

2.上传`.user.ini`
除了上传`.htaccess`,还可以上传`.user.ini`来指定更多规则
如内容为`auto_prepend_file=webshell.jpg`,则表明php将自动包含解析`webshell.jpg`中的内容,可以配合图片马getshell

3.字符拼接
Content-Disposition: form-data; name="webShell"; filename="webshell.php"
=>
Content-Disposition: fo+rm-da+ta; name="webShell"; filename="webshell.php"

4.filename后添加空格
Content-Disposition: form-data; name="webShell"; filename="webshell.php"
=>
Content-Disposition: form-data; name="webShell"; filename ="webshell.php"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Neonline

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值