SSRF
SSRF是什么
通过参数使服务器发起未经授权的请求到攻击者指定的目标。
攻击者通过构造特定的请求,欺骗服务器去访问攻击者控制的恶意站点、内部系统或其他受信任的资源,从而可能导致安全漏洞和危险行为。
<?php
function curl($url){
$ch = curl_init();
// 设置URL和相应的选项
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0); // 启用时会将头文件的信息作为数据流输出
// 抓取URL并把它传递给浏览器
curl_exec($ch);
//关闭cURL资源,并且释放系统资源
curl_close($ch);
}
$url = $_GET['url'];
curl($url);
?>
php函数可能引起SSRF
curl_exec() 执行cURL会话
file_get_content() 将整个文件读入到一个字符串
fsockopen() 打开一个网络连接
curl其他协议
file:查看文件 curl-v 'file:///etc/passwd'
dict:探测端口 ip?url=dict:127.0.0.1:3306
gopher:反弹shell
?file=php://filter/read=convert.base64-encode/resource=example.php
以下是SSRF攻击的一般原理:
- 利用用户输入:攻击者通常利用应用程序中存在的用户输入点,比如URL参数、表单提交等,来构造恶意请求。
- 构造恶意请求:攻击者通过在用户输入中注入恶意URL,构造包含恶意目标地址的请求,使服务器执行这个恶意请求。
- 欺骗服务器:服务器在处理恶意请求时,可能会信任并执行请求中的URL,从而导致服务器发起未经授权的请求到攻击者指定的目标。
- 潜在危害:SSRF攻击可能导致访问内部系统、绕过防火墙、执行远程命令、窃取敏感信息等危险行为,对系统和数据造成严重风险。
SSRF常见场景
社会化分享功能
转码功能
在线翻译
图片加载,下载功能
图片,文章收藏功能
网站采集
如何发现与探测SSRF漏洞
1.爬取地址
2.查看是否请求了其他资源
Google语法:share,wap,url,link,src,source
PHP相关函数
工具
SSRF-Testing
Gopherus
SSRFMap
SSRF防御
1.禁用协议(只是用http,https协议)
2.限制请求端口
3.设置URL白名单
4.过滤返回信息
5.统一错误信息