-
-
[原创]无脑暴力爆破 第二题 南冥神功
-
2021-5-12 18:46 4684
-
首先还是需要看懂本题,本题就是走出迷宫,根据判断条件需要将所有的校验表里的0全部换为1,并且每个输入可以修改两个位置(走两步)
1 2 3 4 5 6 7 8 9 |
|
但该题似乎存在一个bug,可以一个一个字符去验证,只有当输入的都为有效值时才会进入本题的校验部分,假设第一次输入为"G",存在2次有效修改则会进入校验部分。再次输入"G0"时,因为0没有存在两次有效修改,所以不会进入校验部分。所以关键点来了,我们可以在程序的跳入校验的部分进行修改(本次案例中我将其跳转到输出"Good Job"部分作为提示,并且修改后程序为“a.exe”),通过对修改后的程序使用进程通信进行爆破。
由于每个有效输入可以修改两个位置,通过计算迷宫中存在多少个'0',将其个数 / 2,则可以得到flag的长度为23,整个暴力脚本如下。
from multiprocessing import Pipe, process import os import sys import subprocess table = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" key = "S01001001111001001000010111110011010010000100100111101110101001111010101100101010001001100" flag_len = int(key.count('0') / 2) def brute(flag): for ch in table: tmpflag = flag + ch process = subprocess.Popen('F:\\ctf\\KCTF2021Q2\\2\\a.exe', shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE) #F:\\ctf\\KCTF2021Q2\\2\\a.exe inputdata = tmpflag + "\r\n" process.stdin.write(inputdata.encode('utf-8')) outputdata = process.communicate()[0] process.kill() if b"Good job" in outputdata: if len(tmpflag) == flag_len: print("[+] Found flag: " + tmpflag) brute(tmpflag) return def main(): brute("") return if __name__ == '__main__': main()
最后flag为GJ0V4LA4VKEVQZSVCNGJ00N
[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界