This shows you the differences between two versions of the page.
cns:labs:lab-08 [2020/12/14 14:20] razvan.deaconescu [3. ROP: Find the buffer] |
cns:labs:lab-08 [2021/12/14 13:28] (current) razvan.deaconescu |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Lab 08 - Return Oriented Programming ====== | + | ====== Lab 08 - Return-Oriented Programming ====== |
===== Introduction ===== | ===== Introduction ===== | ||
Line 293: | Line 293: | ||
The buffer address is stored in a register when ''ret'' is executed. | The buffer address is stored in a register when ''ret'' is executed. | ||
- | **You can find a gadget that jumps / calls that register.** | + | There is no need for a memory disclosure / information leak of the buffer address. **You can find a gadget that jumps / calls that register.** |
Use ''%%ropsearch ... libc%%''. Instead of ''%%...%%'' place the instructions you search. | Use ''%%ropsearch ... libc%%''. Instead of ''%%...%%'' place the instructions you search. | ||
Line 306: | Line 306: | ||
io = process(["./ropbuf", payload]) # Run ./ropbuf using payload as command line argument. | io = process(["./ropbuf", payload]) # Run ./ropbuf using payload as command line argument. | ||
</code> | </code> | ||
+ | </note> | ||
+ | |||
+ | <note important> | ||
+ | You can't send NUL-bytes as part of command line arguments. When constructing the payload, use ''%%pack(...).strip(b\"x00")%%''. | ||
</note> | </note> | ||