zoukankan      html  css  js  c++  java
  • 告诉你什么是挖洞最清奇的脑回路

    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

    1.png

    现在我们运行这个项目,它只是闪退后啥也没发生,留我一人独自懵逼。。。那也没办法啊,出题方这么草率我还是要严谨一点的嘛,所以我把它拖到OllyDbg打开。开始从这一堆东西里分析这个程序,我注意到一些很有意思的东西,

    2.png

    %PROGRAMFILES%\meseekerinc

    这玩意儿看起来像是代码内部引用的自定义文件,咱来瞅一眼它是怎么用的:

    3.png

    实际上,程序正在搜索这个文件并且检查它的属性,如果能对得上号就会输出点东西。我这么机智当然猜到这可能是密码啦。

    现在我们有两种方法可选—要么创建具有适当属性的文件,要么在执行过程中改变它。这样一来无论如何它都会打印出密码。我选择第二种方法—在每个条件上设置一个断点,当轮到它时,更改标志以模拟出所需要满足的条件。

    4.png

    你看,密码自己就出来了。。。

    完事!下一个,还!有!谁!

    5.png

    6.png

    Task 2http://10100110110100001100001011000100110000101101011.com/Airplane/2_should_work.php

    镜像:https://drive.google.com/file/d/0Bzb5kQFOXkiSS3RrNkx4NlV0d0E/view?usp=drive_web

    密码还是”Challlenge

    7.png

    和第一个不一样,这回终于不闪退了。。。这次提示输入密码

    8.png

    我就随便输点啥吧,看看它能有几幅面孔。。

    9.png

    蓝后…粗线了“GettingSchwifty.bat”这个文件并且尝试加载它,结果证明这个不是一个有效的PE,所以发生了错误。

    10.png

    我们输入的密码似乎是用来解密这个PE文件的(名字。bat文件只是一种伪装)。让我们看一下这个文件:

    11.png

    如你所见它在内部被加密了。这让我觉得它可能是XOR加密的。因此,我试着用一些有效的PE文件来XOR解密,看看它是否显示了密码(我使用了python脚本:https://github.com/hasherezade/crypto_utils/blob/master/dexor.py):

    ./dexor.py --file GettingSchwifty.bat --keyfile Second.exe

    我们从编辑器看这个输出,返现开头这些重复的东东

    12.png

    这个可能就是我们需要的密码,所以我们继续试试。我复制了一些片段,保存为一个key.bin文件。然后又试了一次

    ./dexor.py --file GettingSchwifty.bat --keyfile key.bin

    这次厉害了,输出了一个有效的PE文件:一个叫做Piper.dll的DLL文件

    13.png

    因为我已经有了DLL文件,所以我不关心什么可以解密出它的密码。我在调试器中运行了主要的可执行文件(Second.exe) 在gettingschwigett之前设置断点。用我的版本替换已加载的那个bat文件。

    14.png

    当在LoadLibraryA中出现断点时。我删除掉那些被加载的文件。在它上复制我的解密DLL。

    它加载得非常成功,所以现在我们可以进入DLL内部的函数了:

    15l.png

    然而还没有结束,在我们将flag打印出来之前,还需要再输入一个密码。应用程序在pipe上提出一个” flumbus_channel”问题,而我们需要解决这个问题。

    16.png

    经过一段简短的分析,我得出结论。蛮干并不是解决之道,所以我们必须用另一种方法来解决它。然后我去Google逛了一圈,发现有人问了一个很有意思的问题:什么比冷更冷?

    17.png

    (source: http://www.urbandictionary.com/define.php?term=Cooler%20Than%20Being%20Cool)

    回答者说:“冰冷!”(这是在玩脑筋急转弯吗。。。)很明显不是吗?(原谅我感受不到哪里明显了..),而且这不就是程序通过让我们输入和检查想要我们说的吗?我想要一个快速的解决方案,而不是编写一个可以在Pipe上进行讨论的客户端,我只需要在内存中编辑缓冲区。让我们在对ReadFile的调用中设置断点,并在转储文件中跟踪缓冲区:

    18.png

    ReadFile返回后,我们可以编辑这个缓冲区,以模拟正在读取的输入:

    19.png

    密码被转换成大写,然后它被用来解密输出缓冲区,对解密缓冲区的校验并与硬编码的缓冲区进行了比较:0x55B8B000

    20.png

    看起来密码”ICE COOL”(就是上文中作者逛Google时看到的一个问答。。然后这货玩成了哲学问题,这清奇的脑回路在下实在佩服。。)是正确的,校验和匹配!输出缓冲区被解密,并在转储中跟踪它,我们已经看到了第二个标志:

    21.png

    然而,坑还不止这些—有一些调试检查,一不小心就会导致程序异常退出:

    22.png

    我只是补全了上面的条件,所以不能采取反调试措施:

    23.png

    然后,喜闻乐见的密码就跳出来啦~~

    24.png

    25.png

    26.png

  • 相关阅读:
    完整版:资深程序员都了解的代码复用法则
    Shiro学习总结(10)——Spring集成Shiro
    Shiro学习总结(2)——Apache Shiro快速入门教程
    Shiro学习总结(2)——Apache Shiro快速入门教程
    Mysql学习总结(15)——Mysql错误码大全
    Mysql学习总结(15)——Mysql错误码大全
    ActiveMQ学习总结(6)——ActiveMQ集成Spring和Log4j实现异步日志
    ActiveMQ学习总结(6)——ActiveMQ集成Spring和Log4j实现异步日志
    对话:一个工程师在蘑菇街4年的架构感悟
    这种反爬虫手段有点意思,看我破了它!
  • 原文地址:https://www.cnblogs.com/ichunqiu/p/7405155.html
Copyright © 2011-2022 走看看