漏洞简介
首先,我抓取并手动执行了该应用程序上的所有用户操作。之后,我通过burp检查了http历史记录中的所有的请求,坦率的说我当时想要挖掘url重定向漏洞。所以,我通过Burp搜索了url=所有可能的参数,并最终发现了一个如下所示的网址:
https://example.com/viewimage/?url=AWS图像位置(该图像存储在AWS,所以需要从这里加载)
实际上,这个端点就是用来加载我长传到网站上的图像的,而我的图像是存储在aws存储桶中的。很明显,既然它要加载内容,那为什么不从其他域加载内容呢?试试RFI如何?
下面是我所采取的具体步骤:
尝试XSS(可惜失败了)
首先,我尝试挖掘一个XSS漏洞。为此,我参阅了关于挖掘XSS漏洞的文章。我的做法就是在网址中添加http://brutelogic.com.br/poc.svg。 所以,最终制作出来的网址变成https://example.com/viewimage/?url=http://brutelogic.com.br/poc.svg。 之后,我访问了该网址,但它并没有加载内容,而是下载了一个简单的文本文件,不过该文件内并没有任何内容。天空彩
尝试读取本地文件(成功了)
接下来,我尝试通过URL模式来读取内部数据并让服务器执行某些操作(如file:///、dict://、ftp://、gopher://等)。所以,最终制作出来的网址为https://example.com/viewimage/?url=file:///etc/passwd。
然后,又下载了一个文本文件:
当我检查下载的文本文件时,对于其中的内容倍感惊讶:这分明就是etc/passwd文件的内容。
现在,既然发现这个网站会加载来自AWS的图像,那么为什么不设法提取内部的AWS元数据呢?
读取AWS EC2元数据
为了对url参数进行相应的修改,需要查看当前运行实例中所有类别的实例元数据,为此,可以借助于下列URI:
http://169.254.169.254/latest/meta-data
所以,最终精心设计的URL变为https://example.com/viewimage/?url=Location。
之后不出所料,它再次下载了一个文本文件,该文件内容如下所示:
接下来,我们将尝试读取更为机密的信息,具体方法如下所示:
http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbeanorastalk-ec2-role
这样,我们就能读取秘密访问密钥、令牌等机密信息了。之后,将这些信息导出后,就可以通过AWS客户端访问……这个,你们懂的。
简单来说,利用这里的安全权限,我们就可以通过SSRF漏洞实现RCE了。
获取私有访问秘钥等登陆凭证后进一步渗透测试的详细介绍,请参阅https://www.notsosecure.com/exploiting-ssrf-in-aws-elastic-beanstalk/。
另外,该漏洞我已经提交了相关部门,并且现在已经得到了修复,同时,我还收到了4位数的奖金。希望本文对大家有所帮助!