SSRF 漏洞全解析(概述、攻击流程、危害、挖掘与相关函数)

1. SSRF漏洞

1.1 SSRF概述及成因

SSRF被称为服务端请求伪造,攻击者利⽤SSRF漏洞通过伪造服务器发起请求,由于请求是由内部发起的,所以ssrf漏洞攻击的⽬标主机是从外⽹⽆法直接访问的内部系统。

SSRF漏洞形成的原因多是服务端提供了从外部服务获取数据的功能,但没有对⽬标地址、协议等主要参数进⾏过滤和限制,从⽽导致攻击者可以⾃由构造参数,发起恶意请求。

1.2 攻击流程

1.攻击者与服务器构建请求。

2.服务器向客户端发送构建的请求。

3.客户端响应服务器发送的请求。

4.服务器向攻击者返回客户端的请求。

1.3 漏洞危害

对外⽹、服务器所在内⽹、本地进⾏端⼝扫描; 攻击运⾏在内⽹或本地的服务、应⽤; 对内⽹web应⽤进⾏指纹识别、识别内⽹资产信息; 实现 CRLF 注⼊:利⽤ Redis 未授权访问,HTTP CRLF 注⼊实现 getshell。

1.4 漏洞挖掘

1.4.1 从web功能上

分享 :通过URL地址分享⽹⻚内容
转码服务 :通过URL地址把管地址的⽹⻚内容调优使其适合⼿机屏幕浏览
在线翻译 :通过URL地址翻译对应⽂本的内容,提供此功能的国内公司百度、有道等
图⽚加载与下载 :通过URL地址加载或下载图⽚

图⽚、⽂章收藏功能
未公开的api实现以及其他调⽤URL的功能

1.4.2 从 URL关键字中寻找

Share、wap、url、Link、src、source、target、u、3g、Display、sourceURI、imageURL、domain

1.5 产⽣SSRF漏洞的函数

1.5.1 file_get_contents

从⽤户指定的url获取图⽚,然后把它⽤⼀个随机⽂件名保存在硬盘上,并展示给⽤户。

复制代码
<?php
 if(isset($_POST['url']))
 {
 $contenet=file_get_contents($_POST['url']);
 $filename='./images/'.rand().';img1.jpg';
 file_put_contents($filename,$contenet);
 echo $_POST['url'];
 $img="<img src=\"".$filename."\"/>";
 }
 echo $img;
?>

1.5.2 fsockopen

实现获取⽤户制定url的数据(⽂件或者html)。这个函数会使socket跟服务器建⽴TCP连接,传输原始数据。

复制代码
<?php
function GetFile($host,$port,$link)
 {
$fp = fsockopen($host, intval($port), $errno, $errstr, 30);
if (!$fp) {
echo "$errstr (error number $errno) \n";
} else {
$out = "GET $link HTTP/1.1\r\n";
$out .= "Host: $host\r\n";
$out .= "Connection: Close\r\n\r\n";
$out .= "\r\n";
fwrite($fp, $out);
$contents='';
while (!feof($fp)) {
$contents.= fgets($fp, 1024);
}
fclose($fp);
return $contents;
}
}
?>

1.5.3 curl_exec

curl是⼀个⾮常常⻅的实现,通过php获取数据。⽂件/数据被下载并存储在curled⽂件夹下的磁盘中,并附加⼀个随机数和".txt"⽂件扩展名。

复制代码
<?php
if(isset($_POST['url']))
{
 $link=$_POST['url'];
 $curlobj=curl_init();
 curl_setopt($curlobj, CURLOPT_POST, 0);
 curl_setopt($curlobj,CURLOPT_URL,$link);
 curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);
 $result=curl_exec($curlobj);
 curl_close($curlobj);
 $filename = './curled/'.rand().'.txt';
 file_put_contents($filename, $result);
 echo $result;
}?>

1.5.4 注意事项

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协议

相关推荐
AI 思录33 分钟前
Prompt 事故档案(九):AI安抚话术大全——当“态度好“成为“不改“的遮羞布
大数据·人工智能·安全·prompt·用户运营·用户体验
磐链科技42 分钟前
2026年9月Web3观察:机构入场加速,安全警钟长鸣
安全·web3·区块链
hasty1 小时前
execSync() 拼接 Git 参数的代价:从元数据到供应链执行
git·安全·安全性测试
Chengbei111 小时前
红队新工具 ToShell 解析:自带 Web 控制台,AES+SM4 国密加密,载荷随机免杀,自主 Agent 自动完成渗透任务
人工智能·tcp/ip·安全·web安全·http·网络安全·系统安全
数据知道1 小时前
量子计算威胁——后量子密码(PQC)迁移实战
安全·网络安全·密码学·量子计算
lisw051 小时前
代理型人工智能与网络安全:目前的进展状况
人工智能·安全·web安全
隐擎fox11 小时前
深入理解网络传输层安全:TLS 指纹识别(JA3/JA4)原理与 Python 协议层检测实战
爬虫·python·网络协议·安全·网络安全·https
游戏开发爱好者811 小时前
网络连接排查指南,谁在电脑后台偷跑流量,哪些程序在联网
网络协议·计算机网络·网络安全·ios·adb·https·udp
小蒋观天下13 小时前
社区AI智能摄像头完整选型指南
大数据·人工智能·安全·计算机视觉·语音识别·ai大模型
白猫不黑15 小时前
大学网安方向学习路线:零基础与有基础的学习顺序整理
学习·web安全·计算机·网络安全·信息安全·编程·src漏洞