fix: incompatibilities with new hugo version
This commit is contained in:
parent
44404f4034
commit
b5179b97ac
3 changed files with 24 additions and 24 deletions
|
@ -3,8 +3,6 @@ title: "Sécurité logicielle : TD 9 Hackme"
|
|||
date: 2023-04-14
|
||||
tags: ["Assembleur", "x86"]
|
||||
categories: ["Sécurité logicielle", "TD"]
|
||||
author:
|
||||
- Yorick Barbanneau
|
||||
---
|
||||
|
||||
## Level 0
|
||||
|
@ -15,7 +13,7 @@ Le programme demande à l'utilisateur une saisie, lorsque je rentre un texte, i
|
|||
répond `Nope`:
|
||||
|
||||
```
|
||||
./hackme
|
||||
./hackme
|
||||
This is level 0, welcome! What do you have to say?
|
||||
bonjour
|
||||
Nope!
|
||||
|
@ -66,14 +64,14 @@ GCC: (Debian 8.3.0-6) 8.3.0
|
|||
```
|
||||
|
||||
`IAmSuperSecure` parait relativement intéressant. Mais à ce stade rien n'est
|
||||
sûr. Mais juste comme ça essayons tout de même un `lstrace` sur notre programme:
|
||||
sûr. Mais juste comme ça essayons tout de même un `lstrace` sur notre programme:
|
||||
|
||||
```
|
||||
ltrace ./hackme
|
||||
ltrace ./hackme
|
||||
__libc_start_main(0x80490a0, 1, 0xffb45f24, 0x8049590 <unfinished ...>
|
||||
wprintf(0x804a064, 0xf7f988cb, 0xf7c1ca2f, 0xf7f804a0This is level 0, welcome! What do you have to say?
|
||||
) = 51
|
||||
getline(0xffb45e18, 0xffb45e1c, 0xf7e1d620, 0xf7c76ca5MyBadPassword
|
||||
getline(0xffb45e18, 0xffb45e1c, 0xf7e1d620, 0xf7c76ca5MyBadPassword
|
||||
) = 14
|
||||
strcmp("MyBadPassword", "IAmSuperSecure") = 1
|
||||
wprintf(0x804a048, 0xf7fbca40, 0, 0x80492c2Nope!
|
||||
|
@ -143,7 +141,7 @@ Essayons donc de comprendre comment. Recommençons l'exécution avec un `watch`
|
|||
la chaine contenue sur le programme :
|
||||
|
||||
```
|
||||
(gdb) wa * (char*)0x804d030
|
||||
(gdb) wa * (char*)0x804d030
|
||||
Hardware watchpoint 1: * (char*)0x804d030
|
||||
[...]
|
||||
|
||||
|
@ -171,10 +169,10 @@ Dump of assembler code for function z:
|
|||
0x0804932f <+15>: nop
|
||||
|
||||
0x08049330 <+16>: sub $0x9,%eax ; retire 0x9 à %eax
|
||||
|
||||
|
||||
0x08049333 <+19>: add $0x1,%edx ; incrémente %edx
|
||||
|
||||
0x08049336 <+22>: mov %al,-0x1(%edx) ; remets le caractère déchiffré
|
||||
0x08049336 <+22>: mov %al,-0x1(%edx) ; remets le caractère déchiffré
|
||||
; dans sa chaine
|
||||
|
||||
=> 0x08049339 <+25>: movzbl (%edx),%eax ; copie le caractère courant
|
||||
|
@ -257,7 +255,7 @@ chaque caractère.
|
|||
|
||||
\pagebreak
|
||||
|
||||
Pour déchiffrer le mot de passe écrit dans le programme, j'ai écris un script
|
||||
Pour déchiffrer le mot de passe écrit dans le programme, j'ai écris un script
|
||||
Python :
|
||||
|
||||
```python
|
||||
|
@ -315,7 +313,7 @@ End of assembler dump.
|
|||
```
|
||||
|
||||
Voici deux comparaisons intéressantes. La première s'effectue sur les 4 octets à
|
||||
l'adresse contenue dans `%eax`. La suivante sur le contenu à l'adresse de
|
||||
l'adresse contenue dans `%eax`. La suivante sur le contenu à l'adresse de
|
||||
`%eax + 0x4`.
|
||||
|
||||
\pagebreak
|
||||
|
@ -363,7 +361,7 @@ technique du `ctrl+c` puis `bt`:
|
|||
#7 0x080490d7 in main ()
|
||||
```
|
||||
|
||||
C'est la fonction `aa()` qui appelle `r()` (fonction de saisie), intéressons
|
||||
C'est la fonction `aa()` qui appelle `r()` (fonction de saisie), intéressons
|
||||
nous à elle en la désassemblant :
|
||||
|
||||
```
|
||||
|
@ -402,7 +400,7 @@ End of assembler dump.
|
|||
```
|
||||
|
||||
Cette fonction appelle une autre : `bb()`. C'est elle qui semble se charger de
|
||||
la vérification de la saisie. Avant de l'étudier, voyons comment `aa()` met les
|
||||
la vérification de la saisie. Avant de l'étudier, voyons comment `aa()` met les
|
||||
éléments en place avant de l'appeler :
|
||||
|
||||
* mets l'adresse vers la zone mémoire contenant la saisie utilisateur dans
|
||||
|
@ -604,7 +602,7 @@ la table ascii, utilisons les mathématiques:
|
|||
\nonumber\text{donc } 0 \oplus A \oplus A \oplus A \oplus A \oplus B = B
|
||||
\end{gather}
|
||||
|
||||
Ansi saisir un même caractère un nombre pair de fois suivi de `C`, alors c'est
|
||||
Ansi saisir un même caractère un nombre pair de fois suivi de `C`, alors c'est
|
||||
gagné :
|
||||
|
||||
```
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue