web fingerprint with 414 error

Hello, je sais, mon prochain article devait porter sur cryptsetup, mais manque de temps pour le préparer, et ayant un petit (tout petit) article sous la main, voilà quoi.

Si vous avez lu le titre, le but du jeu est de découvrir quel serveur est derrière un site, ou de découvrir s’il y a un proxy devant.

L’envoi d’une URL trop longue, génère une erreur HTTP 500, et encore plus longue, une 414.

Chaque serveur web renvoit une erreur 414 selon un nombre différent de caractères qui suivent le fqdn.

Vous avez compris où je veux en venir ?

Ok, vous savez donc ce qu’il vous reste a faire, pour vous aider, j’ai déjà testé quelques serveurs, voici les résultats :

Apache : 8177
ii$ : 16383
Squid :  32652
GWS (google) : 2048
Lighttpd : 90585, parfois 90584

J’ai pas codé de tool, je ne sais pas si c’est encore super interressant.
Pour faire des test, un simple :
wget -O – http://example.com/$(python -c « print ‘a’*8177″) suffit.

Le but de cet article est :
1) Récupérer les valeurs d’autres serveurs web,
2) Savoir, sans passer par une recompilation, si il est possible de changer cette valeur.

Cet article est from scratch, merci de ne pas me signaler mes erreurs, elles sont intentionnelles.

Tags: , , , ,

4 Comments

  • j0rn dit :

    lol ^ ecrire bourré saimal vvoyeezz :’)

    wget -O – http://nginx.net/$(perl -e ‘print « A »x4080′) // 404 Not Found
    Au delà on prend du 414 Request-URI Too Large

    wget -O – http://www.zope.org/$(perl -e ‘print « A »x4003′)
    1 – 4002 : 404 Not Found
    4003 – 4070 : 504 Gateway Time-out
    4071 – 14380 : 400 Bad Request
    14381 – * : 414 Request-URI Too Long

    Effectivement c’est assez interessant les résultats (on notera au passage le « Too Large » de nginx VS « Too Long » de Zope par exemple ;))

    On peut facilement imaginer que les différentes valeurs identifiées sont directement liées au buffer qui stocke la requête dans le code, à vérifier mais il me semble pas qu’on puisse facilement modifier ces valeurs (par modif d’un swicth dans un fichier de conf par exemple)
    Si on part du principe (peut-etre faux ?) que modifier le code ainsi a un coût non négligeable, on peut arguer que dans la grande majorité des cas ce genre de tests remplira bien sa mission pour effectuer la prise d’empreintes d’un serveur web, reste que c’est juste super bruyant :P

  • StalkR dit :

    En ce qui concerne Apache (v2), cette limite est dans la constante DEFAULT_LIMIT_REQUEST_LINE et correspond à la taille maximale de la ligne de requête. Par défaut c’est 8190, ce qui si on retire les 14 caractères de « GET / HTTP/1.1″ nous donne exactement la limite observée empiriquement : 8176.

    La directive LimitRequestLine permet de modifier cette valeur.
    (Après un essai infructueux en fait il s’avère que la directive marche très bien…)

    Je n’ai pas essayé de recompiler Apache, mais bon là je pense que ça devrait le faire aussi :)

  • Trent dit :

    En ajoutant les quelques lignes ci-dessous dans le fichier .htaccess on ne renvoit plus rien du tout non ?

    ErrorDocument 400  »  »
    ErrorDocument 401  »  »
    ErrorDocument 402  »  »
    ErrorDocument 403  »  »
    ErrorDocument 404  »  »
    ErrorDocument 405  »  »
    ErrorDocument 406  »  »
    ErrorDocument 414  »  »
    ErrorDocument 500  »  »
    ErrorDocument 501  »  »
    ErrorDocument 502  »  »
    ErrorDocument 503  »  »
    ErrorDocument 504  »  »
    ErrorDocument 505  »  »
    ErrorDocument 506  »  »
    ErrorDocument 507  »  »
    ErrorDocument 508  »  »
    ErrorDocument 509  » « 

  • offw0rld dit :

    Bah tu renvois toujours le code de l’erreur.

Leave a Reply

XHTML: You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">