0x01. ssrf概述
1、SSRF漏洞概述
SSRF(服务器端请求伪造)
: 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。
一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内网。也就是说可以利用一个网络请求的服务,当作跳板进行攻击)
2、SSRF漏洞产生原因
SSRF 形成的原因往往是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。
如:从指定URL地址获取网页文本内容,加载指定地址的图片,下载等。利用的就是服务端的请求伪造。ssrf是利用存在缺陷的web应用作为代理攻击远程和本地的服务器。
3.漏洞的产生
在PHP中的curl()
,file_get_contents()
,fsockopen()
等函数是几个主要产生ssrf漏洞的函数。
1) curl()
<?php
function curl($url){
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
#curl_setopt($ch,CUPLOPT_HEADER,1);
curl_exec($ch);
curl_close($ch);
}
$url = $_GET['url'];
curl($url);
?>
function
定义一个函数,叫做curl,有一个参数,叫$url
curl_init()
初始化一个cURL会话后。将$url
传入curl_setopt($ch,CURLOPT_URL,$url);
(
curl_setopt($ch, CURLOPT_HEADER, 1)
这边是设定返回信息信息,是否要返回响应信息头这里的话可以注释掉)
然后通过 curl_exec 发起一个请求,curl_exec详细信息
然后这就是一个函数,接下来再设置一个get传参为变量url,然后再把这个变量url代入前面所创建的那个 curl函数
2)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;
?>
<?php
$url = $_GET['url'];;
echo file_get_contents($url);
?>
file_get_content函数从用户指定的url获取内容,然后指定一个文件名进行保存,并展示给用户。file_put_content函数把一个字符串写入文件中。
3) 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
函数实现对用户指定url数据的获取,该函数使用socket(端口)跟服务器建立tcp连接,传输数据。变量host为主机名,port为端口,errstr表示错误信息将以字符串的信息返回,30为时限
注意
1. 一般情况下PHP不会开启fopen的gopher wrapper
2. file_get_contents的gopher协议不能URL编码
3. file_get_contents关于Gopher的302跳转会出现bug,导致利用失败
4. curl/libcurl 7.43 上gopher协议存在bug(%00截断) 经测试7.49 可用
5. curl_exec() //默认不跟踪跳转,
6. file_get_contents() // file_get_contents支持 php://input协议
2.协议
(1)file: 在有回显的情况下,利用 file 协议可以读取任意内容
(2)dict:泄露安装软件版本信息,查看端口,操作内网redis服务等
(3)gopher:gopher支持发出GET、POST请求:可以先截获get请求包和post请求包,再构造成符合gopher协议的请求。gopher协议是ssrf利用中一个最强大的协议(俗称万能协议)。可用于反弹shell
(4)http/s:探测内网主机存活
0x02.一些ssrf利用文章
1.SSRF漏洞的利用与攻击内网应用实战
2. Web安全基础学习之SSRF漏洞利用及绕过方式
3.挖洞达人必杀技之SSRF漏洞的利用与攻击内网应用实战
0x03 修复方式
1.限制请求的端口,只能为web端口,只允许访问http 和 https的请求
2.限制不能访问内网ip,以防止对内网进行攻击
3.屏蔽 返回的详细信息