Defcon CTF XX Grab Bag 300 Solution

Defcon CTF XX Grab Bag 300 Solution

By fqj1994

此题连上去可以看到几组像动态密码卡一样的东西,以及用户输入的四个数字。

每次题目给出四个动态密码卡一样的东西,以及前三个卡对应用户输入的密码。

仔细观察,可以发现,在每个动态密码卡用户输入的密码位置是对应的。

比如说密码的第一个数字,在每个密码卡上的位置都是(i,j)

于是可以通过前三个用户输入的密码判断出位置,根据第四个矩阵,得到密码。

但是肉眼的速度是不够的。

于是需要写程序。

首先,需要一个程序移除非数字,并且移除字符的修饰(比如颜色、背景等等)

这个程序参见remove.py

import re

while True:

s = raw_input()

if ‘DD GOTP’ not in s and ‘Enter’ not in s:

s=re.sub(r’\[.{7}m’, ”, s)

s=re.sub(r’Sun Jun.*2′, ”, s)

s=re.sub(r’User entered:’, ”, s)

print s

然后,需要一个程序来分析矩阵数字。代码如下:

#include <stdio.h>

int main() {

int i,j,k,kk;

int t[4][6][6];

int m[3][4];

for (;;) {

for (i = 0; i < 4;i++) {

for (j = 0; j < 6;j++)

for (k = 0; k < 6;k++)

scanf(“%d”, &t[i][j][k]);

if (i != 3) {

for (j = 0; j < 4;j++)

scanf(“%d”, &m[i][j]);

}

}

for (kk = 0; kk < 4; kk++) {

for (i = 0; i < 6; i++)

for (j = 0; j < 6; j++) {

int mark =1;

for (k = 0; k < 3;k++)

if (t[k][i][j] != m[k][kk]) {

mark = 0;

break;

}

if (mark) {

printf(“%d “, t[3][i][j]);

goto e;

}

}

e:;

}

puts(“”);

}

}

然后进行以下操作

gcc solve.c

nc HOST PORT | tee log

在另一个终端窗口进行:

cat log | python -u remove.py | tee log2 | ./a.out

这样,每次在另一个终端就能看到不断输出的答案。

只要手动输入进去就好了。

大概会重复很多次。

最后你会得到以下的输出:

***NOVABANK ATM menu***

Balance: $9238740982570237012935.32

1) withdraw

2) deposit

3) transfer

4) exit

<disconnected>

自然:key就是那个balance

即9238740982570237012935.32

此条目发表在技术报告分类目录。将固定链接加入收藏夹。

评论功能已关闭。