目录
简单取证1【mimikatz、PasswareKitForensic工具】
telnet
下载得到一个networking.pcap包,用wireshark打开。直接搜索数据是否包含了flag。
telnet.data contains "flag"
大概看了一下,是从192.168.221.128向192.168.221.164进行telnet。并成功链接上了一台Ubuntu 12.04.2 LTS计算机。提示要输入虚拟机账号密码。客户端每敲击一个字符服务端回显一个字符,输入了账号csaw。No.41分组报文,输入密码flag{d316759c281bf925d600be698a4973d5}。答案一目了然。
Ubuntu 12.04.2 LTS
hockeyinjune-virtual-machine login: csaw
Password: flag{d316759c281bf925d600be698a4973d5}
Login incorrect
hockeyinjune-virtual-machine login:
1和0的故事
下载得到一个txt文件,打开里面全都是0和1。
0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0
1 1 0 0 0 1 1 1 0 1 1 1 0 1 1 0 1 0 0 0 1 1 0 0 0
0 0 0 1 0 0 0 0 1 0 1 1 0 0 1 0 0 1 0 0 1 0 1 0 0
0 1 0 0 1 1 1 1 0 1 0 0 0 0 1 1 1 0 1 1 1 0 0 1 1
0 0 1 1 1 1 0 1 0 0 1 0 1 0 1 1 0 0 1 0 0 1 0 0 1
1 0 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 0 1 1 0 1 0 0 0
1 1 1 1 0 0 0 1 1 1 1 1 1 0 1 1 1 0 0 1 0 1 0 0 0
1 0 1 1 0 1 1 1 1 1 0 0 1 1 0 1 1 1 1 1 1 0 1 1 1
1 0 0 0 1 1 0 1 1 0 0 1 0 0 1 0 1 0 1 1 0 1 1 0 0
1 0 0 0 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1
0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 1 1 0 0 0 1 0 1 0 0
0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 0 0 1
0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 0 0 1 1 0 0 1
0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 1 1 1 1 1 0 0 1 0
0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 1 1 1 1 0 1 1 1
0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 0 0 1
0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 1 1 0 1 1 0 0 1
0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 1 0 1 1 1 0 1 0 1
这里面0和1可以代表很多意义,可以是摩斯密码、一段文字、一张图片、一个可执行程序。观察数据发现这些0和1是25行25列,可能是一个25×25的二维码(Version2二维码)。那么,把这个文件导入excel,把0格换成白色,把1格换成黑色,行高列宽都设置成16磅,得到如下图片。
关于二维码怎么画,这个知乎写的比较通俗易通,推荐阅读二维码的每块区域代表什么信息? - 知乎
看到左上角、右上角、左下角缺少三个定位图案(Position Detection Patterns),按照上面链接描述,补充定位图案,注意定位图案是7×7的方块且有半圈白色分割(Separators for Postion Detection Patterns 加上就是8×8)。然后扫码得到flag,flag{QR_c0de_1s_1nterest1n9}。

