在刚结束的互联网安全城市巡回赛中,R师傅凭借丰富的挖洞经验,实现了8家SRC大满贯,获得了第一名的好成绩!R师傅结合自身经验并期许新手小白要多了解各种安全漏洞,并应用到实际操作中,从而丰富自己的挖洞经验,积累挖洞技巧。(文末有R师傅的个人专访,挖洞秘籍尽在其中)

今天i春秋就针对众多安全漏洞中的SSRF进行详细介绍,理论内容结合实际案例进行深度分析,帮助大家快速get新技能!本文阅读用时约7分钟。

什么是SSRF?

SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。

通俗的说,如果我们将换为与该服务器相连的内网服务器地址会产生什么效果呢?比如127.0.0.1、10.0.0.1、192.168.1.1等等,如果存在该内网地址就会返回1xx 2xx 之类的状态码,不存在就会返回其他的状态码;如果应用程序对用户提供的URL和远端服务器返回的信息没有进行合适的验证和过滤,就可能存在这种服务端请求伪造的缺陷。

到这里先解决两个问题:

1、为什么要请求127.0.0.1、10.0.0.1、192.168.1.1,有什么区别呢?

答:127.0.0.1只是代表你的本机地址,如果该网站只有一个服务器的情况下,是可以访问127.0.0.1的来判断的,但要明确一点,127.0.0.1其实并不是内网地址,内网地址是有严格的地址段的,这是ipv4地址协议中预留的,分别是10.0.0.0--10.255.255.255、172.16.0.0--172.31.255.255 、192.168.0.0--192.168.255.255。

2、如果请求地址会返回状态码,那请求地址+端口会不会返回状态码呢?

答:当然会返回状态码,只是探测内网地址的话属实不够看的,所以如果一个点存在SSRF,那势必要尝试一下能不能探测内网端口,比如,假设10.0.0.1这个地址存在,那我们可以尝试请求10.0.0.1:21、10.0.0.1:3306、10.0.0.1:6379等内网的常用端口,如果探测结果有收获的话,那就可以为其他工作节省很多时间。

基础的SSRF漏洞利用

随便找了个输入点,大家就假装这个图中的点就是漏洞点吧,因为真正的漏洞点不好放出来,也不好打码,理解万岁。

不过可能会有疑问,如何知道这个点就是漏洞点呢?其实这个东西不好回答,因为没有成文的规定,经验成分居多吧,如果看到让用户输入url,导入外部链接的这些点,就可以去尝试一下。

进入正题,如果这是一个漏洞点,那我们怎么应用?最简单的方法,ceye.io。CEYE是一个用来检测带外流量的监控平台,如DNS查询和HTTP请求。一些漏洞类型没有直接表明攻击是成功的,就如同此处的SSRF,Payload触发了却不在前端页面显示。这时候使用CEYE平台,通过使用诸如DNS和HTTP之类的带外信道,便可以得到回显信息。

用法也很简单,登录CEYE.IO,在用户详情页可以看到自己的域名标识符 identifier,对于每个用户,都有唯一的域名标识符abcdef.ceye.io 。所有来自于abcdef.ceye.io或.abcdef.ceye.io/ 的DNS查询和HTTP请求都会被记录。通过查看这些记录信息,就可以判断漏洞详情。

比如我在此输入我的域名标识符,如图:

然后我就可以去ceye.io观察是否有请求记录,结果得到记录:

当然我们也可以通过抓包,在包里修改url的信息构造不同的请求,然后观察返回的状态码来探测信息。

所以通过上述两种方法,就可以确定这个地方确实是有SSRF漏洞的。不过仅仅到这是不够的,除非有进一步的操作证明危害,所以接下来会演示探测端口。

简单的SSRF绕过

上面说的漏洞点本身就是一个让用户输入链接的地方,那自然就不必绕过,但是如果漏洞点是一个加载图片的地方,想必大家都见过社区或者论坛有这样一个模块点,就是可以让用户导入外部的图片链接进行评论或者其他,比如下图:

那么这种地方,也是可能存在SSRF的,不过当我们输入ceye.io却发现并没有回显请求,这是因为这种地方一般会对后缀做一个检测,如果不是jpg或者其他图片后缀的话并不会通过,不过好在ceye.io是很强大的,我们可以随便构造,abcdef.ceye.io/ichunqiu.jpg, 对其进行输入,再去观察有无回显,结果有了:

