第九周文件上传
文件上传漏洞
不同的网站要不同的webshell。我们使用是php开发的网站。
一服务器白名单绕过
1.1MIME类型检测绕过
利用burp来整。可以修改Content-Type来发送php,把类型改为image就ok。
不过都是可以在发送图形时,掺一点php代码就。
1.2 00截断绕过
该类型漏洞比较老且条件苛刻,实战当中几乎不会出现,仅理解原理即可.
二服务器黑名单绕过
服务端⿊名单(Blacklist)是⼀种安全防护机制,它会明确禁⽌某些已知的危险元素,但这玩意太多了,所以相比于白名单较为容易绕过。
缺点 | 说明 | 案例 |
覆盖不全 | 无法穷尽所有危险项 | 漏掉.phtml 导致绕过 |
静态防御 | 难以应对新型攻击变种 | 新型扩展名不断出现 |
维护成本高 | 需持续更新黑名单 | 每个新漏洞都需添加规则 |
误杀风险 | 可能组织合法请求 | 禁止 select 影响正常查询 |
绕过手段多 | 攻击者创新速度快 | 大小写/编码/截断等多种方式 |
依赖实现细节 | 受服务器解析逻辑影响 | IS/APACHE/Nginx处理差异 |
2.1特殊可解析后缀
就是说除了代码中的禁止个后缀名的,我们可以写入许多 Web 服务器配置也会将以下扩展名识别为 PHP 脚本并执⾏其中的代码:

- .phtml:传统上⽤于 "PHP + HTML" 混合⽂件,许多默认配置中已启⽤
- .phps:本应⽤于显示 PHP 源代码(Source),但如果配置不当,可能会被执⾏⽽⾮显示
- php5:⽤于 PHP 5 特定脚本,在⼀些服务器上显式⽀持
- .pht:较少⻅但可被解析的扩展
- 其他变种:.php4 .php3 (旧版 PHP 3) .php7 .phar (PHP 归档⽂件)
2.2.htaccess⽂件绕过

2.2.1什么是.htaccess 呢?
- 网页301重定向、⾃定义404错误⻚⾯、
- 改变⽂件扩展名、允许/阻⽌特定的⽤户或者⽬录的访问(我们就是着重与这个)
- 禁⽌⽬录列表、配置默认⽂档等功能。
.htaccess⽂件⽣效的前提条件
- mod_rewrite模块开启
- AllowOverride All
由于没有过滤 .htaccess ⽂件,可以重写⽂件解析规则绕过,上传⼀个.htaccess文件
<FilesMatch "a.jpg"> #名字非常重要,发送后下面的名字要相同
Sethandler application/x-httpd-php
</FilesMatch>
记住 filename要改为".htaccess "。.htaccess针对的是文件夹生效的。这样子就会把a.jpg当成php来解析。
然后再把a.jpg发送进去,记住名字一定改为a.jpg
2.3.user.ini⽂件绕过
2.4⼤⼩写绕过
通过Upload-labs(Pass-06)查看源代码,可以看到又禁了很多后缀名。但是没有后缀名大小写进进行统一。可以利⽤大小写进⾏绕过。PhP,Php
2.5空格绕过


不过上传成功了,但是我们无法访问成功。原理:在Windows系统中会⾃动去除⽂件名最后的空格,靶场是linux环境。
因此在Windows系统中可以使用此方法绕过。
2.6点绕过

2.8::$DATA绕过
在Windows中,如果⽂件名 + ::$DATA 会把 ::$DATA 之后的数据当成⽂件流处理,不会检测后缀名,且保持::$DATA之前的文件名。使⽤它的⽬的就是不检查后缀名。
这个是图片展现了防止::$DATA绕过。


2.9配合解析绕过
.php. .(两个点之间有个空格)
.php. ::$DATA
2.10双写后缀名绕过
phpinfo.pphphp 替换后变成 phpinfo.php
三.服务端内容检查绕过
3.1文件头检查
Upload-labs( Pass-14) 根据下⾯描述, 需要使⽤图片进行上传, 然后使用文件包含漏洞进行利用获 取Webshell 。查看源码, 发现web后端代码检查了上传⽂件的前两个字节并且根据字节判定文件后缀,
只能上传后缀为图片的文件。从代码看,都可以看出类似白名单。
绕过是与文件包含有关系的。特点就是无论后面是什么,都会把它当是php代码来执行。
3.2突破getimagesize和exif_imagetype
3.3二次渲染绕过

- GIF:渲染前后的两张 GIF,没有发生变化的数据块部分直接插⼊ Webshell 即可
- JPG:需要使用脚本将数据插⼊到特定的数据块,而且可能会不成功,所以需要多次尝试
- PNG:没有 GIF 那么简单,需要将数据写⼊到 PLTE 数据块 或者 IDAT 数据块






3.4条件竞争
代码看出,当你上传文件时,会判断是否是图片,如果是的话重新命名,如果不是的话,就会直接删除代码。也就是说,不管我们上传是不是图片,都会短暂的保留在服务器里面,只要我们在电脑判断期间让上传的php代码执行速度快过删除速度就行了。
如果赶在被删除之前执行并生成新的webshell而新的webshell是不会被删除的。这个也叫做条件竞争上传绕过。

#一旦执行就会生成新的webshell
<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST["aa"])?>');?>
我们进行竞争分为两步
1.利用burp的Intruder模块来不断地上传php文件
记住要把插件关掉,否则会崩溃。
2访问php⽂件
再重发get请求,多试一试几次就成了。
从这里可以看出已经成了。再次访问一下创建的文件,再用蚁剑连接
四.中间件解析漏洞
文件上传漏洞在不同的系统 、架构以及行为中, 利用形式也是各不相同 。常用的web容器有IIS、 Tomcat 、Nginx 、Apache等 。以下主要以⽐较经典的解析漏洞做解释。
IIS 5.x/6.0 解析漏洞
漏洞原理
- 当创建.asp的⽂件⽬录的时候 ,在此⽬录下的任意文件, 服务器都解析为asp文件 。例如如下: 漏洞⽬录利⽤形式:www.xxx.com/xx.asp/xx.jpg。xx.jpg的内容可以为—段合法的asp脚本文件。
-
服务器默认不解析;以后的内容, 导致xx.asp;.jpg被解析成xx.asp
漏洞⽂件利⽤形式:www.xxx.com/xx.asp;.jpg xx.jpg的内容可以为—段合法的asp脚本⽂件。
微软认为这不是漏洞所以没有补丁。
Nginx 解析漏洞
漏洞原理:Nginx⽂件解析漏洞主要发⽣在PHP环境与Nginx的配合使用中,核心问题是Nginx和PHP-FPM对请求URI的处理不—致导致的。
触发条件:
- Nginx版本 < 0.8.41
-
配置了 fastcgi_split_path_info 且正则表达式不安全
Apache 解析漏洞
Apache 在1.x和2.x版本中存在解析漏洞 ,例如如下地址格式
www.xxxx.com/post_shell.php.mage.edu
Apache从右到左开始判断后缀 ,若edu非可识别后缀, 再判断mage, 直到找到可识别后缀才停止, 然后将 该可识别后缀进解析, 因此如上地址解析为访问apache.php文件。
五.Upload_Auto_Fuzz
主要功能
windwos特性
- NTFS数据流(::$DATA)
- 保留设备名(CON, AUX)
- 长文件名截断
内容欺骗
- 魔术字节注⼊(GIF/PNG/PDF头)
- SVG+XSS组合攻击
- 文件内容混淆(注释插⼊、编码变异)
安装⽅式
该插件是python开发,因此需要先安装jython。
这样就好了。