BUUCTF [ACTF新生赛2020]SoulLike

大开眼界!

main函数逻辑很清晰
image
只是最最关键的sub_83A
image
反编译不了

尝试阅读汇编代码
有一个很有意思的点:
image
这里有个printf("wrong on %d")
也就是根据我们输入的flag程序会告诉我们是否出错!
由于flag本体只有12位 所以可以利用pwn模块本地逐一爆破
思路就是从"actf{"开始枚举构造payload 正则提取 recv中的数字
如果数字与当前枚举位相同 就继续for循环 否则就到下一位置
exp:

from pwn import *
import re

context.log_level = 'debug'
# p = process('./pwn')
flag = "actf{"
pos = 0
while True:
    for ch in range(32,128):
        p = process('./pwn')
        ch = chr(ch)
        payload = flag + ch
        print(flag)
        # p.sendlineafter("input flag:",payload)
        p.sendline(payload)
        r = str(p.recvline())
        num = re.findall("\d+",r)[0]
        num = int(num)
        # print(num)
        if num == pos:
            print('No')
        elif num==pos+1:
            print(r)
            flag += ch
            pos += 1
            p.close()
        p.close()
    if pos>11:
        break

print(flag)

Linux跑一跑就能得到flag了
image
actf{b0Nf|Re_LiT!}

posted @ 2023-09-30 18:16  N0zoM1z0  阅读(64)  评论(0编辑  收藏  举报