目录

CTF文件上传 upload-labs pass1-10

# upload-labs pass1-10

# 注:在以下做题过程中,使用phpinfo()代替了一句话木马

# 搭建uploadlabs环境

项目地址:upload-labs (opens new window)

下载zip文件,解压放在phpstudy (opens new window)的WWW目录下,启动apache,即可在浏览器通过localhost访问打靶

我使用的版本比较老一些,需要自取https://github.com/Apursuit/upload-labs (opens new window)

该文章参考了https://www.cnblogs.com/chu-jian/p/15515770.html (opens new window)

# pass-01 前端js验证

查看源码,只有前端验证

  • 禁用js绕过验证
  • bp抓包,修改文件名绕过

源码

可以使用禁用javascript脚本的插件或者浏览器开发者工具里自带功能,我使用扩展插件禁用js

禁用js

复制图片路径 禁用js,成功上传文件,右键复制图片上传路径,访问文件,php语句成功解析(后续得到的此php语句解析成功的图片省略)

成功解析

通过bp修改文件名的方法,将带有php语句的图片类型文件名修改为filename.php,否则图片文件是不能正确解析的

------WebKitFormBoundaryiikU2gD9AZcDwcnm
Content-Disposition: form-data; name="upload_file"; filename="1.php"     # 修改此处文件名
Content-Type: application/octet-stream

<?php phpinfo();?>
1
2
3
4
5

# pass-02 后端MIME验证

查看源码,服务器端会检测下文件类型

[!NOTE] 文件类型和 MIME 类型是密切相关的,文件类型可以通过文件扩展名来推断,而 MIME 类型通常用于指定网络传输中的数据类型。

bp抓包,把要上传的php文件MIME类型修改为允许的类型上传

2

右键复制'图片'地址,访问

# pass-03 历史兼容性问题

没有过滤php2,php3,php5,phtml等扩展名的php文件,成功上传后,右键复制'图片'地址,访问

php3

如果不能解析,查看apache配置文件里是否有这些扩展名,没有的话,查下资料添加进去

# pass-04 apahce的配置.htacess文件

参考文章 (opens new window)

".htaccess" 文件是 Apache Web 服务器特有的文件,用于配置服务器的行为。通过 ".htaccess" 文件,用户可以在特定目录中覆盖 Apache 服务器的全局配置,包括重定向、认证、缓存控制等。

写法一:

# FileMatch 参数即为文件名的正则匹配
<FilesMatch "png">
  SetHandler application/x-httpd-php
</FilesMatch>
1
2
3
4

图片马:

# 1.png
<?php phpinfo();?>
1
2

写法二:

AddType application/x-httpd-php .png
1

图片马:

# 1.png
<?php phpinfo();?>
1
2

查看源码,它将php文件的各种扩展名完全限制了,但是没有限制.htaccess文件,可以借助.htaccess文件将其他文件类型作为php文件解析达到目的

创建文件名为.htaccess文件并写入以下内容,上传

AddType application/x-httpd-php .png
1

再上传写有php语句的图片文件,成功上传后,访问文件能够解析

在pass05-10题目中,会规律的出现一些漏洞方法,可以在bp中修改绕过验证,他们利用了windows对文件名的处理特性,如果使用linux平台环境,则不能正确解析,

  1. 扩展名大小写不敏感

  2. 自动去除末尾的点

  3. 自动去除首尾的空

  4. 去除::$data

  5. 过滤php扩展名

    其中1,2,3在windows环境下测试,将文件名修改到123的格式时,会无视修改,4文件不允许有:

    关于其中的::$data的作用,参考了这篇文章https://blog.csdn.net/weixin_44032232/article/details/109005766 (opens new window)

    windows系统中,在文件名中加入::$data可以避免检测扩展名

# pass-05 windows特性--大小写不敏感

源码中没有对扩展名大小写做要求,使用bp抓包修改扩展名大小写绕过,只要不在源码限制里都行

5-01

上传后,复制图片地址,访问

# pass-06 windows特性--自动去除首尾的空格

查看源码,没有进行首尾去空的操作

06

使用bp抓包,在文件名末尾添加空格,成功上传,复制地址访问

# pass-07 windows特性--自动去除末尾的点

查看源码,没有去除文件名末尾的点

07

使用bp抓包,在文件名末尾添加点,成功上传,复制地址访问

# pass-08 windows特性--去除::$data

查看源码,没有去除末尾的::$data

08

使用bp抓包,在文件名末尾添加::$data,成功上传,复制地址访问

# pass-09

查看源码,发现几个漏洞同时修复,但是只操作一次,可以把几个漏洞连在一起,1.php. .

这样它先去除末尾的点,将这个点后的内容(什么都没有)转化为小写,再去除::$data作用,最后首尾去空,得到了1.php.

9-01

其中,末尾的点会被系统忽略

成功上传,复制地址,访问

# pass-10 双写绕过

看源码,定义了很多格式的扩展名,如果上传的文件中有这些扩展名,过滤掉它们。注意到,只过滤一次,替换为空,通过双写构造绕过

10-01

所有可以通过双写扩展名,并不是规则的双写,将一个php中插入php,避免直接双写都被过滤掉,双写得到一个例如pphphp,删除第一个php时,剩下的p和hp组成php扩展名

成功上传,复制图片地址,访问

最后一次更新于: 2024/10/27, 12:02:20