哈Ha! 今天,我将告诉您,Valve为什么会在漏洞奖励计划中支付最大的赏金。 欢迎来到猫!

1. SQL注入
partner.steampowered.com服务旨在接收Steam合作伙伴的财务信息。 在销售报告页面上,绘制了带有按钮的图形,这些按钮可更改统计信息的显示时间。 它们在绿色矩形中:

统计信息下载请求如下所示:
其中“ UA”是国家/地区代码。好了,现在该是报价了!
让我们尝试“ UA'”:

统计信息未返回,这是可以预期的。
现在为“ UA””:

统计信息又回来了,看起来像是一次注入!
怎么了假设数据库指令如下所示:
SELECT * FROM countries WHERE country_code = `UA`;
如果发送UA',则数据库指令将为:
SELECT * FROM countries WHERE country_code = `UA``;
注意到额外的报价了吗? 这意味着该指令无效。
根据SQL语法,下面的查询是完全有效的(没有多余的引号):
SELECT * FROM countries WHERE country_code = `UA```;
请注意,我们正在处理
countryFilter []数组。 我假设如果我们在查询中多次复制
countryFilter []参数,那么我们发送的所有值将以这种方式组合在SQL查询中:
'value1', 'value2', 'value3'
我们检查并确保:

实际上,我们从数据库中请求了三个国家的统计信息:
`UA`, `,` ,`RU`
语法正确-统计信息已返回:)
Web应用程序防火墙绕过Steam服务器躲在Akamai WAF的后面。 这种可耻的做法是将木棍插入好黑客(并非如此)中。 但是,我可以通过将数组的值组合到一个查询(如上所述)中并进行注释来克服它。 首先,确保后者可用:
?countryFilter[]=UA`/*&countryFilter[]=*/,`RU
该请求有效,因此我们的分类中有任何评论。
我们有几个语法选项,用于测试有效负载的本地数据库,注释字符和所有编码的无限数量的引号,以及python上的自写脚本,所有数据库的文档,有关如何绕过防火墙的说明,维基百科和antichest。 这并不是注射促进的必要储备,但是由于它开始破坏数据库,因此很难停止...
WAF在遇到请求中的功能时会阻止该请求。 您知道
DB_NAME / ** /
()是有效的函数调用吗? 防火墙也知道并阻止。 但是,借助此功能,我们可以将函数调用分为两个参数!
?countryFilter[]=UA',DB_NAME(),'RU
我们
仍然以
DB_NAME / * * /
()发送了一个请求
-WAF什么都不懂,但是数据库成功地处理了这样一条指令。
从数据库中检索值因此,获取DB_NAME()值的长度的示例:
https://partner.steampowered.com/report_xml.php?query=QuerySteamHistory&countryFilter[]=',(SELECTCASEWHEN(len(DB_NAME())=1)THEN'UA'ELSE'qwerty'END),'
在SQL中:
SELECT CASE WHEN (len(DB_NAME())= 1) THEN 'UA' ELSE 'qwerty' END
好吧,人类:
DB_NAME() "1", “UA”, “qwerty”.
这意味着如果比较正确,那么作为回报,我们将获得国家“ UA”的统计信息。 不难猜测,从1到无穷大的数值,我们迟早会找到合适的数值。
同样,您可以遍历文本值:
DB_NAME() “a”, "UA", "qwerty".
通常,“子字符串”功能用于获取第N个字符,但WAF固执地阻止了该字符。 在这里,组合可以解救:
right(left(system_user,N),1)
如何运作? 我们得到system_user值的N个字符,从中取最后一个字符。
想象一下system_user =“ steam”。 这是获取第三个字符的样子:
left(system_user,3) = ste right(“ste”,1) = e
通过一个简单的脚本,该过程是自动化的,我得到了主机名,system_user,版本和所有数据库的名称。 这些信息足以证明关键性(后者甚至是多余的,但很有趣)。
5小时后,该漏洞已修复,但8小时后将其设置为“已分类”状态,该死,对我来说,这是3个小时,我的大脑很难度过从拒绝到接受的整个阶段。
偏执狂的解释由于该漏洞未被指定为接受,因此我认为该线尚未到达我的报告。 但是他们修复了该错误,这意味着他们可以在我之前注册它。
2.获取任何游戏的所有键
在Steam合作伙伴界面中,提供了用于生成游戏密钥的功能。
您可以使用以下请求下载生成的密钥集:
https://partner.steamgames.com/partnercdkeys/assignkeys/ &sessionid=xxxxxxxxxxxxx&keyid=123456&sourceAccount=xxxxxxxxx&appid=xxxxxx&keycount=1&generateButton=Download
在此请求中,
keyid参数是密钥集的ID,
keycount是必须从该集合中获取的密钥数。
当然,我的手立即伸出手来驱动不同的
keyid ,但是作为响应,我遇到了一个错误:“
无法生成CD密钥:没有为用户分配。 ”。 事实证明,并非一切都如此简单,Steam检查我是否拥有请求的键集。 我如何解决这个测试的? 注意...
keycount=0
生成了带有游戏门户2的36,000键的文件。哇。
只有一组钥匙。 而目前的所有布景超过430,000。 因此,通过对
keyid值进行排序
, 我是一个潜在的攻击者,可以下载Steam游戏开发人员曾经生成的所有密钥。
结论
- 顶级公司提供的昂贵的WAF系统远不能保证Web应用程序的安全性。
- 如果您是一个Bug猎人,请尝试尽可能深入。 用户访问界面的次数越少,在该界面中发现漏洞的可能性就越大。
- 开发人员和企业主,没有绝对安全的应用程序! 但是你坚持。 心情愉快!