1.hellounser
代码审计
可以看到当以get方式传入参数pop时,会进行一次反序列化,然后有$aaa()。
利用php魔术方法的自动调用机制来形成反应链:
让$aaa赋值为A类的一个对象
会自动调用__invoke函数,__invoke函数中调用show()函数;如果让$var为B类的一个对象
则会调用toString()函数,从而调用B类方法中的show
此时聚焦于B类中包含flag的函数:
$func('', $this->arg);考虑使用$func为create_ function()完成函数执行,并对$arg参数进行代码注入构造(如下图)
进行get传值后为:
发现真正的flag在另外一个php文件中,考虑使用require()进行指定文件包括,同时注意绕过正则匹配(flag字段),考虑编码绕过,代码如下。
进行二次get传值获得flag:
总的构造代码如下
运行所得的两个payload注入
2.xxc
没有太多的思路突破,后面找个机会交流学习下
3.ctfmanege
ctrl+u查看源码,发现有一串base64编码后的字符,先保留着。
由gg.php提示找到了一串php源码
$secret应该是之前在网页源码中找到的那串。
此处逆行拆解,对$secret进行如下操作:
- base64_decode
- bin2hex
- strrev
- hex2bin
得到了get提交的
$sy=ilovectfverymuch
然后使用md5绕过 构造POST的传递参数(此处使用hackbar也可以使用bp的repeater模块进行传参)
获取flag