1. 程式人生 > 其它 >SSRF--伺服器端請求偽造

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);
}
?>