利用PHP_SESSION_UPLOAD_PROGRESS上传webshell
0x01 环境配置&利用条件
环境分析
session.use_strict_mode默认值为0,此时用户是可以自己定义Session ID的
1
我们在Cookie里设置PHPSESSID=flag,PHP将会在服务器上创建一个文件:/tmp/sess_flag
session.upload_progress.prefix由我们构造的session.upload_progress.name值组成,最后被写入sess_文件里。
所以:
- 这个文件名是PHPSESSID=flag,文件名可控
- 内容也是可以通过PHP_SESSION_UPLOAD_PROGRESS写入的
- 如果有文件包含,就可以 getshell
一般情况还需要条件竞争:
1 | 在默认情况下,session.upload_progress.cleanup是开启的 |
0x02 题目
这个题是第五空间CTF的一道WEB题
1 |
|
0x03 利用
上传HTML:
1 | name 要对应session.upload_progress.name中的 PHP_SESSION_UPLOAD_PROGRESS |
HTML代码:
1 | <form action="http://xxxxxxxx.com:8088/" method="POST" enctype="multipart/form-data"> |
然后抓包,在里面插入我们的一句话木马
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dwKWo8Vo-1632451391682)(…/Library/Application Support/typora-user-images/image-20210924104028736.png)]
1 | 所以文件地址就是 /tmp/sess_zz5 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Zeo's Security Lab!