ssrf漏洞分析


ssrf漏洞分析

關於ssrf

  • 首先簡單的說一下我理解的ssrf,大概就是服務器會響應用戶的url請求,但是沒有做好過濾和限制,導致可以攻擊內網。

ssrf常見漏洞代碼

  • 首先有三個常見的容易造成ssrf漏洞的函數需要注意

    fsockopen()
    file_get_contents()
    curl_exec()

  • 下面是本地搭建環境測試
  1. fsockopen()

<?php
$host=$_GET['url'];
$fp = fsockopen("$host", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET / HTTP/1.1\r\n";
    $out .= "Host: $host\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}
?>

  • fsockopen本身就是打開一個網絡連接或者Unix套接字連接。

  1. file_get_contents()

<?php
if(isset($_POST['url']))
{
	$content=file_get_contents($_POST['url']);
	$filename='./images/'.rand().'.img';\
	file_put_contents($filename,$content);
	echo $_POST['url'];
	$img="<img src=\"".$filename."\"/>";
	
}
echo $img;
?>

  • file_get_contents是把文件寫入字符串,當把url是內網文件的時候,他會先去把這個文件的內容讀出來再寫入,導致了文件讀取。

  1. curl_exec()

<?php
if(isset($_GET['url']))
{
	$link=$_GET['url'];
	//$filename='./'.rand().'.txt';
	$curlobj=curl_init($link);
	curl_setopt($curlobj,CURLOPT_FILE,$link);
	curl_setopt($curlobj,CURLOPT_HEADER,0);
	$result=curl_exec($curlobj);
	curl_exec($curlobj);
	curl_close($curlobj);
	//fclose($link);
	//file_put_contents($filename, $result); 
	echo $result;
}

?>

  • 這應該是大家最熟悉的一個函數了,因為利用方式很多最常見的是通過file dict gopher這三個協議來進行滲透。

  • 上面是通過file協議讀取文件,下面這張圖是通過dict協議探測端口

  • 然后是gopher協議

  • gopher協議和ssrf組合能達成很多功能具體用法還要深入研究。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM