HMGCTF2022 Writeup
Misc
Fan website
解压后使用010打开,搜索flag{
Web
Fan website
通过www.zip
获取源码
题目说了是Laminas
写的,先找一手历史漏洞:Zend FrameWork Pop Chain - 先知社区 (aliyun.com),知道了漏洞组件为laminas/laminas-log:2.11
,与composer.json
版本匹配,可以直接利用链子打反序列化。
在module\Album\src\Controller\AlbumController.php
文件中寻找反序列化触发点,由于这里是做图片相关的处理,可以知道是用phar协议
做反序列化触发。定位到的方法如下(利用 unlink 函数进行触发)
1 | public function imgdeleteAction() |
接着看上传点,主要限制为:1.对个别关键字进行过滤;2.限制文件的大小(必须超过3kb)
第一点可以直接使用guoke师傅文章中的gzip filename
进行绕过;第二点在构造对象时使用数组保存,带上一个很长的字符串就可以了。
EXP如下
1 |
|
生成后的.phar
文件进行如下操作
1 | tar -cf test.tar .phar/ |
最后上传文件,然后在删除图片处用phar
协议进行触发
Smarty_calculator
通过www.zip
继续下载源代码,分析index.php
文件知道在请求包的Cookie
中需要带上login=x
使用SSTI测试,发现版本是3.1.39
,该版本存在CVE-2021-26120漏洞
尝试利用POC
直接打,没有回显
题目中说了开发者自己修改了模板的规则
,于是去官网下载了原始版本的源码,使用Beyond Compare
工具进行比较
这里在正则处加了(。*)
本地搭个环境进行Debug测试
走到这个正则由于满足条件,会进去调用error
函数导致不回显
先给出结果这里可以在var_dump("id");function
后面添加%0A%20
进行绕过
个人理解:首先这里的有个$
说明可以以任意一个字符(除了换行符),接着空格满足了(.*)
,但是.
是不匹配换行符的,所以这里前面的[]
中的没有可以匹配到,则整个字符串匹配失败
接着使用var_dump(ini_get_all())
读取php配置
发现存在disable_functions
和open_basedir
,可以通过
1 | chdir("img");ini_set("open_basedir","..");chdir("..");chdir("..");chdir("..");chdir("..");ini_set("open_basedir","/");var_dump(scandir("/")); |
读取根目录文件名
发现html
目录是可以写文件的,直接写一句话然后用蚁剑就可以了