【SSRF-01】服务器端请求伪造漏洞原理及利用实例
目录
- 1 基础知识
- 1.1 概述
- 1.2 原理
- 1.3 危害
- 2 SSRF漏洞利用实例
- 2.1 实验环境及实验前准备
- 2.2 SSRF漏洞的利用实例
- 2.2.1 正常访问
- 2.2.2 端口扫描—扫描内网主机的端口
- 2.2.3 读取系统本地文件
- 2.2.4 内网Web应用指纹识别
- 2.2.5 攻击内网应用
- 2.3 绕过
- 3 漏洞挖掘
- 4 防御
- 5 总结
- 参考文章
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://www.x.com@10.0.0.1
,该命令实际上访问的是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漏洞中的深入研究》
【SSRF-01】服务器端请求伪造漏洞原理及利用实例相关推荐
- SSRF服务器端请求伪造漏洞基础
SSRF服务器端请求伪造漏洞基础,下面分五个专题来说 1.什么是ssrf? 2.ssrf的相关协议 3.有无回显的ssrf漏洞确认 4.ssrf如何利用? 5.ssrf漏洞的绕过 6.ssrf漏洞的加 ...
- 最新系统漏洞--YzmCMS服务器端请求伪造漏洞
最新系统漏洞2021年10月21日 受影响系统: YzmCMS YzmCMS 5.8 描述: CVE(CAN) ID: CVE-2020-35970 YzmCMS是一款基于YZMPHP开发的一套轻量级 ...
- 最新系统漏洞--MipCMS服务器端请求伪造漏洞
最新系统漏洞2021年11月9日 受影响系统: MipCMS MipCMS 5.0.1 描述: MipCMS是一个应用软件.一套基于百度移动加速器MIP而开发的内容管理系统,同时也是一套SEO建站系统 ...
- Web漏洞之SSRF(服务器端请求伪造)
文章目录 一.漏洞场景 二.漏洞描述 三.漏洞原理 四.漏洞危害 五.漏洞评级 六.漏洞验证 七.漏洞利用 八.漏洞防御 一.漏洞场景 服务器会根据用户提交的URL 发送一个HTTP 请求.使用用户指 ...
- 【网络安全工程师面试】—SSRF服务端请求伪造漏洞及利用方法
目录 4.4. SSRF 4.4.1. 简介 4.4.1.1. 漏洞危害 4.4.2. 利用方式 4.4.3. 相关危险函数 4.4.4. 过滤绕过 4.4.4.1. 更改IP地址写法 4.4.4.2 ...
- http请求走私漏洞原理,利用,检测,防护
目录 什么是请求走私 漏洞成因与常见类型 Keep-Alive&Pipeline CL&TE 常见走私类型
- 渗透测试-SSRF服务端请求伪造(Server-Side Request Forgery)
SSRF服务端请求伪造 漏洞原理 本次靶场的设计拓扑图 x.x.x.x:8080 - 判断 SSRF 是否存在 172.72.23.21 - SSRF 获取本地信息 172.72.23.1/24 - ...
- SSRF漏洞(服务器端请求伪造)
中间人(SSRF就是中间人)攻击,服务端请求伪造,主要攻击内网,打redis和weblogic特别厉害,目标网站的内部系统(他是从内部系统访问的,所以通过它攻击外部系统无法访问的内部系统,也就是目标网 ...
- SSRF服务器端请求伪造
SSRF服务器端请求伪造 SSRF服务端请求伪造漏洞,也称为XSPA跨站端口攻击,是一种由攻击者构造一定的利用代码导致服务端发起漏洞利用请求的安全漏洞,一般情况下SSRF攻击的应用是无法通过外网访问的 ...
最新文章
- CMU赵越:关于数据挖掘的分享!
- cocoapods安装
- 找最大重复次数的数和重复次数(C++ Pair)
- 以计算机网络为中介的人际传播,以计算机为中介的人际传播理论范式
- 图嵌入知识表征の初体验
- 95-40-060-java.util.concurrent-ConcurrentSkipListMap
- html中font size默认值,HTML basefont size 属性
- 日本java图书馆_菜鸡的Java笔记 图书馆
- 松下服务器没显示,松下Panasonic伺服驱动器没有显示维修
- “汇新杯”科技+文化艺术专项赛介绍
- 5173游戏币监控工具 5173-Search游戏币监控工具 5173游戏币助手
- Windows平台下使用 Rclone 挂载 OneDrive Google Drive 为本地硬盘
- 浴室预约微信小程序的设计与实现
- python+opencv摄像头人脸检测+代码注释
- Beam search 算法的通俗理解
- Python 通过URL打开图片
- 全相位算法c语言表达,基于全相位FFT的电力谐波检测方法研究
- C#中的递归APS和CPS模式详解(转载)
- 通用流量录制回放工具 jvm-sandbox-repeater 尝鲜 (三)—— repeater plugin 开发
- Java程序员被逼迫,挣着卖白菜的钱,操着卖白粉的心,2021年Java常见面试题