Stack Overflows for Beginners: 1.0.1 Walkthrough
| reference | Stack Overflows for Beginners: 1.0.1 |
| target ip | 192.168.1.31 |
Open a bind shell to make the screen larger, since SSH is not started in the target:
levelOne
/home/level0/levelOne.c strcpy:
Load the program with r2:
1 | r2 -d ./levelOne -e dbg.profile=levelOne.rr2 -A |
1 | #!/usr/bin/rarun2 |
After variable key has been assigned:
After strcpy:
Before cmp:
Escalate from user level0 to user level1:
levelTwo
sym.spawn
dcu sym.hello, db at leave:
1 | mov esp, ebp |
Return address is located at ebp+4, so before ret:
Step one instruction:
1 |
|
/home/level1/levelTwo.rr2:
Escalete from user level1 to user level2:
levelThree
Determine offset:
1 | #!/usr/bin/rarun2 |
Before ret of sym.overflow, which reveals the offset is 268:
checksec with slimm609/checksec.sh:
Find jmp esp in /lib32/libc.so.6:
1 | objdump -D /lib32/libc.so.6 | grep "ff e4" |
The base address of libc from ldd is wrong.
Use LD_TRACE_LOADED_OBJECTS:
Or r2 instead:
Add shellcode to levelThree.rr2, which is included in Linux/x86 - execve /bin/sh Shellcode (25 bytes) Walkthrough:
Escalate from user level2 to user level3:
levelFour
Offset is 28.
The return address and shellcode is same as levelThree.
levelFour.rr2:
Escalate from user level3 to user level4:
levelFive
Offset is 16.
1 | #!/usr/bin/rarun2 |
Exploit Development - GETS and Shellcode.setresuid (or just setuid) with Linux/x86 - stdin re-open and /bin/sh execute:
Escalate from user level4 to user root: