| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> SSRF服务器端请求伪造漏洞基础 -> 正文阅读 |
|
[系统运维]SSRF服务器端请求伪造漏洞基础 |
SSRF服务器端请求伪造漏洞基础,下面分五个专题来说 1、什么是ssrf? 2、ssrf的相关协议 3、有无回显的ssrf漏洞确认 4、ssrf如何利用? 5、ssrf漏洞的绕过 6、ssrf漏洞的加固 一、什么是ssrf?SSRF是一种由攻击者构造形成并由服务器端发送恶意请求的一个安全漏洞,正因为恶意请求由服务器端发起,而服务器端可以请求到与自身相连并且和外部网络隔绝的内部网络系统。所以一般情况下,SSRF的攻击目标是外网无法直接访问的内网系统。 借一下别人的图片展示一下这个过程: 由于业务需求,服务器端需要从其它服务器获取应用数据,如图片等。但由于服务器没有对请求的目标地址进行过滤,导致黑客可以请求任意服务器的资源,其中就包含了隐匿在内网的应用。很多企业认为服务器在内网不会受到黑客攻击,便放任漏洞不管,不做补丁修复和版本升级,弱口令遍布内网。但是在SSRF漏洞面前这些漏洞都会成为黑客的“盘中餐”。 SSRF可能存在的地方
SSRF的危害?
二、SSRF的相关协议SSRF漏洞的利用所涉及的协议有:
介绍一下dict协议:
下面介绍函数演示一下协议的利用。 三、有无回显的ssrf漏洞确认有回显的ssrf 有回显的ssrf漏洞很好确认,可以通过dnslog平台、file协议、dict协议等的回显信息来确认。
无回显的ssrf? (1)用dnslog平台来确认 在DNSLog Platform申请一个子域 ? 然后在测试的地方将该网址打进去 回到dnslog平台刷新,发现存在访问记录,可以判断存在ssrf漏洞 那么如何确定该站点所在的服务器支持哪种协议呢?也可以用dnslog来确定,步骤也是先申请一个域名,分别用以下的语句来测试。
?(2)可以在vps上通过监听端口来确认 先在服务器上监听8888端口,命令如下:
然后在存在ssrf的地方输入测试语句
?最后在服务器上查看返回信息 四、SSRF如何利用?产生SSRF的相关函数
上面函数使用不当会导致SSRF漏洞。 file_get_contents() 演示代码:
?上述测试代码中,file_get_contents()函数将文件或url所指的文件内容读入一个字符串,我们构造ssrf.php?url=../../../../../etc/hosts的payload即可读取服务器本地的任意文件。 也可以利用file协议进行文件读取,在后面会对这个协议进行讲解。 更可以用来探测端口,8080端口开启,并且有服务运行? 3060端口没开启,这是最简便的一种环境模拟,在实际中可以根据报错情况在判断端口是否开启。 fsockopen() fsockopen($hostname,$port,$errno,$errstr,$timeout)打开一个网络连接或者一个Unix 套接字连接。 fsockopen(主机名称,端口号码,错误号的接受变量,错误提示的接受变量,超时时间) 演示代码:
构造ssrf?url=www.baidu.com&port=80可以返回百度主页: 可以用来内网端口探测,开放则正常回显。 ?不开放则显示拒绝或者超时 curl_exec函数: curl_exec函数是危害最大的函数,也是需要重点讲的函数。以上代码是获取参数url的值,使用curl进行访问。 演示代码:
根据回显的信息判断是否开放端口: 同时也可以根据回显的信息判断开放的服务,类似于上面的第一张图,下面是别人的图片。 dict协议探测22端口 dict协议探测6379端口 可以根据回显的banner信息判断目标端口运行的服务为ssh和redis服务,dict协议还可以做到执行命令的功能,本文不再讲解。? 探测内网主机存活(http/s协议)一般是先想办法得到目标主机的网络配置信息,如读取/etc/hosts、/proc/net/arp、/proc/net/fib_trie等文件,从而获得目标主机的内网网段并进行爆破。 域网IP地址范围分三类,以下IP段为内网IP段:
通过构造一下形式的payload来逐一探活,手动试是很麻烦的,可以通过bp爆破模块对后面的进行爆破,通过查看长度来确定哪个主机存活。然后再利用http协议或者dict协议来查看端口打开的服务,从而找到漏洞进行渗透。
五、SSRF的绕过在一些存在ssrf的站点,可能会有waf对输入的内容进行过滤,对内容中涉及的内网内容进行过滤,这个时候就需要进行绕过。 对于SSRF的限制大致有如下几种:
利用HTTP基本身份认证的方式绕过如果目标代码限制访问的域名只能为?http://www.xxx.com,那么我们可以采用HTTP基本身份认证的方式绕过。即@:http://www.xxx.com@www.evil.com 利用302跳转绕过内网IP绕过对内网ip的限制我们可以利用302跳转的方法,可以类比手机所对应的呼叫转移功能,这样打进A手机的电话,均转移到B手机接听。有以下两种。 (1)网络上存在一个很神奇的服务,网址为http://xxx.xip.io,当访问这个服务的任意子域名的时候,都会重定向到这个子域名,举个例子: 当我们访问:http://127.0.0.1.xip.io/1.php时,实际访问的是?http://127.0.0.1/1.php?。像这种网址还有http://nip.io、http://sslip.io。 ?2)短地址跳转绕过,这里也给出一个网址?短网址,短网址生成,短链接,网址缩短_ft12.com短网址,这种百度一搜一大堆。 ? ? 进制的转换绕过内网IP可以使用一些不同的进制替代ip地址,从而绕过WAF。
利用句号绕过
利用封闭字母数字?
利用URL的解析问题该思路来自Orange Tsai成员在2017 BlackHat 美国黑客大会上做的题为《A-New-Era-Of-SSRF-Exploiting-URL-Parser-In-Trending-Programming-Languages》的分享。主要是利用readfile和parse_url函数的解析差异以及curl和parse_url解析差异来进行绕过。 (1)利用readfile和parse_url函数的解析差异绕过指定的端口 测试代码:
假设在11211端口下存在flag.txt,但是代码限制了我们传过去的url只能是80端口,这时候就可以利用readfile和parse_url的差异来读文件。payload:127.0.0.1:11211:80/flag.txt,借一张图说明一下。 ?从上图中可以看出readfile()函数获取的端口是最后冒号前面的一部分(11211),而parse_url()函数获取的则是最后冒号后面的的端口(80),利用这种差异的不同,从而绕过WAF。 这两个函数在解析host的时候也有差异,如下图: readfile()函数获取的是@号后面一部分(evil.com),而parse_url()函数获取的则是@号前面的一部分(google.com),利用这种差异的不同,我们可以绕过题目中parse_url()函数对指定host的限制。? (2)利用curl和parse_url的解析差异绕指定的host 原理如下: ?从上图中可以看到curl()函数解析的是第一个@后面的网址,而parse_url()函数解析的是第二个@后面的网址。利用这个原理我们可以绕过题目中parse_url()函数对指定host的限制。 六、SSRF漏洞的加固
如何验证存在SSRF漏洞,有回显和无回显的情况该怎么办?会在下一篇博客讲。 参考文章? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 5:29:44- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |