参考文章


概述


总结

利用一个可以发起网络请求的服务当作跳板来攻击内部其他服务。


一、漏洞介绍

SSRF(Server-Side Request Forgery:服务器端请求伪造)


二、漏洞原理

由于服务端提供了从其他服务器应用获取资源的功能,但又没有对目标地址做严格过滤与限制,导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据。

数据流:攻击者--->服务器--->目标地址


三、漏洞危害

  • 内网信息泄露(端口、物理路径、配置信息、本地文件泄露等)
  • 内网或本地其他服务收到攻击,(DDos)
  • 穿透防火墙
  • 对内网web应用进行指纹识别,通过访问默认文件实现;

四、利用前提

  • 目标网站获取资源的方式
  • 可以控制目标网站获取指定资源,或向指定站点获取资源
  • 获取指定资源后,顺利通过过滤,成功执行
  • 可以获取过滤后或执行后的内容

五、挖掘利用

1、使用curl会话请求

描述

利用curl会话请求,获取相关地址的资源。

挖掘

因为可以通过GET请求、POST请求等方式,获取用户想要的目标资源,所以该漏洞的挖掘思路只能是判断观察服务器用户什么数据并执行(如给定数据https://www.baidu.com,观察是否访问了百度)

支持的协议dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp

利用

使用http、https等协议,搜寻我们想要的信息。下面以GET型举例

//探测端口、内网IP、等
?curl=http://127.0.0.1:80 //探测服务器物理目录、文件等
?curl=file:///C:/Windows/System32/drivers/etc/hosts

2、file_get_contents()

描述

该函数是用于把文件的内容读入到一个字符串中的首选方法。但是实际情况下,常常会输出它。且该函数时二进制安全的。可以用它获取相关地址的资源。

挖掘

同上。

利用

不明,可以使用file、http、https。

3、fsockopen()

4、SSRF in java

网络请求支持的协议如下:http,https,file,ftp,mailto,jar,netdoc

以下几种类引用不当会造成SSRF :Request类,URL类的openStream,HttpClient类,URLConnection和HttpURLConnection类,

5、SSRF in python

当使用了Python 的urllib库,请求url为用户可控时,就可能存在ssrf漏洞,且可以通过漏洞python urllib http头注入实现对内网未授权仿问的redis 服务器getshell

6、挖掘方向

  • 分享:通过url地址分享网页内容
  • 转码服务:通过url地址把源地址的网页内容调优使其适合手机屏幕浏览
  • 在线翻译:通过url地址翻译对应文本的内容
  • 能够对外发起网络请求的地方
  • 请求远程服务器资源的地方
  • 图片、文章、文件收藏功能
  • 未公开的api实现以及其他调用url的功能
  • 寻找关键字:share wap url link src source target u 3g display sourceURl imageURL domain(配合谷歌语法寻找)

7、绕过技巧

1.IP限制绕过

locahost绕过

攻击本地地址,过滤掉127.0.0.1的情况下,用locahost替代

[::]绕过

过滤掉locahost,可使用[::]替代

利用@

http://example.com@127.0.0.1

利用短地址

http://dwz.cn/11SMa (这个不太清楚)

进制转换绕过

十进制转换 八进制转换 十六进制转换  不同进制组合转换

例如将192.168.0.1改写成:

8进制格式:0300.0250.0.1
10进制整数格式:3232235521
16进制格式:0xC0.0xA8.0.1
16进制整数格式:0xC0A80001

利用Enclosed alphanumerics

利用Enclosed alphanumerics
ⓔⓧⓐⓜⓟⓛⓔ.ⓒⓞⓜ  >>>  example.com
List:
① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳ 
⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ 
⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ 
⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰ ⒱ ⒲ ⒳ ⒴ ⒵ 
Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ  Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ 
ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ 
⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴ 
⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿

利用句号

127。0。0。1  >>>  127.0.0.1

利用302跳转

如果后端服务器在接收到参数后,正确的解析了URL的host,并且进行了过滤,我们这个时候可以使用302跳转的方式来进行绕过。

http://xip.io 当我们访问这个网站的子域名的时候,例如192.168.0.1.xip.io,就会自动重定向到192.168.0.1。

DNS Rebinding

对于常见的IP限制,后端服务器可能通过下图的流程进行IP过滤

对于用户请求的URL参数,首先服务器端会对其进行DNS解析,然后对于DNS服务器返回的IP地址进行判断,如果在黑名单中,就pass掉。

但是在整个过程中,第一次去请求DNS服务进行域名解析到第二次服务端去请求URL之间存在一个时间查,利用这个时间差,我们可以进行DNS 重绑定攻击。

要完成DNS重绑定攻击,我们需要一个域名,并且将这个域名的解析指定到我们自己的DNS Server,在我们的可控的DNS Server上编写解析服务,设置TTL时间为0。这样就可以进行攻击了,完整的攻击流程为:

(1)、服务器端获得URL参数,进行第一次DNS解析,获得了一个非内网的IP

(2)、对于获得的IP进行判断,发现为非黑名单IP,则通过验证

(3)、服务器端对于URL进行访问,由于DNS服务器设置的TTL为0,所以再次进行DNS解析,这一次DNS服务器返回的是内网地址。

(4)、由于已经绕过验证,所以服务器端返回访问内网资源的结果。

2.协议限制绕过

当url协议限定只为http(s)时,可以利用follow redirect 特性

构造302跳转服务,

结合dict:// file:// gopher://


六、修复防范

如果一定要通过后台服务器远程去对用户指定("或者预埋在前端的请求")的地址进行资源请求,则请做好目标地址的过滤(黑白名单)。

  • 限制协议为HTTP,HTTPS ,或禁止使用不需要的协议
  • 设置URL白列表或限制内网IP
  • 过滤返回信息
  • 统一错误信息
  • 限制请求的端口为http常用的端口

七、提出问题

SSRF漏洞挖掘利用技巧的更多相关文章

  1. 谈谈SSRF漏洞挖掘

    最近看了很多ssrf漏洞挖掘技巧和自己以往挖掘ssrf漏洞的一些技巧和经验,简单的总结下: 之前自己总结的: ssrf=服务器端请求伪造 基于服务器攻击 url链接 -->内网漫游/内网服务探测 ...

  2. SSRF漏洞挖掘经验

    SSRF概述 SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞.一般情况下,SSRF攻击的目标是从外网无法访问 ...

  3. 6.(转载)SSRF漏洞挖掘经验

    SSRF 漏洞的寻找 一.从WEB功能上寻找 我们从上面的概述可以看出,SSRF是由于服务端获取其他服务器的相关信息的功能中形成的,因此我们大可以 列举几种在web 应用中常见的从服务端获取其他服务器 ...

  4. SSRF漏洞攻击利用从浅到深

    梳理一下ssrf 不详细 简单记录 0x01 SSRF成因和基本利用0x02 内网打未授权redis0x03 关于ssrf打授权的redis0x04 写redis shell和密钥的一点问题0x05 ...

  5. SSRF——漏洞利用(二)

    0x01 概述 上篇讲述了SSRF的一般用法,用http协议来进行内网探测,攻击内网redis,接下来讨论的是SSRF的拓展用法,通过,file,gopher,dict协议对SSRF漏洞进行利用. 0 ...

  6. CVE-2014-4210 SSRF漏洞

    Weblogic中存在一个SSRF漏洞,利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis.fastcgi等脆弱组件. 修复方式: 1.删除server/lib/uddiexplorer.w ...

  7. Weblogic SSRF漏洞(CVE-2014-4210)

    Weblogic中存在一个SSRF漏洞,利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis.fastcgi等脆弱组件. 关于SSRF漏洞我们就不讲了,传送门--> SSRF(服务端请求 ...

  8. 实战篇丨聊一聊SSRF漏洞的挖掘思路与技巧

    在刚结束的互联网安全城市巡回赛中,R师傅凭借丰富的挖洞经验,实现了8家SRC大满贯,获得了第一名的好成绩!R师傅结合自身经验并期许新手小白要多了解各种安全漏洞,并应用到实际操作中,从而丰富自己的挖洞经 ...

  9. 漏洞挖掘技巧之利用javascript:

    好久没更新博客了,更新一波. 场景: window.location.href=”” location=”” location.href=”” window.location.* 常见地点:任何二次跳 ...

随机推荐

  1. 7. JDK拍了拍你:字符串拼接一定记得用MessageFormat#format

    目录 ✍前言 版本约定 ✍正文 DateFormat:日期时间格式化 SimpleDateFormat NumberFormat:数字格式化 DecimalFormat 一.0和#的使用(最常见使用场 ...

  2. BOM主数据-用ECN实现可变BOM

    用ECN变更号实现可变BOM:通过ECN变更号的参数类型来实现BOM的可变配置. 物料编号:2104 (1)首先BOM的父项物料主数据<基本数据1>必须设置栏位"参数有效值&qu ...

  3. 记 CentOS 服务器上安装 neo4j 图数据库及本地访问

    下载 去官网下载压缩包放到服务器上.地址为neo4j 下载中心,我这里选择的是 Neo4j 3.5.25 (tar).具体如何做呢?我这里使用的是土方法,即先压缩包下载到本地电脑(win 10系统), ...

  4. [leetcode]64Minimum Path Sum 动态规划

    /** * Given a m x n grid filled with non-negative numbers, * find a path from top left to bottom rig ...

  5. 使用mybatis执行对应的SQL Mapper配置中的insert、update、delete等标签操作,数据库记录不变

    我使用springMVC集成mybatis,执行SQLMapper配置文件里的insert操作,发现程序没有报错,但数据库表里却没有刚才插入的记录.查了很多资料,终于在一篇博客上找到了答案:在执行完方 ...

  6. Java源码系列4——HashMap扩容时究竟对链表和红黑树做了什么?

    我们知道 HashMap 的底层是由数组,链表,红黑树组成的,在 HashMap 做扩容操作时,除了把数组容量扩大为原来的两倍外,还会对所有元素重新计算 hash 值,因为长度扩大以后,hash值也随 ...

  7. 剑指offer 面试题5:替换空格

    题目描述 请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy. 则经过替换之后的字符串为We%20Are%20Happy. 编程思想 ...

  8. readhat6.5下安装weblogic10.3.6

    转载自:http://www.mianhuage.com/752.html 1.安装前准备 1.1.准备安装包generic.jar1.2.创建weblogic用户及用户组创建组命令:groupadd ...

  9. utraedit不小心把打开文件列表弄得不显示的处理办法

    视图->视图/列表->打开文件标签

  10. [Usaco2005 Dec]Scales 天平

    题目描述 约翰有一架用来称牛的体重的天平.与之配套的是N(1≤N≤1000)个已知质量的砝码(所有砝码质量的数值都在31位二进制内).每次称牛时,他都把某头奶牛安置在天平的某一边,然后往天平另一边加砝 ...