SSRF漏洞

Web渗透_SSRF漏洞

一、介绍SSRF漏洞

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

SSRF的形成大多是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。

二、SSRF漏洞基本利用原理解析

正常用户进行百度查询或者智能识图功能时,一般都是通过关键字的形式进行搜索;但是,百度识图可以带入协议(https)进行查询。

百度识图:https://graph.baidu.com/pcpage/index?tpl_from=pc

图片地址:https://pic.netbian.com/uploads/allimg/220717/112252-1658028172d9d4.jpg

原理分析:

image-20240404204409381

扫描内网ip,利用 http:// + 私有地址 ----> 进行内网信息收集

三、SSRF漏洞利用方式

方式一:利用相关的危险函数(file_get_contents、fsockopen、curl _exec)

方式二:利用相关协议(dict、file、Gopher)

四、PHP中有关SSRF的危险函数

①file_get_contents()

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

1、可搜索图片(读取网络文件)

2、可读取到本地磁盘文件

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

1、?url=www.baidu.com //显示连接百度页面,并读取到当前页面(套娃)

2、?url=127.0.0.1

3、 ?url=127.0.0.1:3306 //端口探测

4、?url=127.0.0.1:80 //端口探测

③curl _exec()

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<form action="" method="GET">
    请输入图片地址:<input type='text' name='url'>
    <input type='submit' value="提交">
</form>
<?php
$_GET['url'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $_GET['url']);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_exec($ch);
curl_close($ch);
?>

1、?url=www.baidu.com //显示连接百度页面

2、file://c:\Windows\Win.ini

3、?url=DICT://127.0.0.1:3306 //端口探测

4、?url=DICT://127.0.0.1:3389

5、?url=DICT://127.0.0.1:443

6、?url=DICT://127.0.0.1:445

7、?url=DICT://127.0.0.1:902

8、?url=DICT://127.0.0.1:912

9、SSRF的自动化内网端口探测?

五、SSRF的防御方式

1、对用户的输入进行私有地址过滤。

2、限制用户访问的端口,只能访问 80 和 443 端口。

3、禁用不必要的协议 file dict 等。

六、提问

1、如何判断服务器操作系统类型?

法一:大小写文件目录判断

法二:当已经知道存在ssrf漏洞时,可以访问相应的测试文件

测试漏洞访问的文件:
windows --> c:\Windows\win.ini
linux ---> /etc/passwd or /etc/shadow

2、Gopher协议

题目

NSS:[NISACTF 2022]easyssrf

BUU:[第二章 web进阶]SSRF Training

posted @ 2024-04-04 20:46  gcc_com  阅读(20)  评论(0编辑  收藏  举报