本文原作者:L-Team
转载来自:长亭技术专栏《LCTF 2017 未解之谜:树莓派 Writeup》
https://zhuanlan.zhihu.com/p/31256263
点击文末原文链接即可跳转
在刚刚结束的LCTF 2017中,仍有一些未解的题目,今天笔者就来和各位胖友分享第一道未解之谜—— Misc 类下的「树莓派」,Writeup 来自本次比赛主办方 L-Team 。
0X01 刚上线
-
题目介绍只给了个 IP ,有师傅当做 Web 题,发现点不开。
-
扫了一波端口后,只有 22 开着,所以入口点肯定在这里。
-
根据题目的提示,按照正常的思维确实应该登录
pi:raspberry
,本来也是打算设置成这样,但是这个密码太弱了,题目还没上线就被黑铲扫了好几波,直接改密码种木马一波带走了。所以就改了一个需要一些脑洞的密码
pi:shumeipai
,可能有师傅在这里卡了一下。
0X02 第一个hint
hint1:都告诉你密码了
-
这个 hint 主要提示弱密码是什么,因为不想让师傅们耽误太多时间,给出后很多师傅都上来了。
-
这时候 SSH 进去会发现是一个低权限帐号,很多操作都受限了,
uname
看内核版本也很高,这之后很多师傅就开始四处搜刮
flag
,
bash_history
、
.swp
等等,还看了所有文件的修改时间。
-
但是一番搜索后除了那个假 flag 什么发现也没有。在搜索的过程中,查看主机的网络状态
netstat -autpn
,会发现所有的 SSH 连接来源都是
172.18.0.3
,在这里应该会产生一些疑问,ping
172.18.0.1
、
172.18.0.3
都是通的,pi 本机是
172.18.0.2
。
-
这时候可以猜测,SSH连接被
0.3
动了手脚,通过 SSH 的指纹完全可以验证
0.3
是师傅们和
0.2
之间的中间人。
-
下图是我们 SSH 连接时收到的公钥指纹:
-
下图是
172.18.0.2
主机 SSHD 配置文件夹中的公钥:
-
可以看出两者是不一样的,所以验证了
0.3
在做 SSH 连接的中间人的猜测,这样一来有很大可能真的flag在
0.3
里。
0X02 第二个hint
hint:pcap
-
这是一个很重要的 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 的中间人。
-
一般打 CTF 的流量包里面都会藏一些有用的东西,所以这里设了个坑,下载了一个
53.bin
,但是文件的具体内容没有什么用,此文件实际上是之前部署在公网的蜜罐捕获到的 DDos 木马,所以先对执行了此文件的师傅说声对不起。
-
但是下载这个
53.bin
也不完全是坑人的,流量包里的 Http 都很重要,过滤一下 Http 可以看到只有几个数据包,
User-Agent
是 wget ,wget 了
cip.cc
,并重定向到了
www.cip.cc
,这么做的初衷了为了暴露题目的公网 IP ,但是师傅们后来决定先不放这个流量包,所以题目描述直接把 IP 给出来了,这里也没什么用了。
-
那为什么
53.bin
有
request
没有
response
捏,实际上 Follow 一下 TCP stream 就能看到后面的都是二进制的数据,Wireshark 没有把他们识别为 HTTP 协议。
-
实际上这个包最关键的地方在下图中两个
GET 53.bin
,这里涉及到一些蜜罐的东西,玩过 SSH
蜜罐的师傅可能了解,入侵者下载的恶意文件很可能随着执行而自动删除,所以绝大多数 SSH 蜜罐,无论低中高交互都会有一个功能,就是碰到 wget
命令,会解析命令并自动下载里面包含的恶意文件,这也就解释了为什么 wget 命令在两台主机上都执行了一次。
-
所以如果 wget 命令及参数没有解析好的话,是有可能导致命令注入的。这一点在后面的 hint 也有提示。这个漏洞我比较粗暴的设置为,当
0.3
主机得到了攻击者的命令,如果命令以 wget 为开头,則直接
os.system(cmd)
,当然还是做了一些过滤的。
-
可以看到 Shell 里常见的引入新的命令的符号大多数都做了过滤,比如
& | $()
,但是还是留下了姿势可以绕过,比如
\n
,
-
ssh tunnel 的应用除了我们常用的 shell ,实际上还有 exec ,此应用不会在 sshd 上请求 shell ,只执行一条命令,比如
ssh [email protected] 'ls'