Add TD5 q3 (first part)
This commit is contained in:
parent
72564e2e2d
commit
4f61441bb9
7 changed files with 229 additions and 0 deletions
|
@ -2,6 +2,9 @@
|
|||
title: "Sécurité logicielle : TD5 stack overflow et shellcode"
|
||||
date: 2023-02-17
|
||||
tags: ["Assembleur", "x86"]
|
||||
author:
|
||||
- Yorick Barbanneau
|
||||
- Gwendal Aupee
|
||||
categories: ["Sécurité logicielle", "TD"]
|
||||
---
|
||||
|
||||
|
@ -142,3 +145,51 @@ diférentes parties sont délimitées par des crochets:
|
|||
Lors de l'instruction pas à pas du code assembleur, nous pouvons observer la
|
||||
mise en place des arguments de notre appel système dans les différents
|
||||
registres, notamment *0x3b* dans `rax`.
|
||||
|
||||
## question 3
|
||||
|
||||
Lors de l'exécution du `strace` sur notre exécutable `shellcode` nous voyons
|
||||
bien apparaitre les deux appels systèmes `creat` et `exit`:
|
||||
|
||||
```
|
||||
execve("./shellcode", ["./shellcode"], 0x7ffd7e08f160 /* 44 vars */) = 0
|
||||
creat("/tmp/pwn", 0666) = 3
|
||||
exit(42) = ?
|
||||
+++ exited with 42 +++
|
||||
```
|
||||
|
||||
L'exécution d'`objdumb -d -x` afin d'afficher les adresses des constantes nous
|
||||
permet de vois que c'est bien l'adresse de `filename` qui est placée dans `%rdi`
|
||||
avant d'appeler `creat` (appel système `0x55`).
|
||||
|
||||
```
|
||||
[...]
|
||||
SYMBOL TABLE:
|
||||
0000000000402000 g .data 0000000000000000 filename
|
||||
0000000000401000 g .text 0000000000000000 _start
|
||||
0000000000402009 g .data 0000000000000000 __bss_start
|
||||
0000000000402009 g .data 0000000000000000 _edata
|
||||
0000000000402010 g .data 0000000000000000 _end
|
||||
|
||||
Déassemblage de la section .text :
|
||||
|
||||
0000000000401000 <_start>:
|
||||
401000: 48 c7 c6 b6 01 00 00 mov $0x1b6,%rsi
|
||||
401007: 48 c7 c7 00 20 40 00 mov $0x402000,%rdi
|
||||
40100e: 48 c7 c0 55 00 00 00 mov $0x55,%rax
|
||||
401015: 0f 05 syscall
|
||||
401017: 48 c7 c7 2a 00 00 00 mov $0x2a,%rdi
|
||||
40101e: 48 c7 c0 3c 00 00 00 mov $0x3c,%rax
|
||||
401025: 0f 05 syscall
|
||||
```
|
||||
|
||||
Une fois `shellcode.S` modifié et compilé, nous avons extrait les **opcodes**
|
||||
avec une cible de notre `Makefile`. Cette cible créée un fichier `opcode.txt`
|
||||
prêt à importer dans notre code `C`.
|
||||
|
||||
Avec cette méthode, nous n'avons pas à nous soucier de *l'abréviation* des 0
|
||||
par `objdump`. Et en plus on évite les erreurs de saisie.
|
||||
|
||||
Après l'incorporation de notre *shellcode* dans le fichier `exploit-test.c`, sa
|
||||
compilation et son execution, le fichier `/tmp/pwn` est bien créé.
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue