2021年中国工业互联网安全大赛

2021年10月14日,山东·青岛,中国工业互联网安全大赛核能行业赛道,上午9:00开始,下午5:30结束。本人与另外2名同事组队参加比赛,经过8个半小时的角逐,最终获得三等奖。这个系列是本次CTF比赛复盘。

CTF准备工作

CTF比赛时间长、无间歇、题量大、难度大。参赛选手应提前准备好常用的CTF工具,应具备快速编写脚本的能力,应做好分工配合。

CTF类型、工具和应对策略

CTF题目常见类别有:流量分析、逆向工程、Web漏洞、其他类型。

流量分析类

重点就是要提前准备好工具和脚本。

应关注常见协议,使用 wireshark 工具全局搜索flag,注意观察包中特别的数据。比如

{ 这类Unicode编码

http.request.method == POST ,常见 Webshell

http.response.code == 200 ,第一次尝试成功的访问

逆向工程类

重点就是要提前准备好工具和脚本。

  1. 用ExeinfoPE、PEID、DIE等工具查壳,有壳就用工具UPX等脱壳
  2. 用IDA等工具,静态分析、反编译,找flag
  3. 必要时动态调试,常用工具ollydbg、x32dbg、x64dbg等

如果发现exe文件过大,那么极有可能是用 pyinstaller 打包的,用工具 pyinstxtractor.py 逆向代码。

Web漏洞

重点就是要提前准备好工具和脚本。

熟练使用 Kali 里面的工具集。

其他类型

重点就是要提前准备好工具和脚本。

图片隐写,使用binwalk或foremost工具分离。使用stegsolve工具分离图层直接找到flag。

修复文件头部信息。

使用john工具暴力破解。

图片一般用010Editor打开,搜索flag、key、f-l-a-g、k-e-y,肉眼观察有没有异常。注意&#开头 分号结尾 格式的Unicode,直接复制出来转成ASCII就行了。

key{you a

re right}

靶场

CTF-wiki(https://ctf-wiki.github.io/ctf-wiki/)是一个关于CTF的社区项目,上面有着各个方向的学习路线与讲解。只是部分讲解并不是很清楚,需要自己多想多动手。

pwnable.tw(pwnable.tw)是一个著名的刷题网站,网站上的题目都十分有意思,可以学到许多新的东西。只是后面部分的题目并没有writeup。

Buuoj(https://buuoj.cn/challenges)是北京联合大学的CTF题目平台,上面有着各种比赛的题目环境,适合大家复现比赛的题目。

墨者学院(https://www.mozhe.cn/bug

BugKu(https://ctf.bugku.com/

hacker【脱壳、逆向】

附件是一个EXE文件 ARE_YOU_SDPD.exe。用 DIE (Detect It Easy)查壳,发现是 UPX 加壳。那就用 UPX 脱壳,得到 a.exe。

DIE (Detect It Easy)查壳
upx -d ARE_YOU_SDPD.exe -o a.exe 

upx -d ARE_YOU_SDPD.exe -o a.exe 

用 IDA 反汇编一下 a.exe,可以找到入口 main 函数,在 main 函数的汇编代码上按F5键看到main 函数的代码。程序逻辑是打印一行,等待用户输入字符串并保存到 Buffer,再在 check_flag 函数里检查用户的输入。双击 check_flag 函数,看到 check_flag 函数逐位检查字符是否匹配,只要把检查的整型转换成对应的 ASCII 字符,就得到了 flag。整型数组为{102,108,97,103,123,121,111,117,45,97,114,101,95,97,95,104,97,99,107,125} 

F5反汇编
check_flag

写一段简单的代码,显示一下为 flag{you-are_a_hack} ,但是需要提交 flag{you_are_a_hack} 

num = [102, 108, 97, 103, 123, 121, 111, 117, 45,
       97, 114, 101, 95, 97, 95, 104, 97, 99, 107, 125]

m = list(map(lambda n: chr(n), num))
print(''.join(m))

隐写 【binwalk工具】

附件是scene.jpg图片。先用 010Editor 查看这个图片,能直接看到图片的头部是否完整正常,能直接看到是否隐藏了flag。使用 Stegsolve 逐个图层看,没有发现异常,尝试用 binwalk 搞定。

scene.jpg
010 Editor

binwalk -e scene.jpg
cd _scene.jpg.extracted
zip2john 7FE57.zip >> pass.txt
john pass.txt  

发现图片里隐藏的压缩包 7FE57.zip,使用 john 工具暴力破解,发现压缩包的密码是easy。解压缩得到flag.txt,里面就是 flag{hide_1n@_Picture} 。 

john
flag

机房密码【base64、逆向】

附件sixpass.zip,解压发现里面有两个文件,一个 tips.txt,另一个 sixpass.exe 。

tips.txt里面有一段话,经过黑客人员的不屑努力,在上位机上发现了登录密码的一半信息,剩下的一半要靠你们继续努力辣!!!   ZmxhZyU3Qmgwd19hX0M= 。这个做 base64 转码,就得到了 flag 的前半部分。注意转码以后有个 %7B ,要对 %7B 、%7D 敏感,这就是左右花括号,所以前半部分是 flag{h0w_a_C 。

运行一下 sixpass.exe,看来是要6位密码。对 sixpass.exe 查壳,发现没有壳。那么用 IDA 打开sixpass.exe反编译,在 main 函数按 F5 得到伪代码。注意圈出来的部分,如果6位数字都不是整型57就错,因此判断6位数字是6个整型57,整型数57就是 ASCII 字符9。

把前后两个半段拼接到一起,就得到   flag{h0w_a_CLEvEr_guy}

需要6位数字密码
密码是999999

鱿鱼游戏【脑洞】

附件解压缩是一个可执行文件 squid_game_protected.exe 。题目描述如下(有提示)

小王由于操作不规范,误将不明U盘插入到上位机中,导致上位机中的某些关键文件被加密,但攻击者在U盘中还留下了一个可执行文件,并且留下了一段话:该程序只有在特定的时间段内才能打开,如果过早或过晚打开该文件,会导致当前目录下的所有文件被加密。如果在规定时间打开了该文件,则会直接得到解密的key来恢复被加密的文件。

注意,题目里的EXE文件不要直接执行,应放入虚拟机,做好快照,再在一个文件夹中执行,避免不必要的损失。这道题很有意思,不是靠技术破解到 flag!

执行一下 squid_game_protected.exe 。多出个文件,Readme.txt 里面是句狠话,出自臭名昭著的勒索病毒 WannaCry ,我偏要再次执行一下。

再次执行时,程序停顿了几秒,然后提示,结果文件夹里的文件都被加密了,实际上只是每个文件的扩展名都变成了.WNCRY。模拟了Wanna Cry 勒索病毒的加密过程,恢复文件只要把扩展名改回去就行。

此后不管怎样执行,提示信息都一样,不会再提示日期时间信息,因此这个程序第一次执行就要破解。

所以要注意,题目里的EXE文件不要直接执行,应放入虚拟机,做好快照,再在一个文件夹中执行,避免不必要的损失。

首次执行
首次执行的结果

结合提示信息,分析这个程序只能在 2021.10.15.09:00:00 s 到 2021.10.15.09:00:03 s 之间的时间段内才能执行。那就把操作系统时间改了吧。

先重新解压缩一个 squid_game_protected.exe ,把操作系统时间改成 2021.10.15.08:59:50,再赶紧到命令行窗口,为确保能在 2021.10.15.09:00:00 s 到 2021.10.15.09:00:03 s 之间第一次执行 squid_game_protected.exe,要再大约 2021.10.15.08:59:54 的时候按下回车。

执行直接得到flag —— flag{c4c728d9ccbc87e4b5ce2f}

在 2021.10.15.09:00:00 s 到 2021.10.15.09:00:03 s 之间首次次执行squid_game_protected.exe

数据库登录【流量分析】

题目描述

具体描述已经忘记o(╯□╰)o

大概意思就是分析附件里的.pcapng包,找到flag。流量涉及到 MySQL 数据库了。

附件用wireshark打开这个包,全局搜索一下flag,没有发现有用信息。

猜想一般黑客得手是在http访问成功的时候,所以先筛选 http.response.code == 200,发现 No.232985 包 request 请求 GET /test/flag.txt,No.232989 包 response 返回 flag.txt,里面的内容 —— ZmxhZ3t3ZWxjb21lX3

根据提示数据库登录,猜想后半段在数据库的协议中,并且流量中有MySQL协议,而且有很明显的root登录成功和select查询。筛选mysql协议,内容为Response,逐个查看MySQL Protocol的内容,发现No.233219包里面有信息,是base64编码,而且是另外半部分—— RvX3lvdV9maXJzdH0gIA

合并到一起  ZmxhZ3t3ZWxjb21lX3RvX3lvdV9maXJzdH0gIA,再base64转码得到flag —— flag{welcome_to_you_first}  

前半部分 HTTP
后半部分 MySQL

Webshell密码【流量分析】

题目描述:

某次攻防演练中,抓到了一个webshell的流量,请分析出密码,flag形式:flag{密码}

附件webshell.pcapng,全局搜索flag,没有发现有用信息。

因为是Webshell,一般HTTP请求会用到POST方法,筛选 http.response.method == POST。发现攻击者在不断的尝试用户spiderpass的弱口令,一直尝试到 No.2253 包,在此之后就得手了。所以 No.2253 包里面尝试的口令就是flag中{}的部分。 根据提示flag的格式为flag{密码}得到 —— flag{hacked_by_q1ngdao}

flag

传统流量取证

题目描述:

在某次攻防演练中,小王发现流量探针平台突然告警,小王第一时间下载了告警流量包,并进行分析:发现攻击队攻击在攻入内网后,利用了一个内网OA的一个漏洞,获取了某机器权限,并成功下载了一个关键压缩包文件。你能帮忙分析出压缩包里面的内容吗?

附件 告警包.pcapng。根据提示“成功下载了一个压缩包文件”,筛选http.response.code == 200,从后往前找发现 No.2212 是 Response 似乎传输了文件。找到 No.2212 对应的 Request,也就是 No.625 ,发现了“Form item: "z1" = "C:\\security.emtp.zip"”。 

接下来,流追踪——TCP 流。 选择下载文件的传输方向,数据以原始数据的方式展示,另存为security.emtp.zip。

把 security.emtp.zip 解压缩得到一个文件 security.emtp 。这个是用工控软件 EasyBuilder Pro 打开的。找到 EasyBuilder Pro v6.05并安装,打开文件 security.emtp,在主界面得到flag —— flag{beSt_nucl@ar}

Form item: "z1" = "C:\\security.emtp.zip
流追踪TCP 流,得到security.emtp.zip

工控软件 EasyBuilder Pro 打开

usb流量分析【usb流量分析】

题目描述:

具体描述忘记了o(╯□╰)o

大概意思是有个U盘插到电脑上,然后经过一些操作导致该电脑重启了。找到这个过程中的flag。

1、USB协议

先引用一段对USB协议的解释

USB是 UniversalSerial Bus(通用串行总线)的缩写,是一个外部总线标准,用于规
范电脑与外部设备的连接和通讯,例如键盘、鼠标、打印机、磁盘或网络适配器等等。
通过对该接口流量的监听,我们可以得到键盘的击键记录、鼠标的移动轨迹、磁盘的
传输内容等一系列信息。


USB有三种方式:USB UART,USB HID,USB Memory


UART或者Universal Asynchronous Receiver/Transmitter。这种方式下,设备只是简单
的将USB用于接受和发射数据,除此之外就再没有其他通讯功能了。
HID是人性化的接口。这一类通讯适用于交互式,有这种功能的设备有:键盘,鼠标,
游戏手柄和数字显示设备。
USB Memory,或者说是数据存储。External HDD, thumb drive / flash drive,等都是
这一类的。

因此通过流量分析,特别是 USB HID 得到键盘击键记录、鼠标移动轨迹等信息来获得flag。

2、键盘流量

键盘流量的特点:

键盘数据包的数据长度一般为8个字节,击键信息集中在第3个字节,每次击键都会产生一个数据包。如果看到给出的数据包中的信息并且只有第3个字节不为00, 那么可以猜测是一个键盘流。

第三字节,键盘的对应关系,查看 10 Keyboard / Keypad Usage (0x07)https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf

第一个字节,每个bit都代表一个控制按键,如果看到这个数据包中第一个字节是 20 或者 02,那么可以认为是按住了 Shift切换。比如,0200040000000000,就是 Left Shift + a,就是大写 A。

bit 7bit 6bit 5bit 4bit 3bit 2bit 1bit 0
Right GUIRight AltRight ShiftRight CtrlLeft GUILeft AltLeft ShiftLeft Ctrl

提取敲击键盘的记录,就可能得到flag

3、鼠标流量

鼠标流量
USB协议鼠标数据一般为四个字节


第一个字节, 代表按键。
当取0× 00时,代表没有按键
当取0× 01 时,代表按左键
当取0× 02时,代表当前按键为右键。


第二个字节,可看作为signed byte类型,其最高位为符号位。
当值为正时, 代表鼠标右移像素位;
值为负时, 代表鼠标左移像素位。


第三个字节, 代表垂直上下移动的偏移。
当值为正时, 代表鼠标上移像素位;
值为负时, 代表鼠标下移像素位。 

提取鼠标轨迹,并用绘图工具画出来图像,即可能得到flag

4、writeup

附件解压缩得到一个加密的 flag.docx 文件和 一个ez_usb_10月.pcapng 包。需要分析流量包得到密码,打开文件 flag.docx 就能拿到flag了。

wireshark 打开 ez_usb_10月.pcapng 包,筛选 usb.src == "1.12.1" and usb.dst == "host",发现每个发送给host的数据包,都是8个字节,且第3个字节不是00,认定是敲击键盘。

加密的 flag.docx 文件
ez_usb_10月.pcapng 包

把所有第三个字节提取出来

14, 1a, 08, 15, 17, 28, 1e, 1f, 20, 04, 16, 07, 28, 21, 22, 23

再对照键盘的对应关系就得到密码 qwert123asd456。

q,w,e,r,t,return,1,2,3,a,s,d,return,4,5,6

用密码打开flag.docx就得到 ——  flag{keyboard_Usb_yyds}

 

提取的办法也可以用 kali 里的工具 tshark。

  • -r 输入文件
  • -T 设置解码结果输出的格式, 默认为text
  • -e 如果 -T fields选项指定, -e用来指定输出哪些字段,这里就输出 HID 部分

 tshark -r ez_usb.pcapng -T fields -e usbhid.data | sed '/^\s*$/d' > keyboard.txt

入门的黑客

题目描述:

在某次工控攻防演练中,防守方使用蜜罐捕捉到了某黑客在入侵时留下的恶意程序样本,现在要对该黑客进行画像,需要从该恶意程序中分析出反连时的IP和端口信息,看看聪明的你能否能找到他!!! 提交flag形式为flag{ip_端口}

附件解压缩,得到 一个ReadmE.txt,一个二维码 U2FsdGVkX1+idZVN8gu8RY6JEWTGk0ktAXF+N8hyW1U=.png,一个Trojan.rar压缩包(解压缩需要密码)。 

ReadmE.txt里面没有什么内容。

某菜鸡黑客在入侵上位机时,不小心留下了自己的信息,看看聪明的你能否找到他!!!

看来要用二维码得到压缩包的解压缩密码。

U2FsdGVkX1+idZVN8gu8RY6JEWTGk0ktAXF+N8hyW1U=.png用微微二维码解码,得到信息 —— IndustrialInternet。此外,其他工具查图没有有用信息。

再看图片名字,似乎可以解码,先base64尝试,得到 Salted__昅� 糆帀d茡I-q~7萺[U。

看到 Salted__开头,再结合U2Fsd开头,确定了这个是AES加密,前面IndustrialInternet是秘钥。解密得到密码 —— mima

在用 mima 把 Trojan.rar 解压缩,得到 Trojan.elf,这个elf放到linux环境里,赋予 0744 权限,执行一下。再用 ss -tup 命令查看这个木马进程在连接哪个IP哪个端口,结合提示得到flag形式为flag{ip_端口} —— flag{192.168.183.139_5678}

wifi破解近源攻击

题目描述:

近源攻击,在攻防演练期间,攻击队队员使用无人机悬停监听技术,成功抓取到了某核电办公网络的Wifi握手包,现在正在进行紧张的破解,你能破解该密码吗? 据得到的信息显示,该办公室设置的密码比较简单,可能是wifi名字和弱口令的组合。flag格式: flag{} + 密码 例如: flag{12345678}

先用aircrack-ng工具,看看哪个wifi有可能突破。发现有一个名为workplace的wifi有握手,那么就这个了。

aircrack-ng  airportSniffgIm17m.cap

根据提⽰,该wifi密码为wifi名字和弱⼝令的组合,那可以使⽤字典⽣成器来任意⽣成0-4,5,6……位的字符来测试。目前我还没有掌握字典生成器,先用python脚本生成字典,先生成workplace+4位数字的字典。如果4位的不行,再尝试5,6……位数字的。 提交 flag{workplace1014}

f = open('dict.txt', 'w')
for i in range(1, 10000):
    f.write('workplace' + str(i) + '\n')
f.close()
aircrack-ng  airportSniffgIm17m.cap  -w  dict.txt
flag

日志分析

题目描述:

核电站新来的运维小王粗心把一个办公网地址映射到外网,遭到大量攻击,你能从日志当中找到有效信息吗。

筛选http协议,发现No.62395包前后有几个POST的http请求,执行了命令注入。先执行了uname,后执行了ls,再后cat hsdhe.bin(这个有用),再后cat index.php等等……

No.62395包,在 Line-based text data: text/html (111 lines) 右键-导出分组字节流-保存为.html,选择all files,浏览器打开这个html文件,就看到 f-l-a-g.txt 字样,前面还有Rar!,看来是个.rar压缩包里藏了flag。

关于rar文件格式,参考 RAR5 文件格式解析 - 乾坤盘的个人技术博客 。或者参考 RAR 5.0 archive format。注意,RAR5文件头(0x526172211A070100),RAR5文件结尾(0x1D77565103050400) 这些显著的特征!

将可疑部分复制为Hex流,在010Editor里面选择Paste from hex,另存为a.rar提取到这个rar文件。

No.62395包
Copy as Hex Stream
另存为a.rar

这个rar文件解压缩需要密码,同时也用base64编码提示了你需要一个密码,并且相信你可以找到密码。那就不找密码了,直接 rar2john a.rar >> a.txt,然后 john a.txt 暴力破解,得到密码为goodluck。解压缩a.rar得到f-l-a-g.txt文件,里面就有flag —— flag{hdbw-dnsjpn-jndaj-AHH}

需要密码
john

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苦行僧(csdn)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值