古希腊黑客入侵:NeoQUEST-2019在线阶段的结果


总结NeoQUEST-2019在线阶段 :在裁纸器下,我们将讨论任务,查看其进度的统计数据并称赞获奖者!


免责声明:对于那些尚未完成任务但老老实实打算去做的人产品可能包含痕迹的花生和扰流板(并且有这样的机会-在线舞台现场继续工作!)。 如果您没有足够的毅力来自己获取所有密钥,则不建议使用。


谁是最好的?


因此,今年的获奖者是:


第一名-AV1ct0r,952分;
第二名-OLD_NA_MESTE,766分;
第三名-gurgenhopar,获得505分。


孩子们感到荣幸和尊重! 应当指出的是,已经从比赛的第一天起就确定了1-2个位置的获胜者,并且没有向任何人承认他们的位置(除非他们彼此交换了位置)。 但是争夺第三名的斗争非常激烈:有时,“青铜”参与者一天要换几次!


前三名正在等待当之无愧的礼物,而所有至少完成一项任务的人都是NeoQUEST团队的纪念品! (是的,顺便说一句:如果您至少完成了一项任务,但还没有告诉我们您希望如何收到礼物,现在是时候写信给support@neoquest.ru了


揭秘


对于参与者,我们准备了10个任务,这些任务的复杂性和主题各不相同。 我们将详细介绍一些内容,其余内容将很快以单独文章的形式在Habré上发布!


任务编号1-“ Nemean回声”
在此任务中,为参与者提供了所谓的回显服务器,您可以将其连接到特定端口并发送数据。 作为响应,服务器发送与发送给他的相同。 该标志位于服务器上,并且必须仅使用IP地址和端口来获得。


作业2-“柔软如丝”
这个故事是平庸的-非常重要的信息泄漏到网络中。 参与者有两个文件:二进制文件本身(生成泄漏的流量)和该流量的pcap转储。 该标志位于pcap转储中,但采用加密形式,您需要解压缩二进制文件以解密数据并获取标志。


汇报任务1和2将单独进行Habrastatami!


任务3-“与天沟通”
几乎所有参与者都设法建立了天上的联系,这项任务成为了越野能力的领导者。 初始数据-链接到电报机器人。


第一步是添加一个机器人并阅读其描述。 它说,该僵尸程序在其最喜欢的社交网络中“冻结”,除此之外没有其他地方。 对于所有至少以某种方式与他交谈的尝试,该漫游器都将其解雇,并要求他在奥林匹亚写信给他。 我们转到漫游器指示的地址,然后转到“神圣”(否)社交网络中具有授权的页面。


与漫游器通信时,您会收到以下消息:“我没有遵循陌生的链接!”,这可能使我们想到漫游器可能会遵循熟悉的链接。


当您尝试转到授权页面之外的其他地方(例如对于索引页面)时,我们会以一种有趣的方式重定向(实际上,这是在许多站点上完成的,但通常会过滤下一个参数):


登录?下一个=索引


我想到的第一件事:“不是OpenRedirect-a吗?” 是的,但仅适用于社交网络上的授权用户,这是嘲笑和诽谤之神,妈妈 ,因为 不断地坐在里面。 是的,让我们提升我们的网站,作为下一个参数,将链接传递给它,看看机器人是否点击了链接? 我们会在免费主机上迅速筹集任何网站。 我们为机器人服务:


http://213.170.100.214?next=https://your.freeapp.kek/


该漫游器未到达该页面,重定向无效。 这完全取决于过滤器,不幸的是,开发人员会检查下一个参数是否包含http或https子字符串,希望仅在其域内重定向用户。 天真。 我们运送:


http://213.170.100.214?next=//your.freeapp.kek/


III ...机器人去了我们的网站! 但是没有其他事情发生。 僵尸程序进来,看了看然后离开了(在第一天不是这样,因为僵尸程序有一个错误:我们在重定向到攻击者的网站后发送带有会话的cookie,这使任务变得容易一些,第二天,漏洞就在第二天被关闭了)。


但是,如果您复制授权页面,则该漫游器会认为它已登录并登录到您的页面。 我们从社交网络的授权页面复制资源,然后创建网络钓鱼页面。 在服务器上,我们将所有输入的登录名和密码写入日志。 我们将链接发送到漫游器,然后它漫不经心地登录到伪造页面。


图片

我们使用用户名和密码并登录到社交网络,我们获得了密钥。 成功!


对于此作业,我们的参与者之一mr_umnik撰写了文章请在此处阅读


任务编号4-“加密货币”
奇怪的是,“ Crypto Crypto”的第四个任务是致力于密码学! 这不是关于传统的CTF RSA,而是关于加密技术刚刚起步的古代世界的密码。
因此,给出了包含三个文件的存档。 第一个文件的内容包括可读文本和加密行:


用女神赋予你的智慧。
5fw909zcmxsc7sxn1m6m86wxs2xrhrx78r72333mms8rlkg1u41o4dm82n632n2c2s8r17nwx3673c6hnh8n8x3mn7dwrrdswmxm1nc3wc681d16rmdc8cx


问题出现了,我们在谈论什么样的女神? 让我们来看看传说。 唯一提及的是提到一个聪明的女人,戴着头盔,手里拿着矛,在Cerberus徽章上描绘。 这种服装与智慧女神雅典娜相对应,雅典娜立即建议使用辅音仿射密码 。 好的旧蛮力允许解密机密消息:


模量9b6598564ebfb1fd6576cac681c87000bb51
密文2b174f07479751ce84d60f809fa4a14160b482dcc25db6be490d9f1e2efcb29196


那么下一步该怎么办? 也许第二个文件会提供更多信息? 因此其内容:


还会想到哪些其他古代法规? 让我们从一个简单的...开始
35ub2b9slmkjonnqtsokomumqnphkinmrqlqoyz4aayvr4tzv4ax8vv19xrcvb9ayv6fayrx58vr4ayv58v3r4uayvtyz4v9v68v9v4avuayvtyz4v9vayv58v3v5d


想到的第一个密码是凯撒的密码 。 幸运的是,它可以轻松解密! 我们得到:


模数b45327669cb7375d596803165a9497
提示古代希腊人给我们勾股定理,而中国人提出了关于你的中国定理,知道什么


是的 这是一个提示! 此外,提出了中国余数定理 。 该定理指出,某个整数可以从其残差集合中除以成对的互质数来重构。
因此,我们有2个模块以及一个特定的密文。 也许此密文是相同的还原整数? 然后,要找到残留物,只需将密文带入我们已知的两个模块中就足够了。 我们得到:


残基1:C1 =密文mod(模1)= 8b53bd874ebfb1fd6576cac681c86ffc36e7
残留物2:C2 =密文mod(模2)= 14327669cb7348d59680c6595418


接下来要做什么? 让我们注意第三个文件:


我们有两个相互简单的模块,一个是秘密密文,一个关于某些中国技术的提示,一个是……古代斯巴达的印刷。
并不是说这是解决难题的必要储备,但是自从我开始收集提示以来,就很难停止……也许是时候开始解决它了?


一切似乎都已准备就绪……除了古斯巴达的印刷品。 她怎么在这里 也许有这样的密码? 实际上,古代斯巴达的密码也称为Szital密码
让我们尝试解密产生的残差。 结果,我们选择那些片段与图例中给出的标志片段重合的片段。 结果,我们收到了:


M1 = 88b78fb7161c54fcc33eda86bb6c6edf56f7
M2 = 19d64c553b9927657384640168c8


然后,最终标志采用以下形式:


NQ2019 88b78fb7161c54fcc33eda86bb6c6edf56f719d64c553b9927657384640168c8


任务编号5-“苹果字母”
根据传说,我们有以下数据:来自网络摄像头的图片,上面写着“ Robert B. GmbH”。 并且-具有一些奇怪内容的文件。 要获取密钥,您必须填写表单的以下字段:



此外,图例的英雄暗示图片是电话号码的提示,并且文件应以某种方式将我们引向摄像机ID。


我们将首先处理图片。 在Internet上搜索它不会产生任何结果。 但是在Google提出第一个要求后,“ Robert B. GmbH”字样告诉我们,该相机的制造商是德国Bosch公司,其创始人是Robert Bosch。 然后是时候记住在Web表单中“电话”字段附近标记为“(.gr)”的时候了。 嗯,这是在希腊采取的行动,这是合乎逻辑的。 因此,经过深思熟虑,我们转到希腊博世网站 。 那里显示的电话号码( +30 210 5701360 )正是我们需要的!


我们传递到第二个文件。 它具有以下输入类型:


... c6d1eb6f29d739176bdbe79c3d3b504c9d64fecb ... olympic_shot.png


我们不得不猜测,我们有一个最简单格式的磁链 ,其中最常见的BitTorrent网络中使用了哈希! 仍然可以正确恢复磁链格式。


磁铁:?xt = ur:btih:c6d1eb6f29d739176bdbe79c3d3b504c9d64fecb&dn = olympic_shot.png


我们将此链接添加到torrent客户端,下载图片:


图片

乍一看,它没有什么特别的,但是如果仔细观察,您会发现,古希腊学校的一位老师并没有将手指指向空白,而是指向 VKontakte 组的一个非常有效的链接。


在小组中,我们找到了下一部分作业的帖子。 有必要从文档中下载用C编写的文件并查找其中的语法和语义错误。 在文件本身中,您可以观察到古希腊神话的特殊解释。


C源代码
#include "AncientGreece.h" void eat (int who, int *whom) { *whom = 0; } int BirthOfAthena() { int Zeus = 10000; int Metis = 1000; int Athena = Zeus + Metis; eat(Zeus, &Metis); Athena = 0; bool headache = TRUE; int kick = -1000; do { kick++; if (kick = Athena) { Athena = 1000; headache = FALSE; } } while (headache); return Athena; } int ApplesOfTheHesperides() { int labour = 0; int Heracles = 100; int heaven = 100000; int Atlas = 1000; int golden_apples = 8222; /*why?*/ bool trick = TRUE; while(!Heracles_is_here) { Atlas = Atlas + heaven; if (labour == 10) break; labour++; } Heracles_is_here = TRUE; Atlas = Atlas - heaven; Heracles = Heracles + heaven; Atlas = Atlas + golden_apples; trick = TRUE; Atlas = Atlas - golden_apples; Heracles = Heracles - heaven; Atlas = Atlas + heaven; return Heracles + golden_apples } void BirthOfZeus() { int Cronus = 1000; int newborn_gods[] = {1000, 1000, 1000, 1000, 1000, 1000}; int i = 0; for (i = 0; i < 6; i++) { eat(Cronus, &newborn_gods[i]); } int Zeus = newborn_gods[6] + 10000; bool battle = TRUE; bool peace = FALSE; int Thetis = newborn_gods[0] + 1000; int Hera = newborn_gods[2] + 1000; int Hades = newborn_gods[3] + 1000; int Demeter = newborn_gods[1] + 1000; int Poseidon = newborn_gods[4] + 1000; Cronus = 0; battle = FALSE; peace = TRUE; } void main() { BirthOfZeus(); BirthOfAthena(); ApplesOfTheHesperides(); } 

我们找到main()函数,并了解有必要按main()中它们的调用顺序考虑这些函数。此任务中的数字具有其自身的含义:未出生的/已死的人/神由数字0表示,人由数字100表示​​,所有神灵和泰坦-1000雷神宙斯(Zeus the Thunderer)是10,000。


转到BirthOfZeus()函数。 可以合理地假设此功能是关于宙斯的诞生以及他为争取权力而进行的斗争。 因此,在阅读了宙斯诞生的神话之后,我们看了一下代码,发现这种情况下从0到6的循环是一个语义错误-克罗诺斯没有吃掉他的五个孩子,而是只吃了五个孩子。 仍然需要了解如何从中编写密钥:密钥是由带有错误的行号进行编译的。 密钥的第一部分-行号-是60。继续。


下一个错误在第64行等待我们-一切都很简单,超越了数组的界限。


67行的下一个错误。事实是Thetis,即Thetis女神,不是Kronos的女儿和Zeus的姐姐。 相反,应该有赫斯提亚女神。


在BirthOfAthena()函数中,非常小心地等待着错误:在第20行的情况下,写入了一个等号,并且根据C语言标准,需要两个等号进行比较。


最复杂的功能是ApplesOfTheHesperides()。 直接任务的分支实际上会立即出现。 为什么int golden_apples = 8222? 目前尚不清楚。


VKontakte帖子还提供了一些有关此任务的提示:


1)在哪里寻找答案? 在开幕式上,发生在3月1日。


