Chybeta

TWCTF 2017-Rev Rev Rev-writeup

TWCTF 2017-Rev Rev Rev-writeup
爆破。warmup题

题目提供了一个64位elf文件。用IDA打开后按f5没反应。gdb打开,进行动态调试。

程序的基本流程就是,将你的输入读入,然后做个加密处理,比较看是否正确。在0x0804866D处有一个strcmp,我们在这里下个断点。

1
2
gdb-peda$ b *0x0804866D
Breakpoint 1 at 0x804866d

然后运行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Starting program: /root/Desktop/rev_rev_rev-a0b0d214b4aeb9b5dd24ffc971bd391494b9f82e2e60b4afc20e9465f336089f
Rev! Rev! Rev!
Your input: aaaa
[----------------------------------registers-----------------------------------]
EAX: 0xffffd12b ("yyyy")
....
[-------------------------------------code-------------------------------------]
0x804866c: push eax
=> 0x804866d: call 0x8048410 <strcmp@plt>
0x8048672: add esp,0x10
Guessed arguments:
arg[0]: 0xffffd12b ("yyyy")
arg[1]: 0x8048870 --> 0x65d92941

借助peda插件的帮忙,可以看到我们输入了aaaa后,经过加密变成了yyyy,并且与内存0x8048870处的数据比较。我们把这段内存提取出来看看:

1
2
3
4
5
gdb-peda$ x/32bx 0x8048870
0x8048870: 0x41 0x29 0xd9 0x65 0xa1 0xf1 0xe1 0xc9
0x8048878: 0x19 0x09 0x93 0x13 0xa1 0x09 0xb9 0x49
0x8048880: 0xb9 0x89 0xdd 0x61 0x31 0x69 0xa1 0xf1
0x8048888: 0x71 0x21 0x9d 0xd5 0x3d 0x15 0xd5 0x00

所以我们可以利用输入与断点结合的方式,获取每个可显示字符的加密后的结果,然后根据0x8048870处的数据反推出flag。

1
2
3
4
5
6
7
8
9
10
11
12
gdb-peda$ r
Starting program: /root/Desktop/rev_rev_rev-a0b0d214b4aeb9b5dd24ffc971bd391494b9f82e2e60b4afc20e9465f336089f
Rev! Rev! Rev!
Your input: abcdefghijklmnopqrstuvwxyz
省略。
gdb-peda$ x/26bx 0xffffd12b
0xffffd12b: 0xa1 0x61 0xe1 0x11 0x91 0x51 0xd1 0x31
0xffffd133: 0xb1 0x71 0xf1 0x09 0x89 0x49 0xc9 0x29
0xffffd13b: 0xa9 0x69 0xe9 0x19 0x99 0x59 0xd9 0x39
0xffffd143: 0xb9 0x79

根据上面的调试结果,可以得出如下的对应关系:

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
0xa1 => z
0x61 => y
0xe1 => x
0x11 => w
0x91 => v
0x51 => u
0xd1 => t
0x31 => s
0xb1 => r
0x71 => q
0xf1 => p
0x09 => o
0x89 => n
0x49 => m
0xc9 => l
0x29 => k
0xa9 => j
0x69 => i
0xe9 => h
0x19 => g
0x99 => f
0x59 => e
0xd9 => d
0x39 => c
0xb9 => b
0x79 => a

然后接下来根据调试得到大写字母和数字和符号的对应关系。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
gdb-peda$ r
Starting program: /root/Desktop/rev_rev_rev-a0b0d214b4aeb9b5dd24ffc971bd391494b9f82e2e60b4afc20e9465f336089f
Rev! Rev! Rev!
Your input: ABCDEFGHIJKLMNOPQRSTUVWXYZ
省略。
gdb-peda$ x/26bx 0xffffd12b
0xffffd12b: 0xa5 0x65 0xe5 0x15 0x95 0x55 0xd5 0x35
0xffffd133: 0xb5 0x75 0xf5 0x0d 0x8d 0x4d 0xcd 0x2d
0xffffd13b: 0xad 0x6d 0xed 0x1d 0x9d 0x5d 0xdd 0x3d
0xffffd143: 0xbd 0x7d
gdb-peda$ r
Starting program: /root/Desktop/rev_rev_rev-a0b0d214b4aeb9b5dd24ffc971bd391494b9f82e2e60b4afc20e9465f336089f
Rev! Rev! Rev!
Your input: {}0123456789
省略。
gdb-peda$ x/12bx 0xffffd12b
0xffffd12b: 0x63 0xe3 0x13 0x93 0x53 0xd3 0x33 0xb3
0xffffd133: 0x73 0xf3 0x41 0x21

最后根据对应关系得到flag:

1
TWCTF{qpzisyDnbmboz76oglxpzYdk}

微信扫码加入知识星球【漏洞百出】
chybeta WeChat Pay

点击图片放大,扫码知识星球【漏洞百出】

本文标题:TWCTF 2017-Rev Rev Rev-writeup

文章作者:chybeta

发布时间:2017年09月02日 - 12:09

最后更新:2017年09月03日 - 22:09

原始链接:http://chybeta.github.io/2017/09/02/TWCTF-2017-Rev-Rev-Rev-writeup/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。