加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

SSRF漏洞学习实验环境推荐及过程记录

发布时间:2019-06-18 00:12:46 所属栏目:建站 来源:Seas0n
导读:在网上找到一个学习 SSRF 的环境,SSRF-LABS 有一个好看又简洁的界面,提供了最基本的 REST API 和客户端 WebHook 功能用于 SSRF 测试。前面只是大概的介绍,知道就好,不用花费过多精力了解。 SSRF 介绍 服务端请求伪造,用户通过 WEB 访问/上传/发出请求

这个看起来不太清晰,urldecode 之后,就可以看到具体的命令。下面为解码之后的内容,我把关键的 redis 指令放到同一行中。

SSRF漏洞学习实验环境推荐及过程记录

在页面能看到如下的回显。

SSRF漏洞学习实验环境推荐及过程记录

为了验证是否成功了,我在 ssrf-lab/basics 容器里面查看插入的 KEY 值。

SSRF漏洞学习实验环境推荐及过程记录

Part 2:Advance1

实验过程

这一关用了正则表达式限制内网IP的访问,具体的代码如下。必须要吐槽一下,这个方法真的是一个很糟糕的方法,因为它实际上不能起到很好的安全防护作用。

  1. if (preg_match('#^https?://#i', $handler) !== 1) {   
  2.     echo "Wrong scheme! You can only use http or https!";   
  3.     die(); 
  4. } else if (preg_match('#^https?://10.0.0.3#i', $handler) === 1) {   
  5.     echo "Restricted area!";   
  6.     die(); 

现在我们就用http://10.0.0.3来测试。

SSRF漏洞学习实验环境推荐及过程记录

我们可以很明显地看到没有获得响应,但是神奇的IP地址有多种表达方式,我们可以用这些方式来绕过上面那么直白的限制。先用整数表达http://167772163发出请求。

SSRF漏洞学习实验环境推荐及过程记录

成功了,我们可以来看看 IP 地址的表达方式。众所周知,IP 地址是由四个字节组成的,一旦包含了小数点,就必须考虑到大小端表示,因为这个会影响 IP 地址的解析。不过好在所有的网络地址都是大端表示法,只需要注意这一点即可,下面我们介绍 IP 地址的表达方式。

  1. 字符串:       10.0.0.3 
  2. 二进制:       00001010 . 00000000 . 00000000 . 00000011 
  3. 十六进制:    0A.00.00.03 
  4. 整数:           167772163 

这些表达方式都能被curl命令解析为正确的 IP 地址,之后如果我们要访问的IP地址被简单粗暴地过滤了就可以试试这种方法。除了上面的表达方式之外,还可以用 16 进制0x0A000003表示IP地址,还有一个很少人知道的绕过小姿势,就是用 8 进制代替 10 进制来表示 IP 地址。在计算机的世界里,一旦在20前面加个0就会变成8进制,比如http://01200000003实际上还是http://10.0.0.3。上面两个表达方式,PHP 的 curl 模块能解析出来。

下面总结一下几种变形:

  • 十六进制: http://0x0A.0x00.0x00.0x03
  • 八进制: http://012.00.00.03
  • 八进制溢出:http://265.0.0.3

最后一个变形好像只适用于 NodeJS 应用的服务器,点分十进制的最大值为 255,一旦超出了这个数,将会被重置,这个时候最后一个变形就会变回http://10.0.0.3。具体为什么可以通过这样的可能要从 TCP/IP 解析 IP 地址的逻辑入手(应用层的限制总能被巧妙地绕过,不是很可靠)。

其他常见的绕过方法

1. DNS泛域名

xip.io和xip.name这两个 dns 泛域名,实现绕过的方法是,你在你想访问的 ip 地址后面添加这两个泛域名,这两个域名会从你发出的请求中提取你真正想访问的 IP 地址,然后再响应报文中返回。感兴趣的可以看看 《DNS 服务系列之一:泛域名解析的安全案例》:

https://blog.51cto.com/laoxu/1282773

  • http://www.10.0.0.3.xip.io
  • http://mysite.10.0.0.3.xip.io
  • http://foo.bar.10.0.0.3.xip.io
  • http://foo.10.0.0.3.xip.name
  • http://www.10.0.0.3.xip.name

还有很多其他的绕过方式,因为在这个环境里不能实现,所以就不在这里补充了,《SSRF 漏洞的利用与学习》:

https://uknowsec.cn/posts/notes/SSRF%E6%BC%8F%E6%B4%9E%E7%9A%84%E5%88%A9%E7%94%A8%E4%B8%8E%E5%AD%A6%E4%B9%A0.html

一文中比较全面。没有仔细研究过为什么 Python 写的后端代码不能实现其他绕过,不过我猜是因为Python的 urllib 和 PHP 的 curl 解析方式不同,如果以后有机会,会深究一下里面到底有什么不同。

Part 2:Advance2

在安装这个环境的时候,一定要注意端口的配置,如果出现了ERROR: Pool overlaps with other one on this address space的报错,可以按照 移除 docker 网络:

http://www.zizhixiaoshe.com/article/21.html

这篇文章进行操作,记得先将 docker 给关掉。如果之后还有方法可以避免产生这个报错,例如正确地修改配置文件之类的,我会补充在后面。已经尝试过更改docker-compose.yml文件中的端口不起作用了。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读