我是怎么黑进Sizmek的?(亚马逊的一家公司)

2020-05-21 07:37:09

在这篇文章中,我将告诉你我的故事,开始于Sizmek(苏格兰亚马逊开发中心)的一个工作机会,最终却成为了Sizmek的黑客。我将首先详细解释我是如何以及为什么要黑掉Sizmek的。它将从我失败的尝试开始,所以请耐心等待。如果你不是那个耐心的人,在这页上搜索500。

好的,我首先查看了他们的网站sizmek.com,Wappalyzer向我提供了相当长的服务披露信息:

后台由Ubuntu、Nginx和MySQL三个堆栈组成。那是一个WordPress网站。所以我打开wp-login.php,试图在这里进行字典攻击,但是一个插件阻止了我这样做,我忘了是哪个插件。他们后来隐藏了这个页面,因为我说你可以使用像WPS这样的插件来隐藏它,在我给他们的报告中隐藏登录。

然后我点击导航栏中的登录链接。显然,这些人以前被称为MediaMind。Login.aspx meh..,他们的后端在这里看起来像.NET,你至少可以让它不那么明显。不过,瓦帕利泽无论如何都会告诉我细节:

第二个链接是Sizmek Ad Suite。“套房”就好像这里有什么东西是奢侈品。不管怎样,瓦帕利泽:

看起来,Sizmek的技术堆栈相当混乱。所以我想也许我可以大红大紫。

顺便说一句,您不能在本地机器上轻松地使用DIGG或其他方法进行子域查找,因为您要查询的名称服务器必须配置为允许来自您的IP的AXFR请求。因此,您需要一些优雅的数据中心IP。我使用Pentest-Tools.com进行这些扫描。

根据我的shell历史记录,我执行了以下nmap扫描和不成功的ssh登录尝试:

9114 digg sizmek.com 9115 nmap-F 198.199.123.66 9116 ssh [email protected] 9117 ssh [email protected] 9118 ssh [email protected] 9119 ssh [email protected] 9120 ssh [email protected] 9121 ssh [email protected] 9122 ssh [email protected] 9122 ssh [email protected] 9122。198.199.123.669126nmap-p1-65535-sv-ss-t4 198.199.123.669127 sudo nmap-p1-65535-sv-ss-t4 198.199.123.669128 host-l yes blaster.com9129digEyeblaster9130digeblaster.com9131 digeblaster.com [email protected] yes blaster.com axf9133 host-l sizmek.com9134 digsizmek.com。.206 9138 nmap-F 104.16.53.111 9139 nmap-F 54.237.40.242 9140 nmap-F 52.200.78.174 9141 nmap-F 206.16.132.28 9142 nmap-F 206.16.132.45 9143 nmap-F 206.16.132.59 9144 nmap-F 52.97.133.200 9145 nmap-F 62.128.59.21 9146 nmap-F 64.94.191.173 9147 nmap-。14.222 9149 NMAP-F 82.80.14.250 9152 NMAP-F 104.19.154.83 9153 NMAP-F 104.72.166.160 9154 NMAP-F 206.16.132.28 9155 NMAP-F 206.16.132.41 9156 NMAP-F 206.16.132.59 9157 NMAP-F 216.58.210.211 9158 NMAP-F 62.128.59.21。

显然,Eyes blaster.com也是他们的。但由于我在Pentest-Tools.com上达到了免费的2个扫描配额,所以找不到yeblaster.com的子域:)。

无论如何,我确实发现了一个有趣的发现,IP为62.128.59.21的计算机具有Microsoft-DS SMB文件共享端口445处于打开状态:

