Web - Serveur

dimanche 16 janvier 2022, 15:21  #1
Web - Serveur - PHP - Unserialize Pop Chain
Spinae
  • 3 posts

Bonjour à tous,

Voilà plusieurs soirées que je passe sur le challenge "PHP - Unserialize Pop Chain". Je pense être sur une piste mais il doit me manquer quelque chose ou une notion pour que je fasse le lien entre mes différentes réflexions. Aussi, pourriez-vous m’indiquer si mes pistes sont bonnes........ou à la ramasse :D, svp ?

Ne connaissant pas du tout PHP, j’a recherché pas mal d’informations sur la notion de serialize / unserialize, les méthodes magiques et la possibilité de les exploiter. J’ai également lu les documents fournits par le challenge.

Suite à ça, j’ai réussi, de façon indépendante (aka avec deux codes différents), à faire afficher le "echo [YOU] :....." de la classe WakyWaky avec une chaîne de mon choix, et le message "[FRIEND] : Hm.. you don’t see...." de la méthode __destruct de la classe GetMessage.

J’imagine qu’il faut mixer les deux approches pour arriver à un echaînement (principe du POP Chain), cependant :
 j’ai l’impression de ne jamais passer dans la méthode __tostring() de la classe WakyWaky alors que je le devrais si j’ai bien compris (au vu du echo [YOU] qui affiche mon message)
 le fait que j’affiche le message [FRIEND] :... évoqué avant montre que ma variable receive n’est ni égale à HelloBooooooy, ni de type string, ce que je ne comprends pas.

De mon point de vue, la méthode _construct() n’est utilisée que lors de l’instanciation d’un nouvel objet de la classe GetMessage, c’est à dire au moment d’un serialize (qu’on n’a pas ici) ou de l’instanciation explicite, comme on trouve dans la classe WakyWaky et sa méthode __tostring (dans laquelle je ne passe pas à priori).

Suis-je sur la bonne piste ?
Merci d’avance de vos éclaircissements.

EDIT : je viens de trouver un payload qui affiche les deux messages évoqués à la suite.

jeudi 20 janvier 2022, 11:19  #2
Web - Serveur - PHP - Unserialize Pop Chain
Spinae
  • 3 posts

Bonjour,

J’ai enfin trouvé et compris la mécanique amenant à devoir afficher le flag. Cependant, le payload que j’utilise dans le challenge ne semble pas fonctionner ; il y aurait-il des différences de fonctionnement entre les différentes versions de PHP ?

J’ai essayé les deux approches, l’une déjà serialisé et l’autre à sérialiser (avec la fonction serialize) mais rien à faire.

Merci d’avance de votre aide.

vendredi 13 mai 2022, 19:05  #3
Web - Serveur - PHP - Unserialize Pop Chain
tchetche
  • 2 posts

La method __construct est appellé si un nouvel objet est instancié, c’est le constructeur d’une classe php, il n’est pas appellé pour serialize. Il faut bien réfléchir dans quel circonstance chaque méthode est appellé pour résoudre le challenge. Enfin n’oublie pas le nom du challenge contient souvent un petit indice ;)

vendredi 10 juin 2022, 16:21  #4
Web - Serveur - PHP - Unserialize Pop Chain
FPASSELERG
  • 7 posts

Bonjour à vous
J’arrive exactement à la même chose que Spinae avec les mêmes soucis (pas de passage dans ToString)
J’arrive à passer le test dans __destruct avec la bonne valeur pour receive mais rien à faire pour getflag.. il reste à false (comme je ne passe pas dans toString de WakiWaki forcément...)
réfléchir aux évènements qui déclenchent le passage dans les fonctions magiques.. ok .. ok mais il me semblait que le passage dans toString d’une classe se faisait quand on faisait un echo de l’attribut ? non ?
le nom du challenge tu dis... POP POP POP ? en trois fois ?
Merci de votre aide en tous les cas !

vendredi 10 juin 2022, 17:33  #5
Web - Serveur - PHP - Unserialize Pop Chain
Spinae
  • 3 posts

Merci Tchetche ; j’avoue que je n’ai pas encore résolu le challenge, je l’avais mis de côté pour m’aérer l’esprit...........sans être revenu dessus depuis.
Faut que je me replonge dans mes notes avec tes indices.

Merci encore.