【安全新闻】SSRF总结上

SSRF总结上

0x00 前言

众所周知,现在的企业等的网络大多都是外紧内松,许多外网无法访问到的内部系统、文件都可以在内网中轻易的访问到。而SSRF漏洞的核心就是服务器因为你的传参而偷偷向目标主机发送数据包,以达到访问内网中主机的目的。(因为这个数据包时服务器发送的,所以可以请求到我们在外网中请求不到的与外网隔离的内部系统)

0x01 什么是SSRF?

我们发送的数据包为什么会让服务器发送数据包呢?

这里我们举一个简单的例子:翻译网页

我们最长用的百度翻译,有道翻译等的翻译网站是可以翻译网页地址的

【安全新闻】SSRF总结上

那么这个功能时如何实现的呢?

我们先来看翻译单词:这个很简单,就是我们通过GET/POST传参让服务器查询数据库然后就可以返回我们所要的结果了
然后是翻译网页:一般来说有两种方法,一种是你自己主机访问目标站点,翻译网站通过JS获取你访问的结果然后就与翻译单词几乎一样了,但是这种方式非常不安全,因为翻译网站可能通过JS来获取到你浏览器上保存的用户名密码等的敏感信息,所以这一种方法很少有人使用
第二种方法就是翻译网站代替我们去访问目标站点,对其查询翻译之后直接返回给我们,这其实只是一个功能点不能说是漏洞,但是如果我们这里直接通过服务器去访问到内网的一些主机,但是内网的过滤又很一般,就可能导致许多非法操作

【安全新闻】SSRF总结上1

开启DNSlog后

【安全新闻】SSRF总结上2

【安全新闻】SSRF总结上3

类似于这种测试,这里发现ip所在地变化了,所以说明百度翻译翻译网页用的是第二种方法,是百度替代了我们去访问目标网站,这其实就是一个典型的ssrf

使用DNSlog测试必须要目标主机有外网,没有连接外网的内网主机是不能使用DNSlog进行测试的

最简单的一个SSRF,下面用ctfshow上面的一道题来演示

<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$ch=curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($ch);
curl_close($ch);
echo ($result);
?>

分析代码我们可以直接让服务器访问flag所在的flag.php文件,就可以输出我们要的flag

[POST]   url=http://127.0.0.1/flag.php

【安全新闻】SSRF总结上4

0x02 SSRF的危害

1.访问内网(外紧内松)
2.隐藏攻击者(当跳板机来躲避追踪)
3.攻击目标本机(很多网站对于127.0.0.1是不设防的,有些WAF不会拦截内网请求攻击)

0x03 SSRF常用的一些协议

Gopher协议

一个SSRF中万金油的协议,gopher协议原本是一个在http协议产生前的用来访问internet资源的协议【安全新闻】SSRF总结上5

利用的条件是能未授权访问到redis服务器

gopher协议可以发起TCP数据流

gopher协议有几个要注意的点:
1.问号需要转码为URL编码%3f,回车换行要变为%0d%0a,在HTTP包的最后要加%0d%0a,代表消息结束
2.第一个字符默认不解析,为了统一用_代替

dict协议

因为gopher协议使用的时候有环境限制,所以在必要的时候可以用dict协议替换gopher协议,dict协议是一个字典服务器协议,与gopher协议不同的是dict协议要一条一条执行,dict是基于查询响应的TCP协议,服务器监听端口2628

file协议

这个协议就比较熟悉了,本地文件传输协议,用于访问本地计算机中的文件

0x04 一些常见的SSRF绕过手法

解析特性绕过

127.1会被解析成127.0.0.1
在linux中,0也会被解析成127.0.0.1,而在windows中0会被解析成0.0.0.0
127.0.0.0/8是一个回环地址网段,从127.0.0.1~127.255.255.254都表示
localhost(127.255.255.255是广播地址)
ip地址还可以以其他进制形式表示

dns重绑定

使用http://ceye.io/这个网站进行dns重绑定

【安全新闻】SSRF总结上6

在最下面的DNS Rebinding中添加127.0.0.1

302跳转

SSRF中有个很重要点是请求可能会跟随302跳转

<?php
header("Location:http://127.0.0.1/flag.php");

然后用http://访问这个文件所在地址

0x05 SSRf的防御

禁用掉不需要的协议,比如只允许http和https请求
过滤输入的信息
禁止302跳转
服务器需要交互认证
过滤返回的信息
© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
大佬不来一句? 抢沙发

请登录后发表评论