骑木马的哥哥博客

独上高楼,望尽天涯路

Menu
  • 首页
  • 站点地图
  • 文件库
  • 关于
Menu

web安全之文件上传漏洞

Posted on 2021年1月18日2021年1月18日 by 骑木马的哥哥
  • 什么是文件上传漏洞?
    文件上传漏洞是网站程序在处理上传功能时存在逻辑缺陷,导致攻击者能够上传包含恶意代码的脚本程序,达到控制服务器的目的。
  • 文件名未作任何限制
    如果网站允许上传任意文件,攻击者将能够直接上传包含恶意代码的脚本程序。渗透时,可直接上传一句话木马或大马,拿到webshell。
  • 客户端检测
    如果网站在网站前端,使用Javascript去验证上传的文件是否合法。渗透时可以把页面复制到本地,在本地编辑,去掉文件校验相关的Javascript代码,在本地完成上传。也可以先将文件后缀改为允许上传的文件后缀,在上传时抓包,在抓到的包中将文件后缀改为可解析脚本的后缀,即可达到绕过前端验证的目的。验证该漏洞,可以打开浏览器的调试工具,如果上传文件,调试工具中没有上传请求,说明是客户端检测。
  • 黑白名单绕过
    有些网站程序在后端进行文件上传后缀的校验,使用了黑白名单的方式。有时候,由于开发者的安全意识不足,可能导致黑白名单过滤不全。我们可以通过字典,使用burpsuite去批量上传字典中不同后缀的文件。
    可以使用:https://github.com/c0ny1/upload-fuzz-dic-builder
  • content-type检测
    有些网站在后端仅校验了content-type文件头,可以使用burpsuite抓上传包,进行content-type字段的修改,达到绕过的目的。
  • 文件头检测
    有些网站在后端校验了文件头。比如必须是图片,才允许上传。这种情况,渗透时可制作图片马进行绕过。Windows下进入命令提示符,使用copy命令可进行图片马的制作,比如copy 1.jpg/b+shell.php shell.jpg。Linux下可使用cat命令制作图片马,比如:cat shell.php>>1.jpg。
  • iis6.0的解析漏洞
    如果网站程序限定了文件上传后缀,无法突破时。但网站使用的中间件是iis6.0,可以尝试利用iis的解析漏洞。抓文件上传包,将文件名改为:shell.php;.jpg,或shell.php;jpg,这样文件后缀为jpg,但实际会按照php进行解析。
    出该漏洞外,iis6.0还存在目录解析漏洞。upload/xx.asp/1.jpg该路径下,目录名为xx.asp,该目录下的文件为1.jpg,但在实际访问时,1.jpg会被解析成asp。如果上传文件的路径目录可被控制,可设法将上传目录改为xx.asp。经测试,目录名为.asp也可以。只有*.asp才可以,除asp之外的xx.php和xx.aspx等不可以。IIS6.0 默认的可执行文件除了asp还包含这三种 *.asa  *.cer *.cdx
  • apache重写解析漏洞
    如果网站使用的中间件为apache,开启了重写模块,开启了.htaccess的支持,可通过上传.htaccess文件去更改网站上传目录的解析行为。比如将jpg按照php解析。
  • 附上.htaccess的示例代码:
<FilesMatch "jpg">
SetHandler application/x-httpd-php
</FilesMatch>

上述代码能够将jpg文件解析为php。可以将第一行的jpg改为shell.jpg,即只将shell.jpg解析为php,会更加隐蔽。

  • %00截断漏洞
    在php5.3.4以下的版本中存在该漏洞。有三种情况可以使用该漏洞。利用漏洞时,需要对%00进行url解码。
    第一种:直接截断上传文件名。比如上传文件名为:shell.php%00.jpg。实际上传后,文件后缀为php,%00后面的内容会失效。需要注意的是,网站程序获得的后缀依然是php,即网站程序只认%00前面的部分。这个特性可用来绕过一些waf。
    第二种:配合iis6.0的目录解析漏洞食用。如果我们能控制上传的目录名,即网站程序的逻辑是从前端接收保存的文件夹名,如果该文件不存在,则创建,创建后执行上传。这时,上传时可将网站上传目录的表单值设为:xx.asp%00。网站程序提示上传失败,但其实xx.asp目录已经创建成功了,失败是由于保存上传文件的目标路径被%00截断了,路径非法导致的。在执行上传的逻辑时,已经执行了新建文件夹的逻辑。然后再把上传目录的表单值改为xx.asp,去掉%00,再上传一个jpg的木马,这时由于iis6.0的解析漏洞,上传的jpg会被当做asp执行。
    第三种:如果我们能控制上传的目录名,即网站程序的逻辑是从前端接收保存的文件夹名,如果该文件不存在,则创建,创建后执行上传。渗透时,将上传的目录表单值设为shell.php%00,假如上传的文件名为:muma.jpg。那么最终上传的路径为shell.php%00/muma.jpg。由于截断的原因,实际上传的文件为:shell.php。
  • 利用系统特性
    如果目标系统使用的组合为windows,iis和php,当上传文件名为:shell.php:jpg时,会自动创建shell.php空白文件。然后使用文件名:shell.php<<<进行上传,可以将上传内容写入到shell.php。 使用NTFS交换数据流,可创建和写入文件。使用<文件名>:$DATA可创建空白文件,使用<文件名>::$DATA可创建和写入文件。
  • 双文件上传
    如果网站支持双文件上传,但仅对第一个文件进行了上传检验,可以使用该漏洞。在本地编辑一个html页面,写一个form上传表单,写两个文件域,并把name属性写成一样的。第一个文件域选择合法的后缀,第二个域选择木马,进行上传。
  • 空格及句点文件上传
    抓上传包,在上传的文件名后面加上空格或者是.,可以加多个。有时候能绕过waf。
  • fast-cgi配置漏洞
    如果iis7.0,iis7.5及nginx,开启了fast-cgi,则存在该漏洞。当访问1.jpg/.php时,1.jpg会被解析为php。验证该漏洞的方法为在网站上找一张图片,在该图片的url后面加上/.php进行访问,如果显示乱码,则说明存在该漏洞。

发表评论 取消回复

邮箱地址不会被公开。 必填项已用*标注

致辞

欢迎光临骑木马的哥哥博客

搜索

分类

  • Linux
  • PHP
  • Python
  • 信息安全
  • 渗透测试
  • 观后感
  • 随笔
  • 默认分类

归档

近期评论

  • 龙果果发表在《记2021新年除夕夜》
  • 一位WordPress评论者发表在《世界,您好!》

友情链接

打怪升级|自学成菜
龍果果的家

© 2021 骑木马的哥哥博客 | Powered by Minimalist Blog WordPress Theme