网鼎杯-2018-Fakebook
[网鼎杯 2018]Fakebook
1.题目:序列化、sql注入
2.过程:
进去是一个界面,可以注册用户,先注册一个……
扫描网站后台只扫到一个login.php,但是发现可以查看用户,提交了no参数进行查询,测试一下发现是sql注入
现在遇见一个就觉得是盲注……结合之前写的脚本构造语句查了一些东西
1 | ?no=1 and 1=if() |
database():fakebook
fakebook:users、test
users:no、username、passwd、data、USER、CURRENT_CONNECTIONS……
没什么特别鲜明的东西……查了这几个列发现就只有我注册的用户,没有admin啥的……data里面是序列化的数据,也许是突破口,但到这我就不会了……要去学一学
序列化和反序列化的概念
序列化就是将对象转换成字符串。字符串包括 属性名 属性值 属性类型和该对象对应的类名。
反序列化则相反将字符串重新恢复成对象。
对象的序列化利于对象的保存和传输,也可以让多个文件共享对象。序列化中的魔法函数:
__construct() 创建对象时调用
__destruct() 销毁对象时调用
__toString() 当一个对象被当作一个字符串使用
__sleep() 在对象在被序列化之前运行
__wakeup 将在序列化之后立即被调用
应该对code进行了反序列化处理,然后程序是怎么处理的……可以看看这个文章:
深度剖析PHP序列化和反序列化 em,反序列化时对应的变量被赋值,如果有则会先执行wakeup()方法。
如果进入xctf的话会先进入wakeup,然后退出,所以这里需要绕过:使属性个数大于实际个数。
再回来这道题:好像没啥思路了……
writeup里说有robots.txt,为什么我扫不出来嘞……
getcontents应该可以读本地的文件:
相应的对blog的地址设置了过滤:
报错显示了文件的路径:
?no=0/**/union/**/select 1,2,3,4可以正常回显……这不是绕过空格过滤的吗……我只想到了盲注
这样就可以绕过过滤了。
构造:
?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”;}’
应该是flag了:
案例:
高级SQL注入:混淆和绕过(mark)
🆗
网鼎杯-2018-Fakebook