攻防世界--fakebook

进入环境,发现是一个账户登录注册的界面,使用dirsearch进行扫描,扫描到了login.php,robots.txt,view.php均访问一下,看到robots.txt文件中存在一个user.php.bak文件,删除bak后缀,发现是php源码文件。

攻防世界--fakebook_第1张图片

先不管,我去试试注册一个账户。注意blog处必须是网址, 

 攻防世界--fakebook_第2张图片登录进去,点击用户名,查看源码,没发现什么有用的信息,看到一个src观察观察url,测试是否存在sql或模板注入。

 输入’报错,存在sql注入,且为数字型,使用报错注入,返回一句 no hack 猜测使用黑名单了,使用联合查询,同样的问题。看了别人的wp,说这里是检查了union select ,可以使用/**/或++进行绕过。没回显,修改原始参数为2,果然又是只显示了一条查询。

攻防世界--fakebook_第3张图片

这里得到第二字段会回显,并且文件位置在/var/www/html/view.php。继续注入,得到数据库中存在一个users表,表中含有no,username,passwd,data,USER,CURRENT_CONNECTIONS,TOTAL_CONNECTIONS 字段,查看username,passwd字段内容,不对,这个内容就是我刚刚注册的,没有其他用户的,对我来说没用啊,看看data字段,返回值是序列化后的值

攻防世界--fakebook_第4张图片

 这个值和刚刚下载的源码能对上,然后我不知道怎么利用了,回去看源码,进行代码审计,curl可以使用伪协议file:///文件路径查看文件。

猜测我们的四个字段分别是no,username,passwd,data,而blog刚好是字段data的参数值,所以我们在这里进行一个传参,这个参数需要使用序列化后 的值。构造payload:?no=2 union/**/ select 1,2,3,'O:8:"UserInfo":3:{s:4:"name";s:1:"1";s:3:"age";i:18;s:4:"blog";s:29:"file:///var/www/html/flag.php";}',查看源码,得到编码后的flag值,本来像复制然后解码,结果直接跳转了

 

 得到flag:flag{c1e552fdf77049fabf65168f22f7aeab}

第二种方法是直接使用mysql中的load_file()函数读取一个文件,并将内容作为字符串返回。

构造payload:2 /**/union /**/ select 1,load_file('/var/www/html/flag.php') ,3,4#

查看源码,得到flag。

攻防世界--fakebook_第5张图片

 借鉴博客:(7条消息) 攻防世界——fakebook_攻防世界fakebook_隐身的菜鸟的博客-CSDN博客

你可能感兴趣的:(攻防世界web入门,php,开发语言)