SSRF漏洞原理与利用方式

目录

一. 漏洞原理

二. 漏洞危害

三. 从皮卡丘靶场看懂SSRF

1. 源码解读

2. 内网环境搭建

3. SSRF漏洞利用

1. 访问正常文件

2. 端口扫描

3. 读取系统本地文件

4. 攻击内网应用

扫描二维码关注公众号,回复: 12826219 查看本文章

四. SSRF漏洞挖掘

1. ssrf可能出现的地方

2. 从关键字寻找

3. 绕过小技巧

五. 漏洞防御


一. 漏洞原理

        SSRF(Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者构造请求,由服务器端发起请求的安全漏洞,本质上是属于信息泄露漏洞。ssrf攻击的目标是从外网无法访问的内部系统(正是因为他是有服务器端发起的,所以他能够请求到与他相连而与外网隔离的内部系统)

       很多web应用都提供了从其他的服务器上获取数据的功能(百度识图,给出一串URL就能识别出图片)。使用用户指定的URL,web应用可以获取图片,下载文件,读取文件内容等。这个功能如果被恶意使用,可以利用存在缺陷的web应用作为代理,攻击远程和本地的服务器。一般情况下, SSRF攻击的目标是外网无法访问的内部系统,黑客可以利用SSRF漏洞获取内部系统的一些信息 。( 正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统 )。SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制 。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。

SSRF主要攻击方式如下

       攻击者想要访问主机B上的服务,但是由于存在防火墙或者主机B是属于内网主机等原因导致攻击者无法直接访问主机B。而主机A存在SSRF漏洞,这时攻击者可以借助主机A来发起SSRF攻击,通过主机A向主机B发起请求,从而获取主机B的一些信息。

二. 漏洞危害

  • 利用file协议读取本地文件
  • 对服务器所在内网、本地进行端口扫描,获取一些服务的banner信息
  • 攻击运行在内网或本地的应用程序
  • 对内网web应用进行指纹识别,识别企业内部的资产信息
  • 攻击内外网的web应用,主要是使用HTTP GET请求就可以实现的攻击

三. 从皮卡丘靶场看懂SSRF

下面以SSRF之curl进行漏洞利用的介绍 , SSRF(file_get_content)也差不多,通过

srf_fgc.php?file=php://filter/read=convert.base64-encode/resource=http://192.168.60.7:88/2.php ,即可以以bs64的方式进行文件内容的读取(获取不到源码)

靶场如下

点击来读一首诗吧

发现通过本机向另外一个地址发起了http请求,请求读取目标主机的一个文件。上面说了SSRF漏洞的原理是服务端提供了一个从别的机器读取文件的功能,且没有对目标地址做过滤导致了漏洞的发生。他攻击的是从外网不能直接访问的内部系统。这里我们就搭建一个内网环境来深入了解这个漏洞。

1. 源码解读

pikachu ssrf主要源码如下,通过curl_init函数获取url内容,再返回给浏览器,但是这里传递url的时候没有做任何的过滤,导致了ssrf漏洞

2. 内网环境搭建

这里搭建三台主机:主机A(192.168.1.9),主机B(web服务器),主机C(192.168.60.7),主机A作为攻击机,主机B就是靶场,主机C作为内网服务器,主机A可以访问主机B,但是访问不了主机C,主机B可以访问主机A和主机C

3. SSRF漏洞利用

以下都是通过在主机A 192.168.1.9上访问主机B的内容,由于主机B存在SSRF漏洞,所以主机A通过主机B来攻击主机C

1. 访问正常文件

通过主机B可以正常访问别的主机的文件

2. 端口扫描

想探测主机C开放了哪些端口,通过dict协议读取端口状态,dict://ip地址:端口

当内网主机C开放了某个端口时,服务器立即响应进行页面刷新

当内网主机C未开放了某个端口时,页面一直在等待响应

利用这一特点可以探测内网端口的开放状态

3. 读取系统本地文件

读取web服务器上的本地文件

file://c:\windows\system32\drivers\etc\hosts

4. 攻击内网应用

假设:内网web服务存在一个命令执行的漏洞,通过SSRF即可以进行远程命令执行。主机C web根目录下新建command.php,内容如下

<?php
$cmd=$_GET['cmd'];
system($cmd);
?>

内网的安全通常都很薄弱,溢出、弱口令等一般都是存在的。通过ssrf攻击,可以实现对内网的访问,从而可以攻击内网应用或者本地机器,获得shell,这里的应用包括服务、Web 应用等。

四. SSRF漏洞挖掘

1. ssrf可能出现的地方

1.社交分享功能:获取超链接的标题等内容进行显示

2.转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览

3.在线翻译:给网址翻译对应网页的内容

4.图片加载/下载:例如富文本编辑器中的点击下载图片到本地;通过URL地址加载或下载图片

5.图片/文章收藏功能:主要其会取URL地址中title以及文本的内容作为显示以求一个好的用具体验

6.云服务厂商:它会远程执行一些命令来判断网站是否存活等,所以如果可以捕获相应的信息,就可以进行ssrf测试

7.网站采集,网站抓取的地方:一些网站会针对你输入的url进行一些信息采集工作

8.数据库内置功能:数据库的比如mongodb的copyDatabase函数

9.邮件系统:比如接收邮件服务器地址

10.编码处理, 属性信息处理,文件处理:比如ffpmg,ImageMagick,docx,pdf,xml处理器等

11.未公开的api实现以及其他扩展调用URL的功能:可以利用google 语法加上这些关键字去寻找SSRF漏洞

一些的url中的关键字:share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain……

12.从远程服务器请求资源(upload from url 如discuz!;import & expost rss feed 如web blog;使用了xml引擎对象的地方 如wordpress xmlrpc.php)

2. 从关键字寻找

  • share
  • wap
  • url
  • link
  • src
  • source
  • target
  • u
  • 3g
  • display
  • sourceURl
  • imageURL
  • domain

3. 绕过小技巧

http://[email protected]:88       实际上就是访问的http://[email protected]:88

五. 漏洞防御

  • 限制协议: 仅允许http和https请求。
  • 限制IP:     避免应用被用来获取内网数据,攻击内网。
  • 限制端口: 限制请求的端口为http常用的端口,比如,80,443,8080,8090。
  • 过滤返回信息: 验证远程服务器对请求的响应是比较简单的方法。
  • 统一错误信息: 免用户可以根据错误信息来判断远端服务器的端口状态

——心,若没有栖息的地方,到哪都是流浪

猜你喜欢

转载自blog.csdn.net/qq_44159028/article/details/114626708