2010-02-12 10 views
2

J'ai résolu quelques exampels WebGoat pour une chose uni-lab. Dans l'un des exercices, j'ai essayé d'utiliser un script python avec urllib2 pour faire des "tests" automatisés, donc je n'ai pas besoin d'utiliser manuellement ascii (substr (prénom, 3,1))> 97 etcAccès par script aux URL WebGoat?

Mais je semble obtenir la même page que j'essaie différentes eventhough urls lors de l'utilisation d'un script urllib2 est tout le premier de base aka f2, f3 et f4.html la page et non la même page que si vous y accédez dans un navigateur:

import urllib2 
import urllib 
import cookielib 
import sys 


myjar = cookielib.FileCookieJar("cookies.txt"); 

cookieHandler = urllib2.HTTPCookieProcessor(myjar) 

password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm() 
tlurl="http://localhost:8081/webgoat/attack" 

password_mgr.add_password(None,tlurl,user="guest",passwd="guest") 
authhandler = urllib2.HTTPBasicAuthHandler(password_mgr) 
opener = urllib2.build_opener(cookieHandler, authhandler) 
data = [('Connection','keep-alive'),('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; da; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7')] 



def write_f_to_f(fname,f): 
    f1 = open(fname,"w") 
    f1.write(f.read()) 
    f1.close() 

def gen_req(url,referer=None): 
    req = urllib2.Request(url) 
    print "url: %s"%url 
    mydata = data 
    if referer != None: 
     mydata.append(('Referer',referer)) 
    [ req.add_header(k,v) for k,v in mydata ] 
    return req 


sys.stdout.flush() 
url = "http://localhost:8081/webgoat/attack" 
req = gen_req(url) 
f = opener.open(req) 
write_f_to_f("f1.html",f) 
f.close() 

params = urllib.urlencode({'start':'Start WebGoat'}) 
qs = urllib.urlencode({'Screen':107, 'menu':1200 }) 
url = "http://localhost:8081/webgoat/attack" 
req = gen_req(url,url) 
f = opener.open(req, params) 
write_f_to_f("f2.html",f) 
f.close() 

ourl = url 
url = "http://localhost:8081/webgoat/attack?%s"%qs 
req = gen_req(url,ourl) 
f = opener.open(req) 
write_f_to_f("f3.html",f) 
f.close() 


ourl = url 
url = "http://localhost:8081/webgoat/attack?%s"%qs 
req = gen_req(url,ourl) 
f = opener.open(req) 
write_f_to_f("f4.html",f) 
f.close() 

NB : J'ai fait la réponse à la tâche "à la dure" et l'a remis. Maintenant, je suis juste curieux de savoir quel mécanisme empêche le script urllib d'accéder au contenu

Je tri ed accéder à mon tomcat local avec WebGoat et dit console WebGoat:

Sat Feb 13 12:31:14 CET 2010 | 127.0.0.1:127.0.0.1 | org.owasp.webgoat.session.ErrorScreen | [Screen=107,menu=1200] 
errorscreen createContent Error:null message:Invalid screen requested. Try: http://localhost/WebGoat/attack 
- WebGoat: Sat Feb 13 12:31:14 CET 2010 | 127.0.0.1:127.0.0.1 | org.owasp.webgoat.session.ErrorScreen | [Screen=107,menu=1200] 
Sat Feb 13 12:31:14 CET 2010 | 127.0.0.1:127.0.0.1 | org.owasp.webgoat.session.ErrorScreen | [Screen=107,menu=1200] 

Il me n'aide pas vraiment à ce que je peux dire.

+0

Pouvez-vous fournir un peu plus de détails? quel est le résultat attendu? – jathanism

+0

Lorsque j'utilise un navigateur normal, j'obtiens le contenu de "Screen = 1600" mais lorsque j'utilise le script python, j'obtiens le contenu de/webgoat/attack sans aucune chaîne de requête. – svrist

Répondre

0

Woohoo! Found out

L'identifiant de la page que j'essaie de trouver est régénéré à chaque session. Donc, je dois regarder les données retournées avant de choisir un screenId:

import urllib2 
import urllib 
import cookielib 
import re 

def write_f_to_f(fname,f): 
    f1 = open(fname,"w") 
    f1.write(f.read()) 
    f1.close() 

def gen_req(url,referer=None): 
    req = urllib2.Request(url) 
    return req 



myjar = cookielib.FileCookieJar("cookies.txt"); 
cookieHandler = urllib2.HTTPCookieProcessor(myjar) 

password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm() 
tlurl="http://127.0.0.1:8081/webgoat/attack" 

password_mgr.add_password(None,tlurl,user="guest",passwd="guest") 
find = "Blind Numeric." 

authhandler = urllib2.HTTPBasicAuthHandler(password_mgr) 
opener = urllib2.build_opener(authhandler,cookieHandler) 

url = "http://127.0.0.1:8081/webgoat/attack" 
req = gen_req(url,url) 
f = opener.open(req)# Setup session and login. 

params = urllib.urlencode({'start':'Start WebGoat'}) 
url = "http://127.0.0.1:8081/webgoat/attack" 
req = gen_req(url,url) 
f = opener.open(req,params) # Submit the "Start" form 
dat = f.read() # Get the menu html from the firstpage. 
f.close() 


m = re.search("attack\?Screen=(\d+).*%s"%find,dat) # Try to find screen id for what i want 
if not m is None: 
    scr= m.group(1) 
    qs = urllib.urlencode({'Screen':scr, 'menu':1200 }) 
    ourl = url 
    url = "http://127.0.0.1:8081/webgoat/attack?%s"%qs 
    req = gen_req(url,ourl) 
    f = opener.open(req) 
    write_f_to_f("f4.html",f) 
    f.close() 
    print "Found the page and saved it to f4.html" 
else: 
    print "Didnt find screen id for %s"%find 
2

L'agent utilisateur est-il vérifié? J'ai dû spécifier un agent d'utilisateur pour un navigateur typique avant de passer les contrôles comme ça. Vous en avez un dans votre variable "data" mais il semble que vous ne l'appliquiez pas réellement.

+0

J'ai essayé d'utiliser le champ User-Agent, mais en vain: |. Je tente d'ajouter une autre édition du script qui utilise l'agent d'utilisateur – svrist

Questions connexes