专栏名称: CTFer的魔法棒
CTFer的魔法棒,你的CTF参赛指南。 查看比赛日程、学习竞赛相关知识应有尽有
目录
相关文章推荐
洞见  ·  为什么建议你买几十元的衣服? ·  2 天前  
高山流水的心语屋  ·  东拉西扯:第一名与最后一名同学的不同人生 ·  昨天  
高山流水的心语屋  ·  东拉西扯:第一名与最后一名同学的不同人生 ·  昨天  
青年文摘  ·  今天,武汉的鲜花都被抢光了 ·  3 天前  
51好读  ›  专栏  ›  CTFer的魔法棒

LCTF 2017 未解之谜:树莓派 Writeup

CTFer的魔法棒  · 公众号  ·  · 2017-11-21 18:39

正文

本文原作者:L-Team

转载来自:长亭技术专栏《LCTF 2017 未解之谜:树莓派 Writeup》

https://zhuanlan.zhihu.com/p/31256263

点击文末原文链接即可跳转


在刚刚结束的LCTF 2017中,仍有一些未解的题目,今天笔者就来和各位胖友分享第一道未解之谜—— Misc 类下的「树莓派」,Writeup 来自本次比赛主办方 L-Team 。
PS: 其它未解之谜见文末链接。


0X01  刚上线

  1. 题目介绍只给了个 IP ,有师傅当做 Web 题,发现点不开。

  2. 扫了一波端口后,只有 22 开着,所以入口点肯定在这里。

  3. 根据题目的提示,按照正常的思维确实应该登录 pi:raspberry ,本来也是打算设置成这样,但是这个密码太弱了,题目还没上线就被黑铲扫了好几波,直接改密码种木马一波带走了。所以就改了一个需要一些脑洞的密码 pi:shumeipai ,可能有师傅在这里卡了一下。

0X02  第一个hint

hint1:都告诉你密码了

  1. 这个 hint 主要提示弱密码是什么,因为不想让师傅们耽误太多时间,给出后很多师傅都上来了。

  2. 这时候 SSH 进去会发现是一个低权限帐号,很多操作都受限了, uname 看内核版本也很高,这之后很多师傅就开始四处搜刮 flag bash_history .swp 等等,还看了所有文件的修改时间。

  3. 但是一番搜索后除了那个假 flag 什么发现也没有。在搜索的过程中,查看主机的网络状态 netstat -autpn ,会发现所有的 SSH 连接来源都是 172.18.0.3 ,在这里应该会产生一些疑问,ping 172.18.0.1 172.18.0.3 都是通的,pi 本机是 172.18.0.2

  4. 这时候可以猜测,SSH连接被 0.3 动了手脚,通过 SSH 的指纹完全可以验证 0.3 是师傅们和 0.2 之间的中间人。

  5. 下图是我们 SSH 连接时收到的公钥指纹:

  6. 下图是 172.18.0.2 主机 SSHD 配置文件夹中的公钥:

  7. 可以看出两者是不一样的,所以验证了 0.3 在做 SSH 连接的中间人的猜测,这样一来有很大可能真的flag在 0.3 里。

0X02  第二个hint

hint:pcap

  1. 这是一个很重要的 hint ,流量中出现的主要IP是 172.18.0.2 172.18.0.3 ,在流量包里可以看到明显的特征:在建立了 SSH 连接后,外网发给 0.3 的加密数据包, 0.3 会先与 0.2 通信, 0.2 返回给 0.3 数据后, 0.3 再返回给外网的 IP ,在这里也能够证实 0.3 在做 SSH 的中间人。

  2. 一般打 CTF 的流量包里面都会藏一些有用的东西,所以这里设了个坑,下载了一个 53.bin ,但是文件的具体内容没有什么用,此文件实际上是之前部署在公网的蜜罐捕获到的 DDos 木马,所以先对执行了此文件的师傅说声对不起。

  3. 但是下载这个 53.bin 也不完全是坑人的,流量包里的 Http 都很重要,过滤一下 Http 可以看到只有几个数据包, User-Agent 是 wget ,wget 了 cip.cc ,并重定向到了 www.cip.cc ,这么做的初衷了为了暴露题目的公网 IP ,但是师傅们后来决定先不放这个流量包,所以题目描述直接把 IP 给出来了,这里也没什么用了。

  4. 那为什么 53.bin request 没有 response 捏,实际上 Follow 一下 TCP stream 就能看到后面的都是二进制的数据,Wireshark 没有把他们识别为 HTTP 协议。

  5. 实际上这个包最关键的地方在下图中两个 GET 53.bin ,这里涉及到一些蜜罐的东西,玩过 SSH 蜜罐的师傅可能了解,入侵者下载的恶意文件很可能随着执行而自动删除,所以绝大多数 SSH 蜜罐,无论低中高交互都会有一个功能,就是碰到 wget 命令,会解析命令并自动下载里面包含的恶意文件,这也就解释了为什么 wget 命令在两台主机上都执行了一次。

  6. 所以如果 wget 命令及参数没有解析好的话,是有可能导致命令注入的。这一点在后面的 hint 也有提示。这个漏洞我比较粗暴的设置为,当 0.3 主机得到了攻击者的命令,如果命令以 wget 为开头,則直接 os.system(cmd) ,当然还是做了一些过滤的。

  7. 可以看到 Shell 里常见的引入新的命令的符号大多数都做了过滤,比如 & | $() ,但是还是留下了姿势可以绕过,比如 \n

  8. ssh tunnel 的应用除了我们常用的 shell ,实际上还有 exec ,此应用不会在 sshd 上请求 shell ,只执行一条命令,比如 ssh [email protected] 'ls'







请到「今天看啥」查看全文