常见web漏洞|文件上传漏洞+解析漏洞详解

upload-labs通关攻略教程【1-11关】
upload-labs通关攻略教程【12-18关】

文章目录

  • 文件上传
    • 概述
    • 文件上传漏洞测试流程
    • 注意
    • client check
      • 方法:
    • MIME type(服务端验证通过)
      • 小知识介绍
      • 方法:
    • getimagesize(php中用来判断目标文件是否为图片)
      • 思路:
      • 方法(图片木马的制作):
  • 解析漏洞
    • IIS6.0【web服务器】解析漏洞
      • 注意
      • IIS6.0特性
      • 练习1
      • 练习2
    • CGI解析漏洞
      • 练习

文件上传 概述 文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式进行重命名后存储在指定的目录。 如果说后台对上传的文件没有进行任何的安全判断或者判断条件不够严谨,则攻击着可能会上传一些恶意的文件,比如一句话木马,从而导致后台服务器被webshellWebShell 是一个网站的后门,也是一个命令解释器,不过是以Web 方式(HTTP 协议)通信(传递命令消息),继承了Web 用户的权限。WebShell 本质上是服务器端可运行的脚本文件,后缀名为.php/.asp/.aspx/.jsp 等,也就是说WebShell 接受来自于Web 用的命令,然后在服务器端执行。它的分类包括大马和小马,需要配合中国菜刀或中国蚁剑使用】,从而通过对该恶意文件的访问来控制整个web后台。
所以,在设计文件上传功能时,一定要对传进来的文件进行严格的安全考虑。比如:
  • 验证文件类型、后缀名、大小;
  • 验证文件的上传方式;
  • 对文件进行一定复杂的重命名;
  • 不要暴露文件上传后的路径;
  • 等等…
文件上传漏洞测试流程 1.对文件上传的地方按照要求上传文件,查看返回结果(路径、提示等);
2.尝试上传不同类型的“恶意”文件,比如xx.php文件,分析结果;
3.查看html源码,看是否通过js在前端做了上传限制,可以绕过;
4.尝试使用不同方式进行绕过:黑白名单绕过/MIME类型绕过/目录0x00截断绕过等;
5.猜测或者结合其他漏洞(比如敏感信息泄露等)得到木马路径,连接测试。
注意
  1. move_uploaded_filephp上传专用函数。
  2. phpphpsphp3php4php5phtml等这些后缀会被解析为php文件来执行。
  3. aspasaceraspx这些后缀会被解析为jsp来执行。
  4. windows会自动去除后缀末尾的空格和点。
  5. 靶场中第十关构建文件后缀这种方法很难,一般需要获得源码。
  6. 获得源码的途径:githubCMS魔改、源码泄露、官方提供、没有源码但是直到公司的开发风格、建模强测【最难】。
client check 方法:
【常见web漏洞|文件上传漏洞+解析漏洞详解】常见web漏洞|文件上传漏洞+解析漏洞详解
文章图片

1.按F12键打开开发者工具;
常见web漏洞|文件上传漏洞+解析漏洞详解
文章图片

2.上传文件是就会调用一次onchange,看上传文件是否符合要求,同时点击右键查看源码。常见web漏洞|文件上传漏洞+解析漏洞详解
文章图片
3.该操作属于在前端的操作,很容易绕过,即改变onchange后面的要求,即可成功上传我们想要上传的文件。常见web漏洞|文件上传漏洞+解析漏洞详解
文章图片