这是一张单纯的图片
描述: key{}
下载得到一张图片。使用010Editor打开,观察数据发现存在Unicode编码,复制该编码后,进行Unicode转Ascii得到字符串,flag是key{you are right}。
key{you a
re right}
隐写
描述: BUGKU{xxxx}
下载得到一张png图片。使用010Editor打开,打开时提示CRC校验错误。爆破一下宽度高度就得到flag了。
社工-进阶收集
提 示: flag{小美小区名字拼音}
描 述: 小明当年为了追求小美想尽办法获得小美的地址。直到有一天小美发了一条说说,小明觉得希望来了。 (实战改编题,难度降低了。)
下载得到的压缩包,解压缩是一个名为qq.png的图片,根据提示,我们要从图片中的信息里找出小美住的小区名字。
背景是大雁塔,城市定在陕西西安。
小美说坐了7站地铁,中间还要转一站,那么找一下西安地铁路线图,找出距离大雁塔站7站且中途需要换乘1次的地铁站。小美说在始发站上车,家距离始发站800米,距离始发站的下一站1公里多。查看地图,锁定始发站是2号线韦曲南,下一站是2号线航天城。
在2号线韦曲南800米为半径作圆,下一站是2号线航天城1000米为半径作圆,查找交点附近小区。然后看运气尝试,得到小区是兰乔国际城,flag是flag{lanqiaoguojicheng}。
来自论坛提问——gQiRf的附件.zip
附件是file.gif。共841个frame,正好29×29,每个frame不是全黑就是全白,猜测拼出来是个二维码。工具地址在这 ImageMagick – Download。
magick convert file.gif z.png
magick montage z-*.png -tile 29x29 -geometry +0+0 zqr.png
扫二维码zqr.png得到 Thank you Mario, but our flag is in another castle——妈的,被出题人套路了,出题人太贱了!
继续尝试,写代码存储每个frame,下面附上一段代码,把 gif 的每一帧都存成 png。发现第211个frame也就是gif_frame_210.png是个二维码,扫码得到 DASCTF{A_Pal3tt3_Tr1ck_In_GIF}
"""
把gif图片的frame分别保存
gif帧数能开平方,可能拼成二维码
PIL的mode
modes 描述
1 1位像素,黑和白,存成8位的像素
L 8位像素,黑白
P 8位像素,使用调色板映射到任何其他模式
RGB 3× 8位像素,真彩
RGBA 4×8位像素,真彩+透明通道
CMYK 4×8位像素,颜色隔离
YCbCr 3×8位像素,彩色视频格式
I 32位整型像素
F 32位浮点型像素
"""
from PIL import Image
import os
fname = 'gif_frame.gif'
name = fname[:-4]
os.mkdir(name) # 创建同名目录
img = Image.open(fname)
print(f'gif size: {img.size}, gif mode: {img.mode}')
try:
while True:
cur = img.tell() # 当前frame
img_gray = img.convert('L') # 转黑白,根据实际情况调整
img_gray.save(f'{name}\\{name}_{cur}.png')
print(img_gray.getpixel((img_gray.size[0] // 2, img_gray.size[1] // 2)),
end=',')
img.seek(cur + 1) # 下一个frame
except EOFError:
pass
简单取证1【mimikatz、PasswareKitForensic工具】
题目链接。描述: flag格式为flag{用户名_对应的密码} 例如flag{administrator_bugku}。附件解压缩出来是一个config目录,看一下内容就知道是C:\Windows\system32\config目录,这目录里面的SAM、SYSTEM就是存储密码的文件。
kali的2个目录里有很多windows渗透工具,copy出来直接在windows上使用
/usr/share/windows-binaries
/usr/share/windows-resources
本次使用的是mimikatz工具,项目主页在https://github.com/gentilkiwi/mimikatz/
在windows上以管理员身份运行 mimikatz.exe,切换目录到config,privilege::debug提权。
lsadump::sam /sam:SAM /system:SYSTEM 可以以离线方式读取SAM文件中用户的Hash值。这里读到 :
User: administrator-QQAAzz
RID: 0x3e8(1000)
Hash NTLM: 5f9469a1db6c8f0dfd98af5c0768e0cd
Domain: DESKTOP-VBBTMVS
但是,我并没有找到很好的办法去爆破Hash NTLM。如果用hashcat暴力破解,需要很长时间。如果用ophcrack彩虹表攻击,我并没有9位的彩虹表可用。cmd5在线解密破解这个网站可以破解,是目前唯一可靠的在线破解网站。
使用PasswareKitForensic工具破解得到administrator-QQAAzz的密码是forensics,这是最快的,原理暂不清楚。所以是 flag{administrator-QQAAzz_forensics}
眼见非实
题目链接。docx->zip,解压缩,把里面的内容重新压缩不带眼见非实外层目录,zip->docx,调整一下字体里面的“隐藏文字”。flag{F1@g}
啊哒
题目链接。附件ada.jpg用binwalk分离出一个flag.zip,里面是flag.txt,zip是加密的。找密码。图片属性里,有一个照相机型号 73646E6973635F32303138,16进制转换得到 sdnisc_2018 是解压缩密码,得到 flag{3XiF_iNf0rM@ti0n}
import base64
num = b'73646E6973635F32303138'
s = base64.b16decode(num).decode('utf-8')
print(s)
ping
题目链接。ping.pcap打开后逐个ICMP数据包看data部分,得到 flag{dc76a1eee6e3822877ed627e0a04ab4a}
FileStoragedat
题目链接。描述: 标题有用 格式bugku{}。下载下来的keli.dat,用010Editor打开,发现文件头部和尾部都有一些连续字节是0x9E,盲猜是文件和0x9E异或。那么0x9E异或回去得到keli.png,也就是 bugku{WeChatwithSteg0}
看评论还有说用微信PC版DAT文件解密工具的。可能是因描述说标题有用,FileStorage 是微信存文件的目录吧,亲测这个工具也可以用,挺好的。
又一张图片,还单纯吗
题目链接。提示: falg{}。描述: 好像和上一个有点不一样。图片是一个jpg,binwalk分析里面有多张图片,但是 binwalk 提取不了。foremost 可以提取,也可010Editor手动分离。注意格式是 falg{NSCTF_e6532a34928a3d1dadd0b049d5a3cc57}
where is flag
题目链接。附件解压缩得到10个txt,内容都是空,用010Editor看内容都是0x00。那么信息只能隐藏在一个地方了——字节个数。10个txt文档字节个数分别是 98117, 10310, 71171, 23110, 9748, 100481, 10103, 10097, 10797, 49125个。
重新分割一下,98, 117, 103, 107, 117, 123, 110, 97, 48, 100, 48, 110, 103, 100, 97, 107, 97, 49, 125。对应ascii为 bugku{na0d0ngdaka1}
where is flag 2
题目链接。附件压缩包是加密的,打开观察每个文件的CRC32校验和,发现有利可图。提取出来,按照对应数值转ascii,得到 bugku{You_can't_imagine_the_happiness_of_hiding_the_flag!!!}
crc32 = [0x62, 0x75, 0x67, 0x6B,
0x75, 0x7B, 0x59, 0x6F,
0x75, 0x5F, 0x63, 0x61,
0x6E, 0x27, 0x74, 0x5F,
0x69, 0x6D, 0x61, 0x67,
0x69, 0x6E, 0x65, 0x5F,
0x74, 0x68, 0x65, 0x5F,
0x68, 0x61, 0x70, 0x70,
0x69, 0x6E, 0x65, 0x73,
0x73, 0x5F, 0x6F, 0x66,
0x5F, 0x68, 0x69, 0x64,
0x69, 0x6E, 0x67, 0x5F,
0x74, 0x68, 0x65, 0x5F,
0x66, 0x6C, 0x61, 0x67,
0x21, 0x21, 0x21, 0x7D]
for n in crc32:
print(chr(n), end='')
where is flag 3
题目链接。这题没有做出来,参考别人的wp才知道怎么做——BugkuCTF-MISC题where is flag3_彬彬有礼am_03的博客-CSDN博客
但是,我按照这个wp复现的时,用的是一样的时间戳,并没得到想要的解压缩密码。看评论区也有遇到一样的问题的师傅,原因未知。bugku{Timestamp_can_also_hide_information!}
where is flag 4
题目链接。这题脑洞真大,我是看了提示(基本就是wp了)才知道怎么做的。
附件内容如下,一看就是base64编码的。
XQNGuAc9DEoRTAEFAygFDA6BDwz/DJSYbjpeOBBZCbg37dmLNYgNBA0JDAk/iQgC
AwEGBwaNDAoOAgQKbGJty24RbH8l73NOfIF/Q0y+wr9EkUHKq/oL4smYRouL38/0
w6Yv+yjdx6ZMuqfciszC/kD6jb3A/MCeyv3O887uychMv439SvPNvyn8hKov9Q0f
R62rUQEa0FHDT2hxHmXOdhR+q1oibuRm6khVT81ir3KUWuxgKp3fYggtCAhSBUm5
BxcOJBpHCQQcTQ4NCSMDDgqEBgbwBpCeZThQPh5YDLUz69yKM4AADQMEDg0+gAEL
AwEICwuGDQIjSAoMAg4HAAADDQwADQQLLgYNDg0JAwAODAQFAwoICm5ibsJrFmlw
KOx/TnmOckgLqQkMIQgDCAoIDQILBAMKCh4ODxuFDwc+K252vu4fwapI1wDXcgwf
px1pUVoBGtmvTN0M234FERj21DB42WyFrTjYCdB+BxpcCUeyAlIEbgQOBwkLAAsN
BxENAQMeDAZZqQoNDAAMDVzsCQsEBAcKAwMPDg==
直接base64解码会得到乱码。这里就需要观察一下解码后得到的字节流。字节流按16进制形式转为字符串,不足2位的左侧用0补齐,间隔一位就会看到zip文件的magic numbe 50 4B 03 04。存成zip文件,解压缩得到txt文件,内容是 flag{The_journey_of_looking_for_the_flag_is_really_fun!}
import base64
c_msg = 'XQNGuAc9DEoRTAEFAygFDA6BDwz/DJSYbjpeOBBZCbg37dmLNYgNBA0JDAk/iQgCAwEGBwaNDAoOAgQKbGJty24RbH8l73NOfIF/Q0y+wr9EkUHKq/oL4smYRouL38/0w6Yv+yjdx6ZMuqfciszC/kD6jb3A/MCeyv3O887uychMv439SvPNvyn8hKov9Q0fR62rUQEa0FHDT2hxHmXOdhR+q1oibuRm6khVT81ir3KUWuxgKp3fYggtCAhSBUm5BxcOJBpHCQQcTQ4NCSMDDgqEBgbwBpCeZThQPh5YDLUz69yKM4AADQMEDg0+gAELAwEICwuGDQIjSAoMAg4HAAADDQwADQQLLgYNDg0JAwAODAQFAwoICm5ibsJrFmlwKOx/TnmOckgLqQkMIQgDCAoIDQILBAMKCh4ODxuFDwc+K252vu4fwapI1wDXcgwfpx1pUVoBGtmvTN0M234FERj21DB42WyFrTjYCdB+BxpcCUeyAlIEbgQOBwkLAAsNBxENAQMeDAZZqQoNDAAMDVzsCQsEBAcKAwMPDg=='
ba = base64.b64decode(c_msg)
s = ''
for b in ba:
s += '{:>02x}'.format(b) # 按16进制形式转为字符串,不足2位的左侧用0补齐
print(s) # 观察一下得到的字节流
print(s[0::2]) # 发现要间隔一个字符才有zip的magic 50 4B 03 04
where is flag Plus
题目链接。
where is flag 番外篇
题目链接。
奇怪的png图片
题目链接。附件是一个很小的没有内容的png图片。binwalk分离出一个加密zip文件。我们称之为flag.zip。查看flag.zip内容有5个文件。
这里要复习一下加密压缩包的几种攻击方式:ARCHPR的暴力、ARCHPR的掩码、ARCHPR的字典、ARCHPR的明文、CRC32爆破。
- ARCHPR的暴力方式:顾名思义就是纯暴力破解,可以指定字符范围和密码长度。一般只适用于4-5位的字母数字组合。除此之外,暴力方式耗时极长,不推荐。
- ARCHPR的掩码方式:就是已知部分密码,需要暴力破解其余部分的密码,可以指定字符范围和掩码格式,掩码为“?”问好符号,在一定程度上减小爆破量。
- ARCHPR的字典方式:就是在一个字符串范围内尝试密码,这个字符串范围就是字典。需要准备字典文件。
- ARCHPR的明文文件方式:如果得到加密压缩中某一个文件的原文件(即CRC32相同的一个文件),将这一个文件放入压缩包中, ARCHPR 即可借此爆破出一组秘钥,从而解开压缩包。但需要确保两个文件一模一样,并且在压缩包内的压缩方式相同,甚至需要使用同一款压缩软件。
- ARCHPR的明文秘钥方式:加密秘钥后即可破解压缩包,无需爆破密码。
- CRC32爆破方式:每一个压缩包的文件都会有一个crc32检验(循环冗余码),用于检验文件是否被修改,当文件较小,小于等于6字节时就可以直接爆破文件的内容。工具CRC32里面默认允许的字符有限,需要自己扩充字符表。项目地址在GitHub - theonlypwner/crc32: CRC32 tools: reverse, undo/rewind, and calculate hashes
ARCHPR明文文件方式有2点要特别注意:
- 压缩README.zip的时候使用windows自带压缩工具,右键-发送到-压缩(zipped)文件夹,这样可以避免ARCHPR报错
- 明文攻击搜索秘钥一般十几秒就可以完成,然后自动尝试破解密码,此时可以停止爆破就能看到3个密钥,用秘钥就可以破解zip文件。
回到这个题目,显然不能用暴力、掩码、字典、明文方式。但是观察到几个文件的大小是4-6字节,考虑用CRC32爆破。
python crc32.py reverse 0x1D9F11E5
python crc32.py reverse 0xE3A35EED
python crc32.py reverse 0x694AEF57
python crc32.py reverse 0x59F1D4BE
得到结果如下
pass1.txt: 4 bytes: Awsd {0x41, 0x77, 0x73, 0x64}
pass2.txt: 4 bytes: 2021 {0x32, 0x30, 0x32, 0x31}
pass3.txt: 4 bytes: mzy0 {0x6d, 0x7a, 0x79, 0x30}
图片真实crc32.txt: 4 bytes: {0xde, 0x9f, 0xfd, 0x06}
verification checksum: 0x59f1d4be (OK)
6 bytes: 2KHAZK (OK)
6 bytes: 9070yo (OK)
6 bytes: FRzUbd (OK)
6 bytes: GNt8xi (OK)
6 bytes: I1WyA7 (OK)
6 bytes: NXl6nL (OK)
6 bytes: PzWHOM (OK)
6 bytes: WcPvef (OK)
6 bytes: YlOFYh (OK)
6 bytes: aDNRsJ (OK)
6 bytes: c5fqG_ (OK)
6 bytes: oKQbOD (OK)
6 bytes: pudqtH (OK)
6 bytes: uq8An2 (OK)
开始以为是加密码就是 Aws2021mzy0,尝试发现不对。再用pass1.txt、pass2.txt、pass3.txt做明文文件攻击,尝试发现也不对。图片真实crc32.txt及内容也不是16进制数,也不是对之前图片进行CRC32爆破。
最终,看了提示,说还有pass4(也就是 图片真实crc32.txt 的6个字节),尝试了一下密码居然是 Awsd2021mzy09070yo 。服了!!!解压缩后 flag.txt 内容为 flag{Pn9_Crc32_b2ut3_f0rce}
Next
题目链接。