有其他限制的话都是一个道理,也可以在burp里截包改包达到此效果。

一个特殊的SSRF

有一次挖洞遇到一个站,就假设是www.xxx.com吧,是一个开源的系统,于是就在网上下载了这个开源的系统,一点一点的对其审计,在某个文件里发现这么一个链接:http://127.0.0.1/abc.php?url=http://www.baidu.com, 这可不是跳转,结合上下代码,发现此链接好像是服务器发起的请求操作,因为127.0.0.1是本机地址,所以尝试构造http://www.xxx.com/abc.php?url=http://www.baidu.com, 发现也可以成功访问,隐约觉得这是一个操作的地方,由于那个开源系统找不到了,所以没法贴图了,只能一步一步的详细说了。

总之通过分析上下的代码,发现这个链接的构成是由赋予abc.php一个外部的url参数,在没有任何过滤,任何防护的情况下读取这个外部url并发起请求,那么是否可以读取内网地址呢?

于是构造:

http://www.xxx.com/abc.php?url=http://127.0.0.1:80, 为什么第一次就要访问80端口?因为该站是可以访问的,所以80端口必开放,第一次探测80也是想看一看正确返回与错误返回的区别,访问完http://www.xxx.com/abc.php?url=http://127.0.0.1:80后, 得到正确的返回结果,就可以尝试继续访问90端口,100端口,等等。

不过这个地方既然存在SSRF,且url参数没有任何防护与过滤,那可不可以尝试读取文件呢?

继续构造:

http://www.xxx.com/abc.php?url=file:///C:/Windows/win.ini

发现读取成功,所以又成功探测到一枚文件读取。

WebLogic的SSRF漏洞

我们接下来聊一下WebLogic的SSRF漏洞。WebLogic的SSRF漏洞算是一个比较知名的SSRF漏洞,具体原理可以自行谷歌。本篇主要是通过复现该漏洞来加深对SSRF漏洞的理解。

WebLogic的SSRF漏洞的存在页面样子是这样的:

在学习这块的时候,天真的以为只要存在这个页面就必有SSRF,结果当然是否定的,在借鉴了猪猪侠大佬的PPT之后,发现一共有如图四种回显状态:

那么可以通过构造:

http://xxx.com/uddiexplorer/SearchPublicRegistries.jsp?operator=http://

(要探测的内网地址)

&rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search

对其进行探测,观察其回显状态,判断是否存在目标网段,这个地方最主要的就是operator这个参数,主要思路就是通过修改这个参数,来探测内网地址和内网端口。不过问题来了,上面刚才说内网地址那么多,我们要怎么才能知道呢?

在WebLogicSSRF的漏洞页面点击这里:

就会来到这里,有时候由于配置不当的关系,这个地方会直接给出内网地址的网段:

有网段了,就可以一点一点的探测了,探测内网的telnet,ssh,redis,以及各个数据库,为以后的内网漫游做好信息收集。还有,在WebLogic的SSRF中,有一个比较大的特点,就是虽然它是一个“GET”请求,但是我们可以通过传入%0a%0d来注入换行符,而某些服务(如redis)是通过换行符来分隔每条命令,也就说我们可以通过该SSRF攻击内网中的redis服务器。

手动反弹shell,就是常规的发送redis命令,然后把弹shell脚本写入crontab中,最后用get发送命令,不过别忘了,get发送命令的时候要进行url编码,最后在服务器上进行监听就OK了。

当然,作为一名脚本小子,手动探测以及反弹shell太累了,在此贴上一个大牛的脚本,可以很方便的探测SSRF的网段以及每个网段的端口,甚至还有反弹shell的功能,地址:

https://github.com/NoneNotNull/SSRFX

总结

SSRF这个漏洞虽然在各大SRC上都被评为低危,但是这是因为它本身的危害有限,若是与其他漏洞结合起来会对你的渗透过程方便很多,它的强大之处是在于探测到一些信息之后从而进一步加以利用。比如获取内网的开放端口信息,主机的信息收集和服务banner信息,攻击内网和本地的应用程序及服务,还有就是利用file协议读取本地文件等。

以上是今天的全部内容,大家看懂了吗?

推荐阅读

专访丨互联网安全城市巡回赛冠军肖策

