当前位置:网站首页>【SSRF-01】服务器端请求伪造漏洞原理及利用实例
【SSRF-01】服务器端请求伪造漏洞原理及利用实例
2022-07-06 01:21:00 【像风一样9】
目录
1 基础知识
1.1 概述
背景:互联网上的很多Web应用提供了从其他服务器(也可以是本地)获取数据的功能,使用用户指定的URL,Web应用可以获取图片、文件资源(下载或读取)。
定义:SSRF (Server-Side Request Forgery),服务器端请求伪造,是强制服务器发起由攻击者伪造的请求的一种安全漏洞。 请求伪造,顾名思义就是攻击者伪造正常的请求,以达到攻击的目的,就是常见的Web安全漏洞之一。如果“请求伪造”发生在服务器端,那么这个漏洞就叫做“服务器端请求伪造”即SSRF。
例如:百度识图功能。
用户可以从本地或URL的方式获取图片资源,交给百度识图处理。如果提交的是URL地址,该应用就会通过URL寻找图片资源。如果Web应用开放了类似于百度识图这样的功能,并且对用户提供的URL和远端服务器返回的信息没有进行合适的验证或者过滤,就可能存在“请求伪造”的缺陷。
1.2 原理
(1)SSRF漏洞成因:
- 服务端提供了从其他服务器应用(也可以是本地)获取数据的功能;
- 服务端对用户提供的URL和远端服务器返回的信息没有进行合适的验证或者过滤。
(2)攻击目标:一般情况下 , SSRF攻击的目标是外网无法访问的内部系统(正因为请求是由服务端发起的,所以服务端能请求到与自身相连而与外网隔离的内部系统)。
1.3 危害
(1)对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息。
(2)利用自file协议读取本地文件等 。
(3)对内网 Web应用进行指纹识别,识别企业内部的资产信息 。
(4)攻击内外网的Web应用,主要是使用 HTTP GET请求就可以实现的攻击(比如struts2 、 SQli等) 。
(5)攻击运行在内网或本地的应用程序。
2 SSRF漏洞利用实例
在服务器端实现通过URL从服务器(外部或内部)获取资源的功能方法有很多,此处使用PHP语言和curl扩展实现该功能。
2.1 实验环境及实验前准备
在虚拟机中部署WAMP环境,参考文章《【语言环境】WAMP环境部署及优化—以win2008R2SP1为操作系统》。
PHP+curl简介:
PHP 支持 Daniel Stenberg 创建的 libcurl 库,能够连接通讯各种服务器、使用各种协议。libcurl 目前支持的协议有 http、https、ftp、gopher、telnet、dict、file、ldap。 libcurl 同时支持 HTTPS 证书、HTTP POST、HTTP PUT、 FTP 上传(也能通过 PHP 的 FTP 扩展完成)、HTTP 基于表单的上传、代理、cookies、用户名+密码的认证。
查看curl扩展功能支持:利用PHP探针函数phpinfo()函数可以查看靶机服务器是否支持curl扩展,以及所支持curl的版本。现在大部分WAMP套件均支持curl。
在网站根目录下新建文件夹并命名为SSRF,在curled文件夹下新建txt文件,并重命名为SSRF.php,文件内代码如下。下文攻击方式将利用该网页进行。
<?php
if (isset($_REQUEST['url'])){
$link=$_REQUEST['url'];
$filename='./curled/'.time().'.txt';//代码读取url后将内容写入到该文件夹下的新建文件中
$curlobj=curl_init($link);//对象$filename
$fp=fopen($filename,"w");//$fp为文件指针,指针指向
curl_setopt($curlobj,CURLOPT_FILE,$fp);
curl_setopt($curlobj,CURLOPT_HEADER,0);
curl_setopt($curlobj,CURLOPT_FOLLOWLOCATION,TRUE);
curl_exec($curlobj);//发送$link这个请求
curl_close($curlobj);//curl关闭
fclose($fp);//文件关闭
$fp=fopen($filename,"r");
$result=fread($fp,filesize($filename));//读取文件内容
fclose($fp);
echo $result;
}else{
echo "?url=[url]";
}
?>
2.2 SSRF漏洞的利用实例
2.2.1 正常访问
(1)真实机打开浏览器,访问http://172.16.1.1/SSRF/SSRF.php?url=http://172.16.1.1/phpinfo.php
,可以看到网页显示如下。
(2)打开靶机服务器根目录下curled文件夹,可以看到生成一个txt文件,打开后内容如下。这个是输入url对应网站的网页代码。
(3)在真实机浏览器中,访问http://172.16.1.1/SSRF/SSRF.php?url=http://172.16.1.1/SSRF/SSRF.png
,可以看到网页显示如下:
(4)打开靶机服务器curled文件夹,将新生成的txt文件后缀修改为png,保存后打开,可以看到文件按图片显示。也就是说该网页没有根据文件格式进行针对性的渲染,只是将代码以文本形式展示出来。
2.2.2 端口扫描—扫描内网主机的端口
采用dict协议进行端口扫描。
(1)真实机浏览器访问http://172.16.1.1/SSRF/SSRF.php?url=dict://172.16.1.1:80
,页面显示如下,成功带回服务器信息,说明端口开启着。
(2)真实机浏览器访问http://172.16.1.1/SSRF/SSRF.php?url=dict://172.16.1.1:8080
,页面显示如下,说明端口未开启。
(3)服务器所处的内网环境是外网难以直接访问的(思考NAT相关原理),但是服务器处于内网环境中,相比于外网将更容易访问内网资源,或者扫描内网端口。比如扫描172.16.1.50机的端口开启情况:真实机浏览器访问http://172.16.1.1/SSRF/SSRF.php?url=dict://172.16.1.50:80
、http://172.16.1.1/SSRF/SSRF.php?url=dict://172.16.1.50:21
,显示如下,说明内网该机器80端口开放,而21端口不开放。若没有扫描到端口开放的情况,可能是该ip主机不存在或端口未开放。
2.2.3 读取系统本地文件
利用file协议可以任意读取系统本地文件,真实机浏览器访问http://172.16.1.1/SSRF/SSRF.php?url=file://c:\windows\system32\drivers\etc\hosts
。可以看到成功读取到服务器本地的hosts文件。
2.2.4 内网Web应用指纹识别
识别内网应用使用的框架、平台、模块以及CMS信息,可以为后续的渗透测试提供很多帮助。大多数Web应用框架都有一些独特的文件和目录。通过这些文件可以识别出应用的类型,甚至详细的版本,根据这些信息就可以针对性地收集漏洞进行攻击。
比如可以通过访问下列文件来判断phpMyAdmin是否安装以及详细版本。真实机浏览器访问192.168.1.4/SSRF.php?url=http://192.168.1.4/phpmyadmin/README
2.2.5 攻击内网应用
内网的安全通常都很薄弱,溢出、弱口令等一般都是存在的。通过SSRF攻击,可以实现对内网的访问,从而可以攻击内网应用或者本地及其,获取Shell,这里的应用包括服务、Web应用等。
通过GET方法可以攻击的Web应用有很多,比如struts2命令执行等。
2.3 绕过
当进行SSRF漏洞利用时,可能会存在服务器对所请求进行检验,比如说是否含有具体域名或网站格式等,如果在这样的限制条件下想要访问内网IP,可以尝试:
使用
url=http://[email protected]
,该命令实际上访问的是IP地址10.0.0.1。要理解该URL是如何被浏览器解析地,要先了解URL的构成,明白@后面的才是真实访问的域名。将IP地址进行进制转换。
3 漏洞挖掘
(1)对外发起网络请求的地方都有可能存在SSRF漏洞,如图片加载下载、分享页面、在线翻译、未公开的api(从远程服务器请求资源文件处理、编码处理、属性信息处理等)。具体可以根据以下关键信息进行判断识别。
(2)从Web功能上进行漏洞挖掘:
- 1)分享型:通过URL地址分享网页内容;
- 2)转码服务型:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览;
- 3)在线翻译:通过URL地址翻译对应文本的内容,提供此功能的国内公司有百度、有道等;
- 4)图片加载下载:通过URL地址加载或下载图片;
- 5)图片文件收藏功能;
- 6)未公开的api实现以及其他调用URL功能。
(2)从URL中的关键字进行挖掘:
- share;
- wap
- url
- link
- src
- source
- target
- u
- 3g
- display
- sourceURL
- imageURL
- domain
4 防御
(1)限制协议:
限制请求的端口只能为Web端口,只允许访问 HTTP和HTTPS 的请求,禁止其他协议。了解一下Gopher协议(万金油协议)在SSRF漏洞中的应用,详见参考文献。
(2)限制IP:
- 目的:避免应用被用来获取内网数据,攻击内网。
- 对传入的url进行过滤,将符合内网IP特征的信息过滤掉。
(3)限制端口:
- 限制请求的端口为http常用的端口,比如80、443、8080、8090等。
- 对于其他异常端口则进行过滤,如3306等。
(4)过滤返回信息:
验证并过滤远程服务器对请求的响应,是比较简单防御方法。比如说原本服务器这个功能是用来识图的,那么如果接受到的响应发现不是一张图片,则过滤掉。
(5)统一错误信息:
避免攻击者根据错误信息来判断远端服务器的端口状态,比如错误信息全部改为404。
5 总结
(1)理解SSRF漏洞的攻击原理;
(2)掌握SSRF漏洞的挖掘方式;
(3)掌握SSRF漏洞的利用方式;
(4)掌握SSRF漏洞的防御方式。
参考文章
[1]《curl扩展官方手册》
[2]《URI和URL的区别比较与理解》
[3]《Gopher协议在SSRF漏洞中的深入研究》
边栏推荐
- How to see the K-line chart of gold price trend?
- Obstacle detection
- Live broadcast system code, custom soft keyboard style: three kinds of switching: letters, numbers and punctuation
- Pbootcms plug-in automatically collects fake original free plug-ins
- Leetcode 208. Implement trie (prefix tree)
- 黄金价格走势k线图如何看?
- Ordinary people end up in Global trade, and a new round of structural opportunities emerge
- Recoverable fuse characteristic test
- Four commonly used techniques for anti aliasing
- Leetcode1961. 检查字符串是否为数组前缀
猜你喜欢
Blue Bridge Cup embedded stm32g431 - the real topic and code of the eighth provincial competition
Huawei Hrbrid interface and VLAN division based on IP
2020.2.13
File upload vulnerability test based on DVWA
基於DVWA的文件上傳漏洞測試
037 PHP login, registration, message, personal Center Design
Convert binary search tree into cumulative tree (reverse middle order traversal)
Huawei converged VLAN principle and configuration
Superfluid_ HQ hacked analysis
Ubantu check cudnn and CUDA versions
随机推荐
SSH login is stuck and disconnected
Cf:c. the third problem
A glimpse of spir-v
In the era of industrial Internet, we will achieve enough development by relying on large industrial categories
About error 2003 (HY000): can't connect to MySQL server on 'localhost' (10061)
[Arduino syntax - structure]
WordPress collection plug-in automatically collects fake original free plug-ins
普通人下场全球贸易,新一轮结构性机会浮出水面
Spir - V premier aperçu
Opinions on softmax function
282. Stone consolidation (interval DP)
DOM introduction
Installation and use of esxi
ThreeDPoseTracker项目解析
SPIR-V初窥
Obstacle detection
Vulhub vulnerability recurrence 75_ XStream
[pat (basic level) practice] - [simple mathematics] 1062 simplest fraction
Vulhub vulnerability recurrence 74_ Wordpress
【全网最全】 |MySQL EXPLAIN 完全解读