文件上传绕过总结

文件上传绕过总结

  • 前言
  • 参考
  • 客户端JS验证
  • 服务端校验
    • 检查后缀
      • 黑名单
        • Windows server特性
        • 黑名单不全
        • 双写绕过
      • 白名单
        • content-type字段校验:
        • 解析漏洞导致的上传
    • 内容检查
      • 文件头检查
      • getimagesize()的绕过
      • exif_imagetype()的绕过
      • 二次渲染的绕过
    • 代码逻辑

前言

最近也是在学习文件上传漏洞的相关知识,简单记录总结一下自己学习成果,个人水平有限,难免有遗漏和不足,学习的也是比较浅显的基础知识,也是希望在以后的实战中继续学习进步

参考

upload-labs文件上传靶场
文件上传漏洞(绕过姿势)

客户端JS验证

一般是JS校验后缀名,校验通过之后才会发送请求
绕过方法:
1.禁用js
2. 改文件后缀为合法后缀绕过JS客户端之后BURP抓包改包

服务端校验

检查后缀

黑名单

判断是不是黑名单可以通过修改任意文件后缀看能否

Windows server特性

1.点绕过
windows解析文件名最后的.会自动去掉

2.空格绕过
windows解析文件名最后的【空格】也会自动去掉

3.ADS流
ads流是ntfs文件系统的特性,常常被用来做木马的隐藏之类的,例如: 1.txt::$DATA
这样的寄生文件有时候也是可以绕过文件后缀黑名单的检查的

黑名单不全

绕过方法:
(1)找黑名单扩展名的漏网之鱼 - 比如 asa 和 cer 之类
(2)可能存在大小写绕过漏洞 - 比如 aSp 和 pHp 之类
能被解析的文件扩展名列表:
jsp jspx jspf
asp asa cer aspx
php php php3 php4
exe exee

双写绕过

有时候在服务端接收文件之后会对特定的文件后缀做删除或者替换处理,这个时候可能就存在双写绕过例如服务端如果是删除php字段的话,可以构造文件名phphpp 后缀的文件,这样匹配替换掉一个php之后文件后缀就是php了。

白名单

content-type字段校验:

这个是校验mime类型的,如image/gif就是gif格式,绕过方法也很简单,修改http报头的content-type字段就可以很容易的绕过去了。

解析漏洞导致的上传

可以参考:https://thief.one/2016/09/21/服务器解析漏洞/

  1. 空字节截断目录路径
    例: 原上传路径为/upload, 只允许上传图片jpg格式
    绕过方法:
    step1: php一句话木马伪装成jpg格式(改后缀名为jpg)上传,burp拦截
    step2: 修改报头上传的路径地址为/upload/1.php .jpg(注意php后面是个空格)
    step3: 修改hex数据里面的空格(hex值为20)为00,放行拦截
    step4: 访问这个一句话木马,由于00截断,00之后都不读取了,所以访问一句话木马只要访问1.php即可,后面的内容就不需要带了

  2. IIS6.0目录路径检测解析
    跟1差不多的是这里修改上传路径为/upload/1.php/
    检测到/系统截断

  3. IIS6.0解析缺陷
    IIS6.0目录路径检测解析,文件的名字为“*.php;xxx.jpg”,也同样会被 IIS 当作 PHP 文件来解析并执行,首先我们请求 /aaa.php;xxx.jpg,从头部查找查找 .号,获得 .php;xxx.jpg。查找`;,,如果有则内存截断,所以/aaa.php;xxx.jpg会当做/aaa.php进行解析

  4. Appache 解析缺陷
    例如:7z格式是一种压缩文件的格式,但Apache不识别7z后缀,Apache解析文件时,如果后缀名不认识,则会继续向前解析,会解析到php,这就是Apache的解析漏洞.
    绕过这种上传就是构造.php.7z的文件上传即可。

内容检查

文件头检查

可以通过自己写正则匹配,判断文件头内容是否符合要求,这里举几个常见的文件头对应关系:
(1) .JPEG;.JPE;.JPG,”JPGGraphic File”
(2) .gif,”GIF 89A”
(3) .zip,”Zip Compressed”
(4) .doc;.xls;.xlt;.ppt;.apr,”MS Compound Document v1 or Lotus Approach APRfil

当然也可以直接上传图片,在图片的最后加上一句话木马的内容

getimagesize()的绕过

array getimagesize ( string KaTeX parse error: Expected 'EOF', got '&' at position 19: …ename [, array &̲imageinfo ] )
getimagesize() 函数将测定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 图像文件的大小并返回图像的尺寸以及文件类型和一个可以用于普通 HTML 文件中 IMG 标记中的 height/width 文本字符串。

如果不能访问 filename 指定的图像或者其不是有效的图像,getimagesize() 将返回 FALSE 并产生一条 E_WARNING 级的错误。

绕过方法:
图片马+文件包含漏洞

exif_imagetype()的绕过

同上

二次渲染的绕过

imagecreatefrom 系列函数用于从文件或 URL 载入一幅图像,成功返回图像资源,失败则返回一个空字符串。 该系列函数有: imagecreatefromgif():创建一块画布,并从 GIF 文件或 URL 地址载入一副图像
imagecreatefromjpeg():创建一块画布,并从 JPEG 文件或 URL 地址载入一副图像
imagecreatefrompng():创建一块画布,并从 PNG 文件或 URL 地址载入一副图像
imagecreatefromwbmp():创建一块画布,并从 WBMP 文件或 URL 地址载入一副图像
imagecreatefromstring():创建一块画布,并从字符串中的图像流新建一副图像

还是图片马???(我没试过)

代码逻辑

条件竞争。。。。。。。。。。。。。。。。。。。。。。。。。

你可能感兴趣的:(漏洞学习)