-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexploit.py
61 lines (46 loc) · 1.48 KB
/
exploit.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# This exploit template was generated via:
# $ pwn template
from pwn import *
# Set up pwntools for the correct architecture
context.update(arch='i386|amd64')
exe = './binary'
rop = ROP(exe)
# Many built-in settings can be controlled on the command-line and show up
# in "args". For example, to dump all data sent/received, and disable ASLR
# for all created processes...
# ./exploit.py DEBUG NOASLR
def start(argv=[], *a, **kw):
'''Start the exploit against the target.'''
if args.GDB:
return gdb.debug([exe] + argv, gdbscript=gdbscript, *a, **kw)
else:
return process([exe] + argv, *a, **kw)
# Specify your GDB script here for debugging
# GDB will be launched if the exploit is run via e.g.
# ./exploit.py GDB
gdbscript = '''
continue
'''.format(**locals())
#===========================================================
# EXPLOIT GOES HERE
#===========================================================
io = start()
# change the recvuntil string and crash the binary
io.recvuntil('>\n')
io.sendline(cyclic(1000))
io.wait()
# get core file and let's read in the values at time of crash
core = io.corefile
base = core.rsp # eip/rsp
# get the pattern offset
if pattern_offset <= 0:
print "Couldn't find the offset"
else:
print "Pattern offset in hex: %s" % hex(pattern_offset)
# if you want to run a second time with GDB support
args.GDB = True
io = start()
# finish with an interactive
io.interactive()