session:solution:12
This is an old revision of the document!
Table of Contents
Session 12 Solutions
Gadget Tut
TODO
Echo Service
By going through the echo_service.c
file we see that in the echo_service()
function we use read()
for reading 4096
bytes when we only have 1024
available for a the buf
buffer. We can use this to create a return-oriented programming (ROP) attack.
Let's first consider our steps.
- We will create a payload that overflows the
buf
buffer and rewrites the return address of theecho_service()
function triggering the attack (the ROP chain). - We will update the payload issue the following calls through the ROP chain, as also indicated in the task:
dup2(sockfd, 1);
dup2(sockfd, 0);
system(“/bin/sh”);
- We will start the server and then we will use
netcat
to send the payload to the server to trigger the attack.
We aim for the stack to be the one below:
0x00000000 ... start address of buf ... +--------------------------------+ | dup2() address | <--- return address for echo_service() +--------------------------------+ | pop_pop_ret gadget address | +--------------------------------+ | 4 | +--------------------------------+ | 1 | +--------------------------------+ | dup2() address | +--------------------------------+ | pop_pop_ret gadget address | +--------------------------------+ | 4 | +--------------------------------+ | 0 | +--------------------------------+ | system() address | +--------------------------------+ | junk | +--------------------------------+ | "/bin/sh" address | +--------------------------------+ ... 0xFFFFFFFF
session/solution/12.1437654050.txt.gz · Last modified: (external edit)