SSRF--服务器端请求伪造

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);
}
?>
posted @ 2021-07-30 17:11  1ucifer  阅读(133)  评论(0编辑  收藏  举报