SSRF
攻击者利用CSRF发起伪造请求,访问内网资源,进行内网信息探测或内网漏洞利用 发动攻击: 1.获取内网主机,端口,banner信息 2.对内网应用程序攻击,如redis,jboss 3.利用file协议读取文件 4.攻击内网程序,造成缓冲区溢出
主机B代表内网资源,服务器没有对内网目标进行过滤,限制
方式
1.对外网,服务器所在内网,本地进行端口扫描,获取Banner信息 2.测试运行在内网或本地的应用程序 3.利用file协议读取本地文件http://192.168.31.52/SSRF/SSRF-master/curl.php?url=file:///c:/windows/win.ini
漏洞代码
<?php
function curl($url){ #发送请求
$ch=curl_init(); #初始化对象
curl_setopt($ch,CURLOPT_URL,$url); #设置参数
curl_setopt($ch,CURLOPT_HEADER,0); #设置参数
curl_exec($ch); #访问
curl_close($ch); #关闭
}
$url=$_GET["url"];
curl($url);
?>
产生漏洞的PHP函数
file_get_content()
fsockopen()
curl_exec()
<?php
if(isset($_POST['url']))
{
$content=file_get_contents($_POST ['url']);
$filename='./images/'.rand().';img1.jpg';
file_put_contents($filename,$content);
echo $_POST['url'];
$img="<img src=\"".$filename."\"/>";
}
echo $img;
?>
使用fsockopen()实现用户定制url的数据
<?php
function getfile($host,$port,$link){
$fp=fsockopen($host,intval($port),$errno,$srrstr,30);
if(!$fp){
echo"$errstr";
}else{
$out="GET $link HTTP/1.1\r\n";
$out.="Host:$host\r\n";
$out.="connection: clise\r\n\r\n";
$out.="\r\n";
fwrite($fp,$out);
$contents=";
while(!feof($fp)){
$contents.=fgets($fp,1024);
}
fclose($fp);
return $contents;
}
}
?>
使用curl发送数据
<?php
if(isset($_POST['url']))
{
$link=$_POST['url'];
$curlobj=curl_init();
curl_setopt($curlobj,CURLOPT_POST,0);
curl_setopt($curlobj,CURLOPT_RETURNTRANSFER,TRUE);
$result=curl_exec($curlobj);
curl_close($curlobj);
$filename='./curled/'.rand().".txt";
file_put_contents($filename,$result);
echo $result;
?>
访问内网资源/内端口扫描
本地搭建内网环境进行测试 漏洞代码
<?php
if(isset($_GET['url']))
{
$link=$_GET['URL'];
$curlobj=curl_init($link);
curl_setopt($curlobj,CURLOPT_HEAADER,0);
curl_setopt($curlobj,CURLOPT_RETURNTRANSFER,1);
$result=curl_exec($curlobj);
echo $result;
curl_close($curlobj);
}
?>
|