实战篇丨聊一聊SSRF漏洞的挖掘思路与技巧的更多相关文章

  1. SSRF漏洞的挖掘思路与技巧

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

  2. SSRF漏洞的挖掘经验

    本文转自:https://sobug.com/article/detail/11 SSRF概述 SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造 ...

  3. 实战经验丨PHP反序列化漏洞总结

    又到了金三银四跳槽季,很多小伙伴都开始为面试做准备,今天小编就给大家分享一个网安常见的面试问题:PHP反序列化漏洞. 虽然PHP反序列化漏洞利用的条件比较苛刻,但是一旦被利用就会产生很严重的后果,所以 ...

  4. SSRF漏洞挖掘利用技巧

    参考文章 SSRF漏洞(原理&绕过姿势) SSRF绕过方法总结 SSRF绕过IP限制方法总结 Tag: #SSRF Ref: 概述 总结 利用一个可以发起网络请求的服务当作跳板来攻击内部其他服 ...

  5. Web安全测试中常见逻辑漏洞解析(实战篇)

    Web安全测试中常见逻辑漏洞解析(实战篇) 简要: 越权漏洞是比较常见的漏洞类型,越权漏洞可以理解为,一个正常的用户A通常只能够对自己的一些信息进行增删改查,但是由于程序员的一时疏忽,对信息进行增删改 ...

  6. 谈谈SSRF漏洞挖掘

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

  7. SSRF漏洞挖掘经验

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

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

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

  9. SSRF漏洞入门篇

    SSRF漏洞,又名服务端请求伪造漏洞. PHP中下列函数使用不当会导致SSRF: file_get_contents().fsockopen().curl_exec()函数(源码审计的时候注意点儿): ...

随机推荐

  1. PHP将数组转字符串

    implode(',',$arr) //将数组转字符串 $arr = [ 'a'=>1, 'b'=>2, 'c'=>3, ]; $arr_string = implode(',',$ ...

  2. Linux统计文件夹、文件数量的命令

    # 查看当前目录下的文件数量(不包含子目录中的文件) ls -l|grep "^-"| wc -l # 查看当前目录下的文件数量(包含子目录中的文件) 注意:R,代表子目录 ls ...

  3. 详解YUV数据格式

    我们在讲 FFmpeg 系列的时候,有提到 YUV 的.其中包括YUV播放器.简单的YUV格式介绍. 一.YUV简介 YUV,是一种颜色编码方法.常使用在各个影像处理元件中. YUV在对照片或影片编码 ...

  4. requests---requests发送json数据类型

    我们都知道post请求中的body有4种数据类型,今天我们来写一篇关于requests请求json这种数据类型. 数据类型 我们都知道post和get有个大的区别就是get没有body而post存在b ...

  5. Sqlserver 2014 下载

    ed2k://|file|cn_sql_server_2014_enterprise_edition_x64_dvd_3932882.iso|2898847744|A33CE10CD989083D1A ...

  6. SecureCRT自动断开连接的解决方法

    方法一: 在普通用户下,输入重启sshd服务的命令:service sshd restart 这时会提示:管理系统服务或单元需要身份验证.解决的方法:先要切换为root用户,接着重启sshd服务:se ...

  7. 【Eureka篇三】Eureka常用配置说明(7)

    服务注册中心配置(Bean类:org.springframework.cloud.netflix.eureka.server.EurekaServerConfigBean) #关闭注册中心的保护机制, ...

  8. GitHub 上优秀的开源SLAM repo (更新中)

    GitHub 上优秀的开源SLAM repo (更新中) 欢迎 watch/star/fork 我们的 GitHub 仓库: Awesome-SLAM, 或者follow 项目的主页:Awesome- ...

  9. 详解C++ STL priority_queue 容器

    详解C++ STL priority_queue 容器 本篇随笔简单介绍一下\(C++STL\)中\(priority_queue\)容器的使用方法和常见的使用技巧. priority_queue容器 ...

  10. 洛谷 P5595 【XR-4】歌唱比赛

    洛谷 P5595 [XR-4]歌唱比赛 题目传送门 题目描述 小 X 参加了一场歌唱比赛. 经过一路鏖战,小 X 终于挺进了决赛,他的对手是小 Y. 这场歌唱比赛的冠军是由点赞数决定的,谁的点赞数高, ...