文件上传思路

upload-labs分类

image-20201005212658046

如何判断上传漏洞类型:

image-20201005213135171

结合Upload_Attack_Framework来完成对上传漏洞的总结

客户端

js检查及绕过

这类检测通常在上传页面里含有专门检测文件上传的 javascript 代码 最常见的就是检测扩展名是否合法

绕过方法:

  1. 禁用相关检测js
  2. 绕过后使用burp进行截断修改后提交

服务端

检查后缀

黑名单

上传.htaccess绕过:

当黑名单中不存在.htaccess的时候 可上传名为.htaccess的文件,内容如下:

<FilesMatch "lktop">
SetHandler application/x-httpd-php
</FilesMatch>

当apache在解析该目录下的php时,就会按照.htaccess中的要求去解析,只要匹配到了文件名里有lktop这个字符串,就会把该文件当成php文件解析

还可写成

<FilesMatch "lktop.lpp">
SetHandler application/x-httpd-php
</FilesMatch>
上传特殊可解析后缀

在apache的httpd.conf配置中,存在

AddType application/x-httpd-php .php .php3 .phtml

可将 php3 phtml后缀解析为php进行执行

后缀大小写绕过

在黑名单处理前并未对后缀进行大小写转换,故采用混合大小写即可。(phP,pHp,pHP,Php.......)

空格绕过

在黑名单处理前并未对文件名进行去空处理,在后缀尾部加空格即可。

点绕过

在黑名单处理前并未对文件名进行去”.”处理,用windows特性,会自动去掉后缀名中最后的”.”,可在后缀名中加”.”绕过。

::$DATA绕过

在黑名单处理前并未对文件名进行去”::$DATA”处理,php在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持"::$DATA"之前的文件名

双写绕过

由于保存的文件名是使用的处理过的文件名,故可以双写尾部。(如 点+空格+点)

当对黑名单中的后缀名进行替换为空处理时,同样使用双写进行处理。(如 pphphp)

白名单

MIME类型绕过:

截包修改Content-type类型为image/gif image/jpeg image/png

%00截断

只存在于php5.3.4以下

在url中%00表示ascll码中的0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束。

GET可以把url自动转码,但当save_path在post包里时,POST方式不会自动将%00编码为空字符。

所以需要在burp中选中%00右击->url->urldecode go即可。

检查内容

图片马生成:

copy normal.jpg /b + shell.php /a webshell.jpg

或用二进制打开在尾部添加木马

如遇到二次渲染可以分析不变的位置,并把木马插入相应的位置,详细分析参考:https://xz.aliyun.com/t/2657

检测逻辑

文件上传后会一步步检查文件,检查大小,检查是否存在,然后对文件重新命名,可以使用burp不断发送上传数据包,由于条件竞争,程序会出现来不及rename的问题,从而上传成功。

参考

posted @ 2020-09-30 13:36  lktop  阅读(326)  评论(0编辑  收藏  举报