挖掘文件上传漏洞有哪些思路?

文件上传漏洞是获取服务器权限的最快途径。虽然有很多相关的资料,但是很多人对于上传验证方式,如何绕过检测,哪些上传解析场景会造成危害还是很模糊。本文做了一些阐述,然后在上传webshell之外增加了一些非常规的挖矿手势,包括XSS、重定向、Dos、CSRF等等。

1,基础知识:

为了深入理解文件上传,我们必须了解上传属性、常见文件的结构、图形处理功能等等。

1)报文特征:

观察文件上传消息的特征:

头中的内容类型有两个特征:

1.multipart/form-data(表单的enctype属性,指定为二进制数据)

2 .边界字符串(用作区分POST数据的分隔符)

帖子内容有五个特点:

1.内容-处置:表单-数据

2.名称:输入表单名称

3 .文件名:文件名

4.Content-Type:定义文件的类型和网页的编码,决定浏览器以什么形式和编码读取这个文件;

5.边界:内容类型的值前面有两个-

2)常见的检查规则

现有常用的上传验证规则不外乎以下几类:

1.客户端javascript验证(后缀)

2.文件头内容类型字段检查(image/gif):带参数。

4.检查后缀:扩展名的黑/白列表

5.文件内容头检查:GIF89a

6.文件内容验证:文件信息,二次渲染

7.自定义规范检查

3)澄清

文件上传和文件解析是两个过程。即使我们上传了一个php文件,也被解析为图片。访问php文件时会显示“图片无法显示”。或者我们上传一个jpg文件,但是里面混了一个shell脚本,如果解析成php文件就会执行;或者上传地无法绕过检测只能上传jpg文件,但其他功能中有文件包含等其他功能,仍然可以成功执行。

让我们回到安全的本质。上传是“输入”,文件解析是“输出”。任何漏洞挖掘都需要结合输入和输出。

2、旁路技巧:

下面是一些实战中常用的绕过技术:

1)后缀黑名单

下列替换后缀也可以被解析为shell:

php:。phtml,。phpt,. php3,. php3p

asp:。aspx、asmx、ashx、web.config

perl:。pl,。pm,。cgi,。解放运动

jsp:。jspx,。jsw,。jsv,。jspf

Coldfusion:。cfm,。cfml,。cfc,。dbm

此外,它可以配合操作系统的文件命名规则:

。php。,.php空间,。php:1.jpg,。php::$DATA等。

带有这些后缀的文件,不规则符号后会被windows系统自动删除,只留下。php。

2)后缀白名单

除了组合各种服务器解析特性之外,还经常使用空字节注入。插入空字节值的原因是一些应用服务器脚本语言使用c/c++库来检查文件名和内容。在C/C ++中,一行以/00结尾,称为NullByte。所以只要解释器在字符串末尾看到一个空字节,就会停止读取,认为已经到了字符串末尾。

例如,我们将把Happy.jpg的名字改为Happy.phpA.jpg,然后上传文件,在打嗝中捕获请求,并切换到十六进制视图。在字符串视图中查找文件名。查看相应的十六进制表,将41('A ')替换为00(空字节)。结果字符串变成Happy.php(空)。jpeg。因为php解释器内部使用C语言库,在Happy.php之后会停止读取文件名,文件会保存为Happy.php。

另一种绕过白名单的方法是使用双后缀:shell.php.jpg。