告诉你什么是挖洞最清奇的脑回路

技术 作者:i春秋 2017-08-21 08:47:55
黑客游戏一直备受ctf玩家和新手安全研究员青睐,正如标题所说,玩这个需要猥琐发育和清奇的脑回路。本文将手把手教你如何搞定最基本的两个挑战,附件可下载,读者可以下载程序后和我们一起体验。难度系数:两颗星
AirPlan Task1 And Task2 本文由prison翻译整理,原文地址:https://hshrzd.wordpress.com/201 … enge-tasks-1-and-2/
黑客游戏一直备受ctf玩家和新手安全研究员青睐,正如标题所说,玩这个需要猥琐发育和清奇的脑回路。本文将手把手教你如何搞定最基本的两个挑战,附件可下载,读者可以下载程序后和我们一起体验。难度系数:两颗星
废话不多说,直接正题,Airplanechallenge是一个在线挑战平台,URL: http://10100110110100001100001011000100110000101101011.com/ 这里是其中两个任务的writeup Task1http://10100110110100001100001011000100110000101101011.com/Airplane/1_the_best_researcher.php 密码是:“Challenge 现在我们运行这个项目,它只是闪退后啥也没发生,留我一人独自懵逼。。。那也没办法啊,出题方这么草率我还是要严谨一点的嘛,所以我把它拖到OllyDbg打开。开始从这一堆东西里分析这个程序,我注意到一些很有意思的东西, %PROGRAMFILES%\\meseekerinc 这玩意儿看起来像是代码内部引用的自定义文件,咱来瞅一眼它是怎么用的: 实际上,程序正在搜索这个文件并且检查它的属性,如果能对得上号就会输出点东西。我这么机智当然猜到这可能是密码啦。 现在我们有两种方法可选—要么创建具有适当属性的文件,要么在执行过程中改变它。这样一来无论如何它都会打印出密码。我选择第二种方法—在每个条件上设置一个断点,当轮到它时,更改标志以模拟出所需要满足的条件。 你看,密码自己就出来了。。。 完事!下一个,还!有!谁!   Task 2http://10100110110100001100001011000100110000101101011.com/Airplane/2_should_work.php 镜像:https://drive.google.com/file/d/0Bzb5kQFOXkiSS3RrNkx4NlV0d0E/view?usp=drive_web 密码还是”Challlenge 和第一个不一样,这回终于不闪退了。。。这次提示输入密码 我就随便输点啥吧,看看它能有几幅面孔。。 蓝后…粗线了“GettingSchwifty.bat”这个文件并且尝试加载它,结果证明这个不是一个有效的PE,所以发生了错误。 我们输入的密码似乎是用来解密这个PE文件的(名字。bat文件只是一种伪装)。让我们看一下这个文件: 如你所见它在内部被加密了。这让我觉得它可能是XOR加密的。因此,我试着用一些有效的PE文件来XOR解密,看看它是否显示了密码(我使用了python脚本:https://github.com/hasherezade/crypto_utils/blob/master/dexor.py):
./dexor.py --file GettingSchwifty.bat --keyfile Second.exe
我们从编辑器看这个输出,返现开头这些重复的东东 这个可能就是我们需要的密码,所以我们继续试试。我复制了一些片段,保存为一个key.bin文件。然后又试了一次
./dexor.py --file GettingSchwifty.bat --keyfile key.bin
这次厉害了,输出了一个有效的PE文件:一个叫做Piper.dll的DLL文件 因为我已经有了DLL文件,所以我不关心什么可以解密出它的密码。我在调试器中运行了主要的可执行文件(Second.exe) 在gettingschwigett之前设置断点。用我的版本替换已加载的那个bat文件。 当在LoadLibraryA中出现断点时。我删除掉那些被加载的文件。在它上复制我的解密DLL。 它加载得非常成功,所以现在我们可以进入DLL内部的函数了: 然而还没有结束,在我们将flag打印出来之前,还需要再输入一个密码。应用程序在pipe上提出一个” flumbus_channel”问题,而我们需要解决这个问题。 经过一段简短的分析,我得出结论。蛮干并不是解决之道,所以我们必须用另一种方法来解决它。然后我去Google逛了一圈,发现有人问了一个很有意思的问题:什么比冷更冷? (source: http://www.urbandictionary.com/define.php?term=Cooler%20Than%20Being%20Cool) 回答者说:“冰冷!”(这是在玩脑筋急转弯吗。。。)很明显不是吗?(原谅我感受不到哪里明显了..),而且这不就是程序通过让我们输入和检查想要我们说的吗?我想要一个快速的解决方案,而不是编写一个可以在Pipe上进行讨论的客户端,我只需要在内存中编辑缓冲区。让我们在对ReadFile的调用中设置断点,并在转储文件中跟踪缓冲区: ReadFile返回后,我们可以编辑这个缓冲区,以模拟正在读取的输入: 密码被转换成大写,然后它被用来解密输出缓冲区,对解密缓冲区的校验并与硬编码的缓冲区进行了比较:0x55B8B000 看起来密码”ICE COOL”(就是上文中作者逛Google时看到的一个问答。。然后这货玩成了哲学问题,这清奇的脑回路在下实在佩服。。)是正确的,校验和匹配!输出缓冲区被解密,并在转储中跟踪它,我们已经看到了第二个标志:   然而,坑还不止这些—有一些调试检查,一不小心就会导致程序异常退出: 我只是补全了上面的条件,所以不能采取反调试措施: 然后,喜闻乐见的密码就跳出来啦~~

关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接