4. 客户端检测不建议关闭JS,有的网上传功能需要用到JS
MIME type(服务端验证通过) 小知识介绍
MIME多用途互联网邮件扩展类型,是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问时,浏览器会自动使用指定应用程序来打开。多用于一些客户端自定义的文件名,以及一些媒体文件打开方式。
每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio,图像image等,后面定义具体的种类。常见的MIME类型,比如:
超文本标记语言文本:.html,.html text/html
普通文本:.txt text/plain
PTF文本:.rtf application/rtf
GIF图形:.gif image/gif
JPEG图形:.ipeg,.jpg image/jpeg
方法:
1.分别新建一个.jpg文件和.php文件(新建一个.txt文件,保存一句话木马,比如,然后修改文件后缀为.php即可);
2.先上传.jpg文件,用burp抓包,复制符合要求的content type
3.随后上传.php文件,使用burp抓包,发送到repeater,将符合要求的content type 替换了.php文件中的content type,点击render一栏,即可发现一句话木马上传成功。
getimagesize(php中用来判断目标文件是否为图片) 思路:
使用xxd(Linux命令之xxd命令主要用来查看文件对应的十六进制形式,也可以讲文件对应的十六进制形式输出到一个指定的文件。使用此命令所支持的特有选项,亦可以以二进制的形式查看文件)查看十六进制的第一行数据,可发现后缀为.png的图片前几个字符为8950 4e47,因此可通过前几个字符来判断是否为后缀.png的图片,同时我们可以伪造一张图片,保证十六进制数据的前几个字符为8950 4e47,在数据中插入一些恶意代码,从而实现getimagesize的绕过。
方法(图片木马的制作):
本质: 在图片的数据后面加入一句话木马;由于php判断目标文件是否为图片时判断图片对应的十六进制形式的第一行数据,所以将木马加在数据的最后面可以不被识别出来。
方法: 在cmd命令行中输入copy/b ai.png+muma.php ccc.png,即可在相对应的文件夹中生成一个ccc.png的图片木马。
解析漏洞 IIS6.0【web服务器】解析漏洞 注意
  1. 文件上传是通过方法上传,解析漏洞是让文件当做PHP来执行,两者之间界限不明显。
IIS => asp aspx
apache => php jsp
nginx => php
  1. 一台服务器上面可能搭建多个网站、多种环境,看到PHP文件 ,觉得是个PHP的站,但这个站也可以解析其他语言。
  2. 这两种错误页面均为IIS服务器页面,或者抓包数据包回显来查看web容器。常见web漏洞|文件上传漏洞+解析漏洞详解
    文章图片
    常见web漏洞|文件上传漏洞+解析漏洞详解
    文章图片
  3. ASP一句话木马
IIS6.0特性
  • IIS6.0除了将ASP后缀当做ASP进行解析的同时,当文件后缀名字为.asa.cer.cdx 也会当做asp去解析,这是因为IIS6.0在应用程序扩展中默认设置了.asa.cer.cdx 都会调用 asp.dll
常见web漏洞|文件上传漏洞+解析漏洞详解
文章图片

常见web漏洞|文件上传漏洞+解析漏洞详解
文章图片

  • IIS 6.0在处理含有特殊符号的文件路径时会出现逻辑错误,从而造成文件解析漏洞。这一漏洞有两种完全不同的利用方式:【IIS5.1IIS7.5无此漏洞】
    test.asp; .jpg 他将当做asp进行解析 【分号代表语句结束】
    test.asp/123.jpg 他将当做asp进行解析
练习1
1.查看源码,利用IIS6.0解析漏洞的第一个特性,我们知道asa等后缀是被解析为asp执行的,且asa在白名单中,因此我们上传一个文件内容为的木马文件,其中文件后缀为asa。
常见web漏洞|文件上传漏洞+解析漏洞详解
文章图片

2.上传成功后,使用菜刀连接,目录C:\inetpub\wwwroot\a\image\flag下获得flag
常见web漏洞|文件上传漏洞+解析漏洞详解
文章图片

练习2
利用IIS6.0解析漏洞的第二个特性,直接将写有asp一句话木马的文件后缀修改为test.asp; .jpg即可直接上传成功,上传成功后只用菜刀连接即可获得flag。
CGI解析漏洞
  1. Nginx【web服务器】默认是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通过正则匹配设SCRIPT_FILENAME
  2. 当访问www.xx.com/phpinfo.jpg/1.php这个URL时,$fastcgi_script_name会被设置“phpinfo.jpg/1.php”,然后构造成SCRIPT_FILENAME(绝对路径)传递给PHP CGI
  3. 如果开启了cgi.fix_pathinfo=1选项(这个默认值就是1,所以没有设置过就是开启),那么就会触发在PHP中的如下逻辑:PHP会认为SCRIPT_FILENAME(绝对路径)是phpinfo.jpg,而1.phpPATH_INFO,所以就会phpinfo.jpg作为PHP文件来解析了.
  4. 所以说我们只需要在正常的.jpg后面加/.php就可以成功的绕过解析
  5. 这不是Nginx特有的漏洞,在IIS7.0IIS7.5LighttpdWeb容器中也经常会出现这样的解析漏洞
练习
上传一个php的图片马,上传成功使用蚁剑连接时,需要在网址后添加/.php,即http://zmie8016.ia.aqlab.cn//Pass-23/upload/123.jpg/.php,使用蚁剑直接连接图片马即可获得flag。

    推荐阅读