Bonjour, je code avec des moufles.
Hello les moulasses,
Aujourd'hui on va causer des moufleurs... des gens qui codent avec des moufles.
Squid.
Chez squid, ils ont des moufleurs professionnels qui laissent des asserts dans le code qui sont basés sur des variables qui sont indirectement controlables par l'utilisateur (entête HTTP de réponse du serveur HTTP).
Tout se passe dans la récupération des numéros de version du protocole HTTP dans la réponse du serveur (HTTP/1.0 200 OK)... Voici le snippet pour la récupération de la version majeure:
162 int i = 0;
163 int retcode;
164 int maj = -1, min = -1;
(...)
257 /* next should be 1 or more digits */
258 maj = 0;
259 for (; i < hmsg->req_end && (xisdigit(hmsg->buf[i])); i++) {
260 maj = maj * 10;
261 maj = maj + (hmsg->buf[i]) - '0';
262 }
(...)
296 assert(maj != -1);
Comme maj est déclaré en signed int, nous pouvons mettre une grosse valeur dans la version HTTP pour, qu'après la boucle, maj soit égale à -1 et que ça assert en beauté. Taddam.
C'est la même chose pour la récupération du la version mineure. C'est la classe les asserts en prod. \o/
Wireshark.
*privatejoke* "Vous connaissez wireshark ? C'est un outil très puissant." *privatejoke*
Chez wireshark, ils ont aussi de belles petites moufles.
Banzaï !
Aujourd'hui on va causer des moufleurs... des gens qui codent avec des moufles.
Squid.
Chez squid, ils ont des moufleurs professionnels qui laissent des asserts dans le code qui sont basés sur des variables qui sont indirectement controlables par l'utilisateur (entête HTTP de réponse du serveur HTTP).
Tout se passe dans la récupération des numéros de version du protocole HTTP dans la réponse du serveur (HTTP/1.0 200 OK)... Voici le snippet pour la récupération de la version majeure:
162 int i = 0;
163 int retcode;
164 int maj = -1, min = -1;
(...)
257 /* next should be 1 or more digits */
258 maj = 0;
259 for (; i < hmsg->req_end && (xisdigit(hmsg->buf[i])); i++) {
260 maj = maj * 10;
261 maj = maj + (hmsg->buf[i]) - '0';
262 }
(...)
296 assert(maj != -1);
Comme maj est déclaré en signed int, nous pouvons mettre une grosse valeur dans la version HTTP pour, qu'après la boucle, maj soit égale à -1 et que ça assert en beauté. Taddam.
C'est la même chose pour la récupération du la version mineure. C'est la classe les asserts en prod. \o/
Wireshark.
*privatejoke* "Vous connaissez wireshark ? C'est un outil très puissant." *privatejoke*
Chez wireshark, ils ont aussi de belles petites moufles.
Banzaï !
0 Comments:
Post a Comment
<< Home