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,成功上传文件,右键复制图片上传路径,访问文件,php语句成功解析(后续得到的此php语句解析成功的图片省略)
通过bp修改文件名的方法,将带有php语句的图片类型文件名修改为filename.php,否则图片文件是不能正确解析的
------WebKitFormBoundaryiikU2gD9AZcDwcnm
Content-Disposition: form-data; name="upload_file"; filename="1.php" # 修改此处文件名
Content-Type: application/octet-stream
<?php phpinfo();?>
2
3
4
5
# pass-02 后端MIME验证
查看源码,服务器端会检测下文件类型
[!NOTE] 文件类型和 MIME 类型是密切相关的,文件类型可以通过文件扩展名来推断,而 MIME 类型通常用于指定网络传输中的数据类型。
bp抓包,把要上传的php文件MIME类型修改为允许的类型上传
右键复制'图片'地址,访问
# pass-03 历史兼容性问题
没有过滤php2,php3,php5,phtml等扩展名的php文件,成功上传后,右键复制'图片'地址,访问
如果不能解析,查看apache配置文件里是否有这些扩展名,没有的话,查下资料添加进去
# pass-04 apahce的配置.htacess文件
".htaccess" 文件是 Apache Web 服务器特有的文件,用于配置服务器的行为。通过 ".htaccess" 文件,用户可以在特定目录中覆盖 Apache 服务器的全局配置,包括重定向、认证、缓存控制等。
写法一:
# FileMatch 参数即为文件名的正则匹配
<FilesMatch "png">
SetHandler application/x-httpd-php
</FilesMatch>
2
3
4
图片马:
# 1.png
<?php phpinfo();?>
2
写法二:
AddType application/x-httpd-php .png
图片马:
# 1.png
<?php phpinfo();?>
2
查看源码,它将php文件的各种扩展名完全限制了,但是没有限制.htaccess文件,可以借助.htaccess文件将其他文件类型作为php文件解析达到目的
创建文件名为.htaccess文件并写入以下内容,上传
AddType application/x-httpd-php .png
再上传写有php语句的图片文件,成功上传后,访问文件能够解析
在pass05-10题目中,会规律的出现一些漏洞方法,可以在bp中修改绕过验证,他们利用了windows对文件名的处理特性,如果使用linux平台环境,则不能正确解析,
扩展名大小写不敏感
自动去除末尾的点
自动去除首尾的空
去除::$data
过滤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抓包修改扩展名大小写绕过,只要不在源码限制里都行
上传后,复制图片地址,访问
# pass-06 windows特性--自动去除首尾的空格
查看源码,没有进行首尾去空的操作
使用bp抓包,在文件名末尾添加空格,成功上传,复制地址访问
# pass-07 windows特性--自动去除末尾的点
查看源码,没有去除文件名末尾的点
使用bp抓包,在文件名末尾添加点,成功上传,复制地址访问
# pass-08 windows特性--去除::$data
查看源码,没有去除末尾的::$data
使用bp抓包,在文件名末尾添加::$data,成功上传,复制地址访问
# pass-09
查看源码,发现几个漏洞同时修复,但是只操作一次,可以把几个漏洞连在一起,1.php. .
这样它先去除末尾的点,将这个点后的内容(什么都没有)转化为小写,再去除::$data作用,最后首尾去空,得到了1.php.
其中,末尾的点会被系统忽略
成功上传,复制地址,访问
# pass-10 双写绕过
看源码,定义了很多格式的扩展名,如果上传的文件中有这些扩展名,过滤掉它们。注意到,只过滤一次,替换为空,通过双写构造绕过
所有可以通过双写扩展名,并不是规则的双写,将一个php中插入php,避免直接双写都被过滤掉,双写得到一个例如pphphp,删除第一个php时,剩下的p和hp组成php扩展名
成功上传,复制图片地址,访问