从一文中了解SSRF的各种绕过姿势及攻击思路_ssrf绕过-CSDN博客
SSRF详解 基于CTFHub(下篇)_ctfhub fastcgi协议-CSDN博客
SSRF常见绕过
利用localhost代替127.0.0.1
http://localhost/flag.php
http://127.0.0.1/flag.php
@绕过
平常我们传入的url是url=http://127.0.0.1/flag.php如果
我们传入的url是url=http://notfound.ctfhub.com@127.0.0.1它此时依旧会访问127.0.0.1
url=http://notfound.ctfhub.com@127.0.0.1/flag.php
短链接绕过
短链接网址:网之映短网址-短链接生成_防拦截_自定义跳转方式_自定义域名_数据统计_API接口_强大的营销工具
进制绕过
我们可以将127.0.0.1进行进制转换绕过
十进制:127.0.0.1
十六进制:7F000001 #(使用16进制时前面记得加0X)
十进制:2130706433
特殊字符绕过:
我们可以构造一个特殊的127.0.0.1进行绕过,例如:1②7.0.0.1
。代替.绕过
127.0.0.1 | 127。0。0。1
关于bypass
大家知道,网络安全设备一般都是应用在两个或更多的网络之间,比如内网和外网之间,网络安全设备内的应用程序会对通过他的网络封包来进行分析,以判断是否有威胁存在,处理完后再按照一定的路由规则将封包转发出去,而如果这台网络安全设备出现了故障,比如断电或死机后,那连接这台设备上所以网段也就彼此失去联系了,这个时候如果要求各个网络彼此还需要处于连通状态,那么就必须Bypass出面了。
Bypas顾名思义,就是旁路功能,也就是说可以通过特定的触发状态(断电或死机)让两个网络不通过网络安全设备的系统,而直接物理上导通。所以有了 Bypass后,当网络安全设备故障以后,还可以让连接在这台设备上的网络相互导通,当然这个时候这台网络设备也就不会再对网络中的封包做处理了。
下面一个图示说明了Bypass的方式。左边是正常状态下,两个网络的封包都经过应用软件处理后再传播。右边是设备处于Bypass后,设备的应用程序已经不再对网络封包处理了。
CTFHUB例题
URL Bypass
请求的URL中必须包含http://notfound.ctfhub.com,来尝试利用URL的一些特殊地方绕过这个限制吧
他给了指定网址,那这儿我们就使用@绕过,构造url
url=http://notfound.ctfhub.com@127.0.0.1/flag.php
数字IP Bypass
这次ban掉了127以及172.不能使用点分十进制的IP了。但是又要访问127.0.0.1。该怎么办呢
他过滤了127.172.等,那我们就使用进制转换进行绕过
十六进制:7F000001 (使用16进制时前面记得加0X)
十进制:2130706433
302跳转 Bypass
SSRF中有个很重要的一点是请求可能会跟随302跳转,尝试利用这个来绕过对IP的检测访问到位于127.0.0.1的flag.php吧
关于302跳转
详细来说,301和302状态码都表示重定向,就是说浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取(用户看到的效果就是他输入的地址A瞬间变成了另一个地址B)——这是它们的共同点。他们的不同在于:
301代表永久性转移,就是旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;
302代表暂时性转移,表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。
举个例子,302跳转就相当于我们打电话时的呼叫转移功能,我们打给一个电话,被另一个电话接听。
302跳转应用场景:比如我们有一个经常访问的网站,然后这个网站换了新的域名,但是老的域名我们以及其他用户依然在用着,那就可以给老域名配置302跳转到新域名,从而保证服务的延续。
关于重定向:
了解了基本知识后,我们打开环境
分别访问index.php和flag.php,再查看他们的源码
这儿表示我们要使用127.0.0.1访问
在这儿我们可以看到它的过滤信息:
"/127|172|10|192/"
我们可以尝试用localhost代替127.0.0.1进行绕过,得到flag
ctfhub{0c946ad2eef9b8eddc1f52e5}
?url=localhost/flag.php
我们还可以利用短链接进行绕过,这是生成短链接的网址
网之映短网址-短链接生成_防拦截_自定义跳转方式_自定义域名_数据统计_API接口_强大的营销工具
然后放进url里得到flag
DNS重绑定 Bypass
关于DNS重绑定:
DNS(Domain Name Service)计算机域名服务器,在Internet上域名与IP地址之间是一一对应的,一个域名对应一个IP,例如:www.baidu.com就是域名,127.0.0.1就是IP,域名方便我们去记忆,但是在机器之间,它们只能互相认识IP地址,它们之间的转换工作称为域名解析,而域名解析需要由专门的域名解析服务器来完成,这就是DNS域名服务器。
解析过程:
在网页浏览过程中,用户在地址栏中输入包含域名的网址。浏览器通过DNS服务器将域名解析为IP地址,然后向对应的IP地址请求资源,最后展现给用户。
而对于域名所有者,他可以设置域名所对应的IP地址。当用户第一次访问,解析域名获取一个IP地址;然后,域名持有者修改对应的IP地址;用户再次请求该域名,就会获取一个新的IP地址。对于浏览器来说,整个过程访问的都是同一域名,所以认为是安全的。这就造成了DNS 重绑定攻击。
攻击过程:
对于用户请求的URL参数,首先服务器端会对其进行DNS解析,然后对于DNS服务器返回的IP地址进行判断,如果在黑名单中,就pass过滤。记住,这个过程需要时间,所以在整个过程中,第一次去请求DNS服务进行域名解析再到第二次服务端去请求URL之间存在着一个时间差,我们利用这个时间差,就可以进行DNS 重绑定攻击。我们利用DNS Rebinding技术,在第一次校验IP的时候返回一个合法的IP,在真实发起请求的时候,返回我们真正想要访问的内网IP即可。
要完成DNS重绑定攻击,我们需要一个域名,并且将这个域名的解析指定到我们自己的DNS Server,在我们的可控的DNS Server上编写解析服务,设置TTL时间为0(这是为了防止有DNS服务器对解析结果进行缓存)。所以完整的攻击流程为:服务器端获得URL参数,进行第一次DNS解析,获得了一个非内网的IP;对于获得的IP进行判断,发现为非黑名单IP,则通过验证;服务器端对于URL进行访问,由于DNS服务器设置的TTL为0,所以再次进行DNS解析,这一次DNS服务器返回的是内网地址;由于已经绕过验证,所以服务器端返回访问内网资源的结果。
说简单一点,就是我们先提供一个ip,然后在服务端进行解析的过程中再传127.0.0.1,此时就可能会出现访问到本地文件的情况
DNS重绑定网站:rbndr.us dns rebinding service
举个例子,我们打开网站,输入两个IP,然后下面生成了一个域名,我这儿的IP分别是127.0.0.1、1.1.1.15,生成的域名为7f000001.0101010f.rbndr.us
我们使用kaliping一下7f000001.0101010f.rbndr.us
可以看见有两种情况,一种是1.1.1.15,另外一种是127.0.0.1,这儿就相当于一个域名绑定了两个IP,我们请求时可能是1.1.1.15, 也可能是127.0.0.1
解题:
关键词:DNS重绑定。剩下的自己来吧,也许附件中的链接能有些帮助
还是先打开环境,访问flag.php和index.php,查看他们的源码
index.php
flag.php
发现和前一题差不多,继续用localhost代替127.0.0.1,得到了flag。ctfhub{0e63f6d8e0b516dc24204a57}
嗯嗯嗯。。。但是呢这一题的考点是DNS重绑定欸,那就换个方法再写一遍
使用DNS重绑定网站:rbndr.us dns rebinding service
两个ip 127.0.0.1 |192.168.0.1 保证两个IP中有一个是127.0.0.1即可
生成一个域名7f000001.c0a80001.rbndr.us
在url里构建:
url=7f000001.c0a80001.rbndr.us/flag.php
得到flag,因为一个域名绑定了两个IP,所在在DNS校验时不知道IP是否为127.0.0.1,因此,我们多刷新几次就可以了