通过简短地查看3月1日的事件(或者您可以通过记住帖子和提及炼金术来立即找到所需的东西),这是D. I. Mendeleev元素周期表的发现。 太好了,继续前进!


2)绘制部分密钥时要使用什么? (请注意文字中拼图的位置)


•是什么将以下三个词结合在一起:记忆力,海洋,惠更斯?
•谁给人们开火?


Google并找到答案:TITAN OF PROMETHES。 如任务中所述,这将有助于编译密钥。 仍有待理解为什么确切是8222。我们寻找有关元素周期表的信息并非徒劳:显然,必须在那里寻找答案。 记住化学反应,我们发现金的序列号= 79。


但是苹果呢? 也许化学也将以某种方式派上用场。 我们发现苹果中钾含量最高。 它的序列号是19。我们接近一个大秘密:为什么选择8222,而不是7919? 当然,旧的凯撒代码很好。 我们将每个元素3右移,得到的值是8222。


还剩下一个小问题:根据周期表对PROMETEI的TITAN进行加密。 这两个元素都在表中,我们得到:2564。值得注意的是,我们进一步查找代码中的错误。


在相同的函数中,第38行应该有一个未初始化的变量,第41行应该是语义错误(这是Hercules的12个专长!),而第52行则没有分号。 结果代码=606467202564384152。这是摄像机的ID。 奇怪,但是在古希腊那只是没有发生。


