N-PN White-Hat Project
[PYTHON] UrlLib HttpScan - Version imprimable

+- N-PN White-Hat Project (https://dev.n-pn.fr/forum)
+-- Forum : Programmation (https://dev.n-pn.fr/forum/forumdisplay.php?fid=72)
+--- Forum : Langages interprétés (https://dev.n-pn.fr/forum/forumdisplay.php?fid=27)
+--- Sujet : [PYTHON] UrlLib HttpScan (/showthread.php?tid=3069)



[PYTHON] UrlLib HttpScan - sakiir - 11-06-2013

Salut à tous !
Alors aujourd'hui , pour m'entrainer un peu avec python et urllib j'ai commencé plusieurs outils dont un pour scan un site web , (Vérifier[/php] les found , not found , et autre erreur renvoyer par le serveur web).

Code :
import urllib
import sys

def opt():
    print """
        ##############

        USAGE : ./scan.py <WordList> <Url>
        EXAMPLE : ./scan.py /etc/passwd http://google.com/
        
        ##############
    """
    
if len(sys.argv) <> 3:
    opt()
i=0
fp = open(sys.argv[1],"r")

for line in fp:
    tmp = urllib.urlopen(sys.argv[2] + line)
   ## print tmp.read()
    s = tmp.read()
    if "Not Found" in s:
        print "[-] NOT FOUND : " + sys.argv[2] + line
    elif "404" in s:
        print "[-] NOT FOUND : " + sys.argv[2] + line
    elif "403" in s:
        print "[+] FORBIDDEN : " + sys.argv[2] + line
    elif "Page introuvable" in s:
        print "[-] NOT FOUND : " + sys.argv[2] + line
    else:
        print "[+] FOUND : " + sys.argv[2] + line
fp.close()

Le programme Utilise une wordlist qui contient des mots clés comme cpanel , phpmyadmin etc ..

don en testant sur N-PN à mes risques et périls j'ai pu voir que le programme me repondait FOUND pour le mot phpmyadmin j'ai vérifié et on peut bien accéder à http://n-pn.fr/phpmyadmin

Je pense que grâce à ce problème un pirate pourrait bruteforcer ou tester d'autre attaques .. voila merci d'avoir lut a+ !


RE: [PYTHON] UrlLib HttpScan - Trivial - 11-06-2013

Salut,
J'avoue que ça serai quand même mieux de renommer le phpmyadmin.
Sinon, nice ton script python :-)


RE: [PYTHON] UrlLib HttpScan - supersnail - 11-06-2013

Pour le phpmyadmin, on gère ça Wink

Ensuite, imho vaudrait mieux se baser sur le code d'erreur HTTP renvoyé que sur la recherche d'un mot (on tool peut être defeat en mettant un "not found" dans une page qui existe, et ne pas détecter un 404 custom qui ne contient pas de "not found").

Anyway, sympa malgré tout Wink


RE: [PYTHON] UrlLib HttpScan - 0pc0deFR - 11-06-2013

Petite optimisation, détecter le / en fin de nom de domaine car si ta wordlist intègre le / du style /phpmyadmin tu va avoir http://domain.com//phpmyadmin ou alors http://domain.comphpmyadmin enfin, tu auras compris le principe.


RE: [PYTHON] UrlLib HttpScan - gruik - 11-06-2013

(11-06-2013, 15h17)0pc0deFR a écrit : Petite optimisation, détecter le / en fin de nom de domaine car si ta wordlist intègre le / du style /phpmyadmin tu va avoir http://domain.com//phpmyadmin ou alors http://domain.comphpmyadmin enfin, tu auras compris le principe.

[Image: tumblr_m95gu6qnyG1qm2i1uo1_1280.jpg]

urllib suit automatiquement les redirections 30{1,2}
par ailleurs plutot qu'un "if tag in read()" tout cracra il eu tété de bon aloi d'utiliser getcode()

Code PYTHON :
>>> import urllib2
>>> p =urllib2.urlopen('http://n-pn.fr')
>>> print p.getcode()
200


limite c'est l'inverse qui est plus tricky, arriver à détecter les redirections
les puristes ajouteront sans doute que l'optimisation aurait consisté à utiliser httplib à la place de urllib


RE: [PYTHON] UrlLib HttpScan - sakiir - 11-06-2013

SuperSnail : oui je voulais faire ca , mais je n'ai pas trouvé un moyen simple pour faire ça , urllib possede t'elle des fonctions permettant de le faire ?

0pc0deFR : Oui j'ai voulu le faire , mais bon ca fonctionnais à mon image Wink

Gruik : j'ai pas bien compris ce que tu voulais dire


RE: [PYTHON] UrlLib HttpScan - supersnail - 11-06-2013

sakiir: ben en fait gruik te donne la réponse... Mais bon à un moment faut connecter un peu plus que 2 neurones et se prendre un peu en main (lrn2rtfm aussi ça peut être une bonne idée).


RE: [PYTHON] UrlLib HttpScan - Kiwazaru - 12-06-2013




RE: [PYTHON] UrlLib HttpScan - oosfalte - 30-06-2013

Bon, j'y vais de ma modeste contribution vu que je me suis mis au Python depuis quelques jours seulement.
Supersnail et gruik en ont parlé, on peut aussi se servir de HTTPError, URLError et IOError (dont dépéndent les 2 autres) pour gérer les erreurs.
Ca me paraît intéressant et permet de couvrir un plus large éventail (les redirections ?) si bien utilisé, ce que ne fait pas mon code :/
Ca évite aussi l'utilisation d'un dictionnaire, donc je me suis dit ... why not ?
Code PYTHON :

#!/usr/bin/env python
# -*- encoding: utf-8 -*-

import urllib2, sys

def usage():
    #usage
    print("Usage   : {} <WordList>   <Url>".format(sys.argv[0]))
    sys.exit()

if len(sys.argv) != 3:
    usage()

fp = open(sys.argv[1], "r")

# on tente de joindre le serveur
# en cas d'échec urlopen active URLError
try:
    urllib2.urlopen(sys.argv[2])
except urllib2.URLError, url_e:
    print "Echec connexion ", sys.argv[2]
    sys.exit(url_e.reason)

for line in fp:
    test_url = sys.argv[2] + line
    print "[+]", test_url[:-1],
    try:
        test_req = urllib2.urlopen(test_url)
    # en cas d'échec sur une opération I/O, IOError est activé
    except IOError, error:
        print ":", error.code, error.reason
    else:
        print (": OK")

fp.close()
 



RE: [PYTHON] UrlLib HttpScan - Kiwazaru - 30-06-2013

"Ca me paraît intéressant et permet de couvrir un plus large éventail (les redirections ?) si bien utilisé, ce que ne fait pas mon code :/"

Justement le principe de mon code avec les sockets est d'envoyer une requête GET /pagedemandé.??? HTTP/1.1 , pour obtenir la réponse du serveur qui contiendra le code en retour.
Avec ma fonction errorcode() on obtient le code retourné et ainsi nous n'avons pas besoin d'un dictionnaire de code d'erreur ou autre. De plus ma liste qui contient les pages d'accès peut bien évidemment être remplacée par une wordlist.txt Wink
Ma fonction errorcode() au final, esquive juste le HTTP/1.1 dans l'en-tête de la réponse du serveur, et ensuite nous renvois la suite jusqu'au '\n' puisqu'on aura split() auparavant Smile


RE: [PYTHON] UrlLib HttpScan - oosfalte - 30-06-2013

@ReVerSe:
Loin de moi l'idée de critiquer ton code, tu as plus d'expérience que moi dans le domaine, c'est certain.C'est juste une autre façon de faire, vu sous un autre angle Smile


RE: [PYTHON] UrlLib HttpScan - Kiwazaru - 30-06-2013

J'ai jamais cru que tu critiquais mon code hein Tongue
Comme beaucoup disent, il n'y a pas qu'une seule façon de coder quelque chose, mais bien une infinité Wink


RE: [PYTHON] UrlLib HttpScan - InstinctHack - 30-06-2013

et souvent ils y en as quelques unes très jolies, et une infinités de saloperies :]


RE: [PYTHON] UrlLib HttpScan - gruik - 30-06-2013

pour l'annecdote, les "motto" Perl et Python sont respectivement TMTOWTDI (there's more than one way to do it) et TOOWTDI (there's only one way to do it)
de là à dire que vous êtes des Perleux qui s'ignorent il n'y a qu'un pas Big Grin