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目录是可以写文件的,直接写一句话然后用蚁剑就可以了