我们将这两个值输入表格中,向全世界证明我们不是机器人,并且得到了宝藏!


任务编号6:“牛,牛,牛摇摆”
今年的第6个任务非常困难,但很有趣。 我们将在单独的Habrastatya中对其进行详细分析,但是现在,请简单地说:您必须使用缺少某些内容的应用程序来玩Minotaur。


任务编号7-“您更敏锐? 不,很快!”
在此任务(也将是单独的练习!)中,要求参与者处理一个应用程序,该应用程序使用在按下键盘上的按钮时获取的设备加速度计参数的值来加密输入的数据。 为了完成任务,有必要将各种数据输入到应用程序中,并仔细分析产生的偏差。


任务编号8-“神圣的口译员”
我们的普通参与者可能已经学会了这项任务-这项任务从去年开始就一直存在。 然后没有人经历第二部分,我们决定给他第二次机会。 在作业的第一部分中,有我们关于Habré的文章,主要是关于漏洞的搜索。 今年,这项任务的重点不是搜索,而是漏洞的利用-为此,我们将再次单独列出一个Habrastaty。


底线是命令解释程序正在服务器的网络端口上运行。 程序二进制文件附加在任务上。 该服务器正在运行Windows Server 2016,并且其中包括CFG保护机制。 关于密钥的所有已知信息是,它由70个字符组成,位于服务器上可执行文件旁边的key.txt文件中。


任务№9-“盒子里的游戏”
在此分配中,我们有两个服务器。 您可以将RAR存档发送到1号服务器,该文件在此处解压缩,并且可以帮助将密钥隐藏在2号服务器上。


任务编号10-“不要打,奥德修斯”
这项任务是最艰巨的任务之一-只有一位参与者精通了这项任务。 初始数据-使用网络基础结构存档,所有必需的文件均已加密。 而且,如果它是加密的,则只有一种方法-解密!


汇报任务9和10也将单独进行Habrastatami!


英国科学家已经建立


今年的小统计:


  • 注册参与者为1014人。
  • 已完成任务数-10/10
  • 至少完成一项任务的参与者人数为33。

每个任务的有效键数



每天比赛的有效密钥数



在NeoQUEST-2019的整个在线阶段,共收到了94个密钥。



接下来是什么?


然后-6月26日在圣彼得堡举行的“对抗”,这将是我们比赛的决赛! 我们正在等待所有最好的黑客,以确保您真的是最好的! 对于那些不来的人,我们会这样想...



夏季活动的网站上关注新闻!

Source: https://habr.com/ru/post/zh-CN446286/


All Articles