• 如果您想对本站表示支持,请随手点击一下广告即可~
  • 本站致力于提供原创、优秀的技术文章~
  • 有任何疑问或建议 均可以在站点右侧栏处 通过各种方式联系站长哦~
  • CTF – RootMe解题报告 [Programming : Go back to college]

    渗透测试 EXP 447阅读 0评论

    挑战入口:Root-Me(https://www.root-me.org/en/Challenges/Programming/Go-back-to-college-147)
      分类目录:Link to …(http://exp-blog.com/2019/01/02/pid-2597/8/)


    水题,有点像读书时参加的 ACM 比赛,确实有点 Go back to college 的感觉。

    题目意思大概就是有一个 IRC 聊天室频道,里面有一个 robot 名为 Candy 。

    我们要连接到这个 IRC 频道,与 Candy 进行交互以开启挑战。

    挑战过程和要求如下:

    • 连接到 IRC 聊天服务器,并进入指定 robot Candy 所在的聊天频道
    • 发送消息 !ep1 给 Candy
    • Candy 会以固定格式 <number1> / <number2> 回复两个数字,如: 429 / 5134
    • 我们需要在 2秒内 计算 answer = sqrt(number1) * number2 ,且 answer 保留 2位小数
    • 然后发送固定格式的消息 !ep1 -rep <answer> 给 Candy
    • Candy 验证结果后,会回复我们想要的 flag 以完成挑战

    看了过程就知道这题是真的非常简单,关键是要弄懂 IRC 协议怎么连接、怎么交互

    IRC 全称 Internet Relay Chat ,即互联网中继聊天,它是一种网络聊天协议。

    IRC的工作原理非常简单,只要在自己的 PC 上运行客户端软件,然后通过因特网以 IRC 协议连接到一台 IRC 服务器上即可。它的特点是速度非常之快,聊天时几乎没有延迟的现象,并且仅仅占用很少的带宽资源。所有用户可以在一个被称为 Channel(频道) 的地方就某一话题进行交谈或密谈。每个 IRC 的使用者都有一个 Nickname(昵称)。

    国内听过的人 IRC 的人不多,用过的人就更少了。但是国外应该是比较火的,其功能类似于 QQ,但由于聊天记录的私密性(连管理员都无法查看任意两个人之间私信的聊天记录),所以很多 Hacker 之间的交流都会使用它。


    从本质上看,其实这题下载任何一个现成的 IRC 客户端,使用人工交互方式就可以做,毕竟运算量很少。但是题目为了避免我们这样投机取巧,要求在 2秒内 计算结果并返回,这样就不能不依赖编程实现了。

    在这里我选择了 python ,关于 python 如何连接到 IRC 的聊天频道,详细可以参考 这篇文章

    我就不复述了,直接贴代码(python 版本为 3.5.2):

    其实代码很简单,rootme 已经给出了 IRC 服务器的 host 和 端口,直接使用 socket 连接即可。

    关键是连接后要使用 IRC 的协议进行交互。

    这里需要注意的有几点(详细可以参考代码):

    • 用到的 IRC 命令主要有:NICKUSERJOINPRIVMSG
    • 每个 IRC 命令都有固定的格式,多一个空格少一个空格都可能会造成交互异常
    • 每条 IRC 命令必定以 \r\n 结尾
    • 连接到 IRC 服务器后,NICKUSER 命令必须先于所有命令发送,以标称自己的身份
    • 上述代码中涉及到的 IRC 命令格式和样例见下表:
    IRC 命令 格式 样例 作用
    NICK NICK [username]\r\n NICK EXP\r\n 设置在聊天室的昵称,连接到 IRC 服务器后必须首先发送此命令
    USER USER [username] [username]
    [username] :[any_msg]\r\n
    NICK EXP EXP EXP :Hi\r\n 我找不到关于这条命令的任何说明,但是它必须跟在 NICK 命令后
    JOIN JOIN [channel]\r\n JOIN #root-me_challenge\r\n 加入某个聊天频道,
    频道名称必须以 # 开头
    PRIVMSG PRIVMSG [somebody] :[any_msg]\r\n PRIVMSG Candy :Hello\r\n 给某人发送私信

    运行代码后,结果如下(注意,以 => 开头表示是代码发送的 IRC 命令,其他均是 IRC 服务器返回的内容):

    其实前面一大段 :irc.hackerzvoice.net ****** 都是连接到 IRC 聊天室后自动返回的画屏信息,最后几行才是真正的交互内容。显然地,我计算出了结果并成功得到了密码。

    注:若网络不好导致 2秒内 没有发送成功, IRC 会提示 too late ,多试几次就好


    转载请注明:EXP 技术分享博客 » CTF – RootMe解题报告 [Programming : Go back to college]

    喜欢 (0) 分享 (0)
    发表我的评论
    取消评论

    表情

    Hi,您需要填写昵称和邮箱!

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址