88409-bn3ibg7hydj.png

什么是ssrf


SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)。

简单来讲就是,服务器会响应用户的url请求,但是没有做好过滤和限制,导致可以攻击内网。

漏洞产生


由于服务端提供了从其他服务器应用获取数据的功能且没有对用户可控的目标地址做过虑与限制。

在PHP中的curl(),file_get_contents(),fsockopen()等函数是几个主要产生ssrf漏洞的函数。

file_get_contents()
file_get_contents是把文件写入字符串,当把url是内网文件的时候,他会先去把这个文件的内容读出来再写入,导致了文件读取。

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

fsockopen()

fsockopen()函数本身就是打开一个网络连接或者Unix套接字连接。

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

未完 待续 。。。。

最后修改:2020 年 10 月 08 日 07 : 34 PM
如果觉得我的文章对你有用,请随意赞赏