$NMAP-F 62.128.59.21在2020-05-20 22:21+03启动NMAP 7.60(https://nmap.org)panecovps01.spd.co.il(62.128.59.21)主机已启动(0.12s延迟)的NMAP扫描报告。未显示:96个过滤端口端口状态服务80/TCP open http 135/tcp open msrpc 443/tcp open https 445/tcp open microsoft-ds。

(在我做所有这些工作的时候,msrpc并没有像我记忆中那样开放,所以我没有覆盖那个端口)。

因此,我尝试了该端口可用的所有已知SMB漏洞,但没有成功。

$NMAP-F 82.80.14.250在2020-05-20 22:17+03启动NMAP 7.60(https://nmap.org)bzq-80-14-250.red.bezeqint.net(82.80.14.250)主机的NMAP扫描报告启动(0.095s延迟)。未显示:97个过滤端口端口状态服务21/TCP打开ftp 80/TCP打开http 443/TCP关闭https。

同样,根据我的shell历史记录,我在以下计算机上执行了完整的1-65535端口范围nmap扫描:

9271sudo nmap-v-p 1-65535-sv-ST-T4 62.128.59.21 9272 sudo nmap-v-p 1-65535-SV-ST-T4 82.80.14.250 9273 sudo nmap-v-p 1-65535-sv-ST-T4 52.200.78.174 9274 sudo nmap-v-p 1-65535-SV-ST-T4 54.237.40.242 9277 sudo nmap-v。

(我不记得为什么选择这些机器进行全扫描等待。可能专注于辅助机器)。

后来,我将注意力转向他们的API,并开始阅读他们的API文档,希望能找到一些有用的东西。我意识到如果没有API密钥,我将无法审计他们的端点,所以我只关注登录端点。我查看了身份验证页面,发现有三个不同的登录端点:

cURL-X POST\https://api.sizmek.com/rest/login/login\-H';缓存控制:无缓存';\-H';内容类型:多部分/表单-数据;boundary=-WebKitFormBoundary7MA4YWxkTrZu0gW';\-H';邮递员-令牌:9cfe13ad-2fa3-2124-1b6e-e4cbb676a483';\-F用户名=管理员。

它看起来也像debug=true,因为我可以看到堆栈跟踪。尽管Java开发人员编写的代码很糟糕,但他们通常并不关心堆栈跟踪是否公开。不管怎么说,我一拿到500我就意识到这个终端很臭。

cURL-X POST\https://api.sizmek.com/rest/login/login\-H';接受:应用程序/json';\-H';缓存控制:无缓存';\-H';邮递员-令牌:88cd04ad-99c5-7a0f-6e85-02d5b4063203';\-d';{";用户名";:";admin";,"。ASD";,}';

(尽管我向他们报告了这500个回复,但使用相同的屏幕截图,他们没有解决这个问题。显然,他们并不认为500在服务器端是错误的)。

后来,我决定尝试不同的用户名。对于管理员,我得到的答复是:

显然,他们暴露了一些信息,比如用户的凭据是否过期。所以我认为他们可能暴露了更多,并决定编写一个简单的Python脚本来进行多线程字典攻击:

我在这里所做的只是尝试使用论坛名称-top10000.txt文件中的用户名登录,如果响应不包含任何错误或者错误不同于“具有指定用户名的用户不存在”,则记录它们。这里需要注意的是,我将用户名拆分成CPU的核心线程数,在我的例子中是8,因此我不必等待这么长时间。您甚至可以增加线程数并超过物理或逻辑核心计数,因为线程将等待远程服务器的响应。

无论如何,在编写这个Python脚本的过程中,我使用一个相对较小的字典进行了尝试,并使用同一字典运行了几次。喜欢;

02:{';error';:';令牌无效';}演示:{';error';:';令牌无效';}合作伙伴:{';error';:';令牌无效';}压缩:{';error';:';令牌无效';}管理员:{';error';:'。凭据过期,A8TooKGXYaBpYz2f';}连接:{';错误';:';令牌无效';}迈阿密:{';错误';:';令牌无效';}米奇:{';错误';:';令牌无效';}代销商:{';错误';:';令牌无效。:';令牌无效';}内部:{';错误';:';令牌无效';}MW:{';错误';:';令牌无效';}利马:{';错误';:';令牌无效';}探戈:{';错误';:';令牌无效';}TD:{&#。错误';:';令牌无效';}bw:{';错误';:';令牌无效';}CD:{';错误';:';用户[CD]锁定用户帐户';}之前的最后一次登录尝试。

合作伙伴:{';错误';:';令牌无效';}复杂:{';错误';:';令牌无效';}管理员:{';错误';:';凭据过期,KgS1hrBsQ5lI_ry5';}连接:{';错误';:';令牌无效';}迈阿密。令牌无效';}mickey:{';error';:';令牌无效';}附属机构:{';error';:';}附属机构:{';error';:';令牌无效';}内部:{';error';:';令牌无效';}vu:{';}error。:';令牌无效';}strong hold:{';error';:';令牌无效';}Lima:{';error';:';令牌无效';}探戈:{';error';:';令牌无效';}td:{';error';:';令牌无效';}bw:{。错误';:';令牌无效';}规则:{';错误';:';令牌无效';}CD:{';错误';:';用户[CD]帐户已锁定';}。

瞧2,正如您所看到的,我意外地使用用户名cd锁定了一个用户:)。

此外,对于相同的用户名,端点有时返回令牌无效,而有时返回具有指定用户名的用户不存在,我真的想知道爱丁堡的团队是如何实现这种随机行为的。

后来,我决定锁定更多的用户,看看我能走多远。以下是我锁定的用户列表,按时间顺序排列:

CD:{';错误';:';用户[CD]帐户已锁定';}合作伙伴:{';错误';:';用户[合作伙伴]帐户已锁定';}代销商:{';错误';}代销商:{';错误';:';用户[代销商]帐户已锁定';}。错误';:';用户[Compras]帐户已锁定';}内部:{';错误';:';用户[内部]帐户已锁定';}连接:{';错误';:';用户[Connect]帐户已锁定';}迈阿密:{';错误';:';用户[迈阿密]帐户已锁定';}米奇:{';}。:';用户[Mickey]帐户已锁定';}利马:{';错误';:';用户[LIMA]帐户已锁定';}探戈:{';错误';:';用户[探戈]帐户已锁定';}TD:{';错误';:';用户[TD]帐户已锁定';}BW:{';错误&##。用户[BW]帐户已锁定';}。

(我告诉他们,对于我锁定的账户,我很抱歉。这类事件是在黑箱审计时发生的,而且是一起小规模的事件。)。

他们公开关于用户名是否存在于数据库中的信息。

尝试N次失败后锁定帐户是一个愚蠢的想法。通常,C#和Java开发人员倾向于认为这是个好主意,但实际上并非如此。您应该暂时禁止该IP地址,而不是锁定该帐户。

即使我没有API密钥,他们服务器端实现上的逻辑也会将我的请求视为登录尝试。因此,这些账户正在被锁定。

您的API(至少是登录端点)既没有速率限制,也没有限制。

此外,用户要解锁他们的帐户也不是一种简单的方法,而不是联系支持人员。但正如我所说,本来就不应该有所谓“锁定账户”的东西。

后来,我决定对https://api.sizmek.com/rest/login/login/端点运行更大的字典攻击。我找到了300多个账户。我也可以很容易地锁定所有这些账户,但我当然没有这么做。

人类进行多线程字典攻击或随机生成用户名是没有限制的,最终攻击者会找到他们数据库中的大多数用户帐户并将其锁定,如果他或她想这样做的话。这实际上是带有额外步骤的拒绝服务(DoS)攻击。

注:在我的报告之后,截至2020年5月19日,我可以确认他们修复了这个“查找并锁定用户帐户漏洞”。

注意:您将在本文末尾找到包含用户帐户列表的粘贴。

2020年2月18日,一名人力资源招聘人员通过Stack Overflow向我伸出援手,要求我在苏格兰亚马逊开发中心担任软件工程师一职。我的个人资料不是很耀眼,但它是有意义的。我觉得这对我来说是“千载难逢的机会”。

2020年2月24日,我做了~2个小时的在线评估,并不是特别难。在第一道题中,我只错过了一次隐藏的测验。我错过了第二个问题中所有隐藏的测试,但描述含糊不清。

2020年3月11日,我得知我通过了在线评估,电话面试定于2020年4月27日上午11:00(UTC+1)进行。

与此同时(3月25日),另一位来自AWS都柏林的人力资源招聘人员通过LinkedIn联系我寻找工作机会,但我不得不拒绝了他,因为我正在为亚马逊进行另一个招聘过程。

这一天终于到来了,4月27日,我们电话采访了一个叫安德鲁·罗斯的人。他问了我一些经典的问题,比如“你为什么申请亚马逊?”“告诉我你到目前为止做过的最雄心勃勃的项目。”我告诉他,我喜欢亚马逊作为一家公司的文化和原则,我是杰弗里·贝佐斯的超级粉丝。我还告诉他,我在GitHub上相当活跃,并提到我已经创建了一个广为人知的开源虚拟助手,名为Dragonfire,以及一种名为Chaos的新编程语言。他大吃一惊。所以很明显,他甚至没有看我的GitHub个人资料或简历,因为那些项目都列在那里。他还问了我一些关于优化内存词典的脑筋急转弯问题。尽管困难重重,这次面试对我来说还是不错的。因为他的回答是“好”对我的大部分答案。

4月27日晚上,我收到招聘协调员的电子邮件,得知我被拒绝了。今年3月,我有两次在亚马逊工作的机会,现在我没有机会了。我变成了一艘沉船,哭了整整两天。因为,在我的一生中,我一直想为一家大型科技公司工作,现在这个梦想破灭了。

我接受了我的命运,决定像往常一样继续我的生活。但是我的大脑不能接受这个结果。我直截了当地查看了安德鲁·罗斯(Andrew Rose)的GitHub个人资料,一周来每天都是如此。当我看他的资料时,我意识到一些事情,我被歧视了。顺便说一下,我不是一个急躁的利伯塔人,而是一个来自土耳其的倒霉家伙。

如果你沿着这个链接,它会把你带到一家书店https://matthiasmedia.com.au/,它是澳大利亚的一家福音派出版商。

请看这本书:https://matthiasmedia.com.au/products/where-to-start-with-islam这本书出现在马蒂亚斯媒体的主页上,它清楚地表明,阅读这些出版物的人应该与穆斯林有很大的问题。这显然是极右翼的观点。

我的假设是,安德鲁·罗斯,看了我的简历,看到我是土耳其人,就因为我是土耳其人,他认为我是穆斯林,歧视我,所以我最终被拒绝了。首先,我甚至不是穆斯林,我是无神论者。我不觉得我必须接受这个命运,因为我出生在土耳其。

总而言之,安德鲁·罗斯没有客观地评判我,他甚至没有因为我的种族和宗教而考虑我作为候选人(这里有一些错误的假设),这与亚马逊的多样性和包容性文化背道而驰,这是字面上的公司原则。

我是说,做个福音派可能没问题。我和福音派基督徒没有任何问题。但是把这个链接放到你的GitHub个人资料上又有什么意义呢?它不是应该是您个人网站的链接吗?这家伙显然把电脑编程和宗教混为一谈。

意识到这一点后,我于5月6日通过LinkedIn联系到了Sizmek的首席执行官,写下了我对种族和宗教歧视的抱怨,并要求再给我一次机会。他说,他们会重新考虑情况,并将我的投诉转达给他的同事。我的新希望,…

5月7日,另一位人力资源招聘人员(这一次来自IMDb)找到我说,他们认为我没有理由再给我一次机会。

我想,如果安德鲁·罗斯没有歧视我,那是什么原因呢?我的英语口语能力不是班上最好的,我知道,但我相信我比大多数非母语的人说得更好。所以这不是我被拒绝的唯一原因。他断定我的计算机科学知识不足以在亚马逊公司工作。

我怒不可遏,我想证明他们是错的,于是决定黑了西兹梅克。

我已经将我在登录端点上发现的严重漏洞的调查结果发送给了在Sizmek工作的多个人。

我等你的回音已经等了11天了。但他们却选择让我变成幽灵,这并不酷,他们同时修复了错误(至少是导致账户锁定的错误)。

通常,这个行业中大多数成熟的公司都有某种形式的漏洞赏金计划。因此,至少我会期待来自Sizmek的奖励,比如几百美元,因为我报告了一个漏洞,或者至少是一封感谢信。或者,他们可以直接雇用我。这些都不是他们做的,因此这个媒介故事就发生了。

注意:我甚至没有使用任何社会工程方法。我可以很容易地以客户端的身份接触并获得API密钥。有了API密钥,我将能够更深入地挖掘。