安鸾之文件上传系列
声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
本文首发于涂寐’s Blogs:https://0xtlu.github.io,转载请注明出处!
0x00 Nginx解析漏洞
0o00 题目提示
1 | Nginx解析漏洞 |
0o01 上传流程
- 直接访问,提供一个上传点,错误上传:
Please ensure you are uploading an image.
;白名单??? - 直接传图片马,前端回显文件路径:
File uploaded successfully: /var/www/html/uploadfiles/xxx.jpg
。 - 重复上传,这……还是根据文件原名重命名的吗???
- 继续,
File uploaded exceeds maximum upload size.
,限大小,png确实比较大。 - 和其他师傅沟通了下,这站点似乎就是不给你看图片的,但直接给图片码进行解析漏洞就好了……但一毛一样的一句话,我咋就不行呢,直接用师傅的又可以,是我合成的方法有问题吗……大佬说,玄学……
- 好了,建国之后不准成精。看下吧,我的图片码和师傅的有啥不同:
- 对的,师傅的 jpg 图里是 png图片的内容,所以……找张小尺寸的 png 图重新生成图片码。
- 蚁剑:
http://106.15.50.112:8020/uploadfiles/xxx.jpg/.php
- 网站根目录拿 flag :
flag{96447a6a5d809890} //-- 2022.1.20
0o02 Nginx解析漏洞
- 漏洞原理:若访问路径为
.../test.png/test1.php
, 当fastcgi
在处理.php
文件时发现文件不存在, 则根据php.ini
配置文件中cgi.fix_pathinfo=1
的配置项选择是否修复路径,即当前路径不存在时则采用上层路径.../test.png
。故,此时交由fastcgi
处理的文件就变成.../test.png
,.../test.png
也将作为.../test.png/test1.php
进行解析,即当作 php 文件解析。 - 注:
php-fpm.conf
中的security.limit_extensions
配置项限制fastcgi
解析文件的类型,即指定某类型文件可作为代码解析。当此项设置为空时,允许fastcgi
将.png
等文件作为代码解析。 - 漏洞成因:php 和 nginx 间的配置问题。
- 漏洞修复:① 将
php.ini
文件中的cgi.fix_pathinfo
设置为0
,取消路径修复功能; ②php-fpm.conf
中的security.limit_extensions
设置为.php
,指定可解析文件类型。
0x00 文件上传01
0o00 题目提示
1 | 文件上传01 |
0o01 上传流程
- 找到上传点:
http://106.15.50.112:8024/admin.php
- 直接禁用 js,上传 php 文件,或bp改图片码后缀为 php 。
- 注意,网站根目录
/var/www/html/
,不是服务器根目录:flag{6687ee3215bbd38a}
。
0x00 文件上传02
0o00 题目提示
1 | 文件上传02 |
0o01 上传流程
看着首页……总想着是被黑了吗?扫一波目录先
(bb,其实可以直接在 URL 上加 ~~`/upload.php`测试,算了还是得多用下目录扫描)~~。废话太多了,上链接:
http://106.15.50.112:8025/upload.php
。禁 js ,传 php ,没反应。
正常点,传个图片,正常显示,拿到图片路径,且图片重命名。
测试其他后缀,不行,盲猜白名单,再分析下请求包:
1
2
3
4
5
6
7
8
9
10
11Connection: close
------WebKitFormBoundaryAYlZtBqmFuaASUG6
Content-Disposition: form-data; name="file_path"
images/
------WebKitFormBoundaryAYlZtBqmFuaASUG6
Content-Disposition: form-data; name="upload_file"; filename="php.jpg"
Content-Type: image/jpeg
�PNGfile_path
???images/
???这路径,可以改改吧,想了下似乎很符合
%00
截断,回顾下笔记,php version < 5.3.4,而站点的是 5.3.3修改路径:
images/test.php
;在路径后一个字符直接添加并 URL 编码%00
,或 Hex 中直接修改后一个字符的十六进制为00
。通过
%00
截断,上传的图片将被命名为test.php
蚁剑连接:
http://106.15.50.112:8025/images/test.php
服务器根目录:
flag{c325cb3922a0e48c}
- 本文标题:安鸾之文件上传系列
- 本文作者:涂寐
- 创建时间:2022-08-28 00:49:40
- 本文链接:article/27643a55.html
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
评论