文件上传漏洞一点小心得

admin 2022年5月20日03:08:09评论160 views字数 2353阅读7分50秒阅读模式

⛳文件上传漏洞

是指用户上传了一个可执行脚本文件, 并通过此脚本文件获得了执行服务器端命令的能力, 这种攻击方式是最为直接有效的。

“文件上传” 本身没有问题,有问题的是文件上传后, 服务器怎么处理解释文件,如果服务器的处理逻辑做的不够安全则会导致严重的后果。

文件上传漏洞一点小心得

🎃上传漏洞危害

  • 🎲注意几点:

🎲上传文件是web脚本语言,服务器的web容器解释并执行了用户上传的脚本,导致代码执行

🎲上传文件是病毒或者木马时,主要用于诱骗用户或者管理员下载执行或者直接 自动运行

🎲上传文件是Flash的策略文件 crossdomain.xml,黑客用以控制Flash在该域 下的行为(其他通过类似方式控制策略文件的情况类似)

🎲上传文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行

🎲上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼欺诈除此之外,还有一些不常见的利用方法,比如将上传文件作为一个入口,溢出服务器的后台处理程序,如图片解析模块;或者上传一个合法的文本文件,其内容包含了PHP脚本,再通过"本地文件包含漏洞(Local File Include)"执行此脚本

🎃漏洞利用

文件上传漏洞利用条件:

(1)能够成功上传木马。

(2)上传的木马能够被web容器解析执行,所以上传路径要在web容器覆盖范围内。

(3)用户能够访问上传的木马,所以得知道上传的木马准确路径。

     将一句话木马上传至服务器,并能成功访问。(页面空白访问成功)

文件上传漏洞一点小心得

 通过hackbar对变量a进行传值,即可完成服务端命令执行。

文件上传漏洞一点小心得

 还可以执行系统命令。

文件上传漏洞一点小心得

此外,还可以配合如菜刀,蚁剑等工具使用。

打开蚁剑,选择添加数据。

文件上传漏洞一点小心得

文件上传漏洞一点小心得

 输入好参数后测试连接,然后添加。

文件上传漏洞一点小心得

文件上传漏洞一点小心得

文件上传漏洞一点小心得

文件上传漏洞一点小心得

🍀文件类型检测绕过

  • ❄️ 更改请求绕过

有的站点仅仅在前端检测了文件类型,这种类型的检测可以直接修改网络请求绕过

同样的,有的站点在后端仅检查了HTTP Header中的信息

比如 Content-Type 等,这种检查同样可以通过修改网络请求绕过

  • 🎯 Magic检测绕过

有的站点使用文件头来检测文件类型,这种检查可以在Shell前加入对应的字节以绕过检查。几种常见的文件类型的头字节如下表所示

类型 二进制值
JPG FF D8 FF E0 00 10 4A 46 49 46
GIF 47 49 46 38 39 61
PNG 89 50 4E 47
TIF 49 49 2A 00
BMP 42 4D
  • 🎯 后缀绕过

部分服务仅根据后缀、上传时的信息或Magic Header来判断文件类型,此时可以绕过。

php由于历史原因,部分解释器可能支持符合正则 /ph(p[2-7]?|t(ml)?)/ 的后缀,如 php/ php5 / pht / phtml / shtml / pwml / phtm 等 可在禁止上传php文件时测试该类型。

jsp引擎则可能会解析 jspx / jspf / jspa / jsw / jsv / jtml 等后缀,asp支持 asa / asax / cer / cdx / aspx / ascx / ashx / asmx / asp{80-90} 等后缀。

除了这些绕过,其他的后缀同样可能带来问题,如 vbs / asis / sh / reg / cgi / exe / dll / com /bat / pl / cfc / cfm / ini 等。

  • 🌽 系统命名绕过

在Windows系统中,上传 index.ph. 会重命名为 . ,可以绕过后缀检查。也可尝试 index.php%20index.php:1.jpg index.php::$DATA 等。在Linux系统中,可以尝试上传名为 index.php/../aa/../index.php/. 的文件

  • 🍜.user.ini

在php执行的过程中,除了主 php.ini 之外,PHP 还会在每个目录下扫描 INI 文件,从被执行的 PHP 文件所在目录开始一直上升到 web 根目录($_SERVER['DOCUMENT_ROOT'] 所指定的)。如果被执行的 PHP 文件在 web 根目录之外,则只扫描该目录。.user.ini 中可以定义除了PHP_INI_SYSTEM以外的模式的选项,故可以使用 .user.ini 加上非php后缀的文件构造一个shell,比如 auto_prepend_file=01.gif

  • 🚸 WAF绕过

有的waf在编写过程中考虑到性能原因,只处理一部分数据,这时可以通过加入大量垃圾数据来绕过其处理函数。

另外,Waf和Web系统对 boundary 的处理不一致,可以使用错误的 boundary 来完成绕过。

  • 🍀 竞争上传绕过

有的服务器采用了先保存,再删除不合法文件的方式,在这种服务器中,可以反复上传一个会生成Web Shell的文件并尝试访问,多次之后即可获得Shell。

🎲 攻击技巧

  • 🐼 Apache重写GetShell

Apache可根据是否允许重定向考虑上传.htaccess内容为

AddType application/x-httpd-php .png
php_flag engine 1

之后就可以用png或者其他后缀的文件做php脚本了

  • 🐼 软链接任意读文件

上传的压缩包文件会被解压的文件时,可以考虑上传含符号链接的文件若服务器没有做好防护,可实现任意文件读取的效果

  • 🐼 防护技巧

使用白名单限制上传文件的类型

使用更严格的文件类型检查方式

限制Web Server对上传文件夹的解析

后端验证:采用服务端验证模式

后缀检测:基于黑名单,白名单过滤

MIME 检测:基于上传自带类型检测

内容检测:文件头,完整性检测

自带函数过滤:参考 uploadlabs 函数

自定义函数过滤:function check_file(){}

WAF 防护产品:宝塔,云盾,安全公司产品等

  • 🐼 参考链接

构造优质上传漏洞Fuzz字典

https://www.freebuf.com/articles/web/188464.html


更多文章 关注我们

原文始发于微信公众号(猫因的安全):文件上传漏洞一点小心得

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月20日03:08:09
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   文件上传漏洞一点小心得http://cn-sec.com/archives/1020643.html

发表评论

匿名网友 填写信息