网鼎杯-2018-Fakebook

[网鼎杯 2018]Fakebook

1.题目:序列化、sql注入
2.过程:

进去是一个界面,可以注册用户,先注册一个……

image-20210212122940706

扫描网站后台只扫到一个login.php,但是发现可以查看用户,提交了no参数进行查询,测试一下发现是sql注入

现在遇见一个就觉得是盲注……结合之前写的脚本构造语句查了一些东西

image-20210212123923079

1
2
?no=1 and 1=if()
//在if中用二分法逐位判断

database():fakebook

fakebook:users、test

users:no、username、passwd、data、USER、CURRENT_CONNECTIONS……

没什么特别鲜明的东西……查了这几个列发现就只有我注册的用户,没有admin啥的……data里面是序列化的数据,也许是突破口,但到这我就不会了……要去学一学

image-20210212145816530

序列化和反序列化的概念

序列化就是将对象转换成字符串。字符串包括 属性名 属性值 属性类型和该对象对应的类名。
反序列化则相反将字符串重新恢复成对象。
对象的序列化利于对象的保存和传输,也可以让多个文件共享对象。

序列化中的魔法函数:

__construct() 创建对象时调用

__destruct() 销毁对象时调用

__toString() 当一个对象被当作一个字符串使用

__sleep() 在对象在被序列化之前运行

__wakeup 将在序列化之后立即被调用

攻防世界unserialize3中:

image-20210212134649258

应该对code进行了反序列化处理,然后程序是怎么处理的……可以看看这个文章:

深度剖析PHP序列化和反序列化 em,反序列化时对应的变量被赋值,如果有则会先执行wakeup()方法。

如果进入xctf的话会先进入wakeup,然后退出,所以这里需要绕过:使属性个数大于实际个数。

再回来这道题:好像没啥思路了……

writeup里说有robots.txt,为什么我扫不出来嘞……

image-20210212145839928

getcontents应该可以读本地的文件:

image-20210212145852832

相应的对blog的地址设置了过滤:

image-20210212150212331

报错显示了文件的路径:

image-20210212150413263

?no=0/**/union/**/select 1,2,3,4可以正常回显……这不是绕过空格过滤的吗……我只想到了盲注

这样就可以绕过过滤了。

image-20210212151853109

构造:

?no=0/**/union/**/select 1,2,3,’O:8:”UserInfo”:3:{s:4:”name”;s:1:”1”;s:3:”age”;s:1:”1”;s:4:”blog”;s:29:”file:///var/www/html/flag.php”;}’

image-20210212152411763

应该是flag了:

image-20210212152503535

案例:

CTF PHP反序列化漏洞

五个demo案例带你学习PHP反序列化漏洞

高级SQL注入:混淆和绕过(mark)

🆗

作者

inanb

发布于

2021-02-12

更新于

2021-08-23

许可协议


:D 一言句子获取中...