- Web漏洞搜索
- (美)彼得·亚沃斯基
- 773字
- 2021-11-05 10:20:06
5.1 通过字符编码进行Coinbase评论注入攻击
难度:低
URL:https://coinbase.com/apps/
报告位置:https://hackerone.com/reports/104543/
报告日期:2015年12月10日
支付奖金:200美元
有些网站会过滤HTML标签以抵御HTML注入攻击,然而理解了HTML实体字符是如何工作的,就有可能绕过这种防御。对于该漏洞,报告者指出当Coinbase网站呈现给用户时会解码HTML实体。在HTML中,有些字符是保留的,因为它们具有特殊的用途(例如,<>表示HTML标签的开始和结束),而未保留字符是没有特殊含义的正常字符(例如,字母表中的字母)。保留字符可以采用它们的HTML实体名称来呈现,例如,字符>应该被网站呈现为>,以避免注入漏洞攻击。但是未保留字符也可以用它的HTML编码来呈现,例如,字母a可以呈现为a。
对于该漏洞来说,漏洞报告者先在用于显示给用户的文本输入域中输入纯HTML文本,例如:
Coinbase会过滤该HTML并只显示纯文本,因此提交的文本将会以正常形式显示出来。显示时看起来就像是只输入了纯文本而把HTML标签都过滤掉了。但是,如果用户以HTML编码的形式提交文本,就像这样:
Coinbase将不会过滤HTML标签,并且将把该字符串解码为HTML,这将会导致网站呈现出提交的<h1>标签:
使用HTML编码方式,提交该报告的黑客显示了他是如何使得Coinbase呈现用户名和口令的输入域的:
这个HTML的页面效果看起来如下:
呈现的结果看起来像是要求输入用户名和口令进行登录的地方。恶意的攻击者可以使用该漏洞欺骗用户提交一个真正的表单到恶意网站,从而获取他的登录凭证。然而,该漏洞依赖于被骗用户相信这个登录页面是真的,并且提交了他们的登录信息,但这一点是不能保证的。因此,Coinbase支付了一个相对于不需要用户交互的漏洞更低的奖金给该漏洞报告者。
要点
当你测试一个网站时,检查一下它是怎样处理不同类型的输入的,包括纯文本和编码文本。关注接收URL编码值(例如%2F)并呈现解码后的值(本例中为/)的网站。
在https://gchq.github.io/CyberChef/中,你可以找到编码工具的百宝箱。使用这些工具并且尝试它支持的不同编码类型,将对你的漏洞探索之旅很有帮助。