SSRF--伺服器端請求偽造
阿新 • • 發佈:2021-07-30
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);
}
?>