2021DASCTF Misc red_vs_blue

(第一次接触到需要nc连接的杂项题)

2021DASCTF Misc red_vs_blue_第1张图片

没有nc的需要先安装(Linux在终端输入apt install netcat)

安装完成后,直接nc xxxxxx xxxx 

2021DASCTF Misc red_vs_blue_第2张图片

输入r/b猜测红蓝队的胜利,连续猜对66次就可以得到flag2021DASCTF Misc red_vs_blue_第3张图片

如果错了就要重新猜(答案顺序不变),但是90秒后会自动断开连接,重新连接后答案顺序会改变,所以要人力无法完成的,要用脚本在90秒内跑出来,脚本如下: 

from pwn import *       #需要用到pwntools模块
context.log_level = 'debug'
io = remote('node4.buuoj.cn', 25900)        #连接,相当于nc,注:25900是端口,每一次开靶机基本上都不同
payload = ['r'] * 66    #先把答案设置成66个‘r’
restart = 1
while restart:
    restart = 0        #先把restart改为0,避免死循环
    for i in range(66):        #循环发送答案
        io.recvuntil('choose one [r] Red Team,[b] Blue Team:')        #接收函数,一直接收,直到接收到设定的字符串才进行下一语句
        io.sendline(payload[i])        #发送函数,上传第i个答案
        io.recvuntil('Team')
        io.recvuntil("Team\n")        #因为输入一个答案后会有两个'Team'的字符串,所以接收两个‘Team'后进行下一语句
        p = io.recv(10)        #接收函数,可控制接收的字符数量,这里接收10个字符
        if 'The number' in p:        
            continue        #接收到'The number'则说明这个答案对了,继续进行下一个for语句发送下一个答案
        else:
            io.recvuntil('Play again? (y/n): ')         #如果没有接收到'The number',则第i个答案错误,接收完字符
            payload[i] = 'b'        #将第i个答案改正
            io.sendline('y')        #发送‘y’重新游戏
            restart = 1         #将restart改为1,将会重新while循环
            break
io.interactive()

该脚本需要用到Python的pwntools模块,安装方法:

pip install pwntools

结果:2021DASCTF Misc red_vs_blue_第4张图片

flag:

flag{9f42b688-4127-4558-a7d0-776a14997d17}

你可能感兴趣的:(2021DASCTF Misc red_vs_blue)