SSRF漏洞学习实验环境推荐及过程记录
这一关为了避免和上一关一样,代码中没有自己实现IP解析的功能,而是选择调用 python2.7 自带的库函数解析 IP 地址,具体代码如下:
上面的代码用了 python2.7 中的 urlparse 模块来解析 url,该模块能够解析多个协议。获取了 url 中 host 参数之后,再对域进行判断。 跟第一个环境一样,我们先用http://secret.corp来测试。 URL 解析器分析出这部分内容是访问已被限制的域,下面要介绍一个新的知识点了,我们先来测试一下它能不能起作用。在测试点输入http://google.com# @secret.corp。 绕过这个到底是基于什么原理呢?让我们再次回顾一下 url 的结构。
原来http://google.com# @secret.corp中@后面的secret.corp是真正要访问的 host,前面的google.com#绕过了 urlparse 的解析。感觉很神奇而且让人有点摸不着头脑,了解一下原理会好很多。SSRF 漏洞产生的根本原因是 url 中有空格(CRLF 注入),这让 python 中的两个模块解析 url 的时候起了冲突,urlparse 认为 host 是 google.com,而 urllib 则认为真正的 host 是 secret.corp 并且直接发出了请求。 为了进一步阐述上面漏洞利用的原理,用 python 写几行代码来验证一下,如果有点混乱,可以再看看上面的源代码,用 urlparse 解析 URL 进行判断是先于调用 urllib 发出请求的。下图为 urlparse 解析的结果,在 python2.7 和 python3.5 两个版本中都是一致的。 为了能够进一步验证 urllib 能否正确接收到,在 VPS 上输入命令nc -lvvv 9444监听本地 9444 端口,再按照下面命令通过 python 发送请求:
之后在开启监听端口的服务器可以接收到如下的回显: 验证完毕。 advanced3 advanced3 感觉作者代码不完整,感觉像在测试阶段,尝试过修改源代码,但是实际情况并不如我所想。所以这里就不丰富这部分内容了,如果之后作者对这部分题目有修改,我会对这部分内容进行补充。 ctf exp 下面是 ctf 题目获取 flag 的方法,因为我不是亚马逊的服务器,所以获取不到 ctf 最后一题的 flag,如果想尝试的,可以看看这篇文章: https://medium.com/poka-techblog/server-side-request-forgery-ssrf-attacks-part-1-the-basics-a42ba5cc244a 最后这个题目大家可以作为练习,到最后才看 payload.....懒人就不重复说前面的内容了,来试试自己掌握了没有吧!
(编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |