2 Stimmen

Skript-Zugriff auf WebGoat-URLs?

Ich habe ein paar der WebGoat-Exemplare für ein Uni-Labor gelöst. In einer der Übungen habe ich versucht, ein Python-Skript mit urllib2 zu verwenden, um automatisierte "Tests" durchzuführen, damit ich nicht manuell ascii(substr(first_name,3,1)) verwenden musste > 97 usw.

Aber ich scheine die gleiche Seite zu erhalten, auch wenn ich verschiedene URLs ausprobiere, wenn ich ein urllib2-Skript verwende, aka f2, f3 und f4.html ist alles die grundlegende erste Seite und nicht die gleiche Seite, wie wenn man sie in einem Browser aufruft:

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: Ich habe die Antwort auf die Aufgabe "auf die harte Tour" gemacht und sie abgegeben. Jetzt bin ich nur neugierig, welche Art von Mechanismus das urllib-Skript daran hindert, auf den Inhalt zuzugreifen

Ich habe versucht, mit webgoat auf meinen lokalen Tomcat zuzugreifen, und die webgoat-Konsole sagt:

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]

Soweit ich das beurteilen kann, hilft es mir nicht wirklich.

2voto

mantrapeze Punkte 51

Wird der User-Agent überprüft? Ich musste schon einmal einen User-Agent für einen typischen Browser angeben, um solche Prüfungen zu umgehen. Sie haben einen in Ihrer "Daten"-Variable aufgeführt, aber es sieht so aus, als würden Sie ihn nicht wirklich anwenden.

1voto

svrist Punkte 6842

Juhu! Herausgefunden

Die ID der Seite, die ich zu finden versuche, wird bei jeder Sitzung neu generiert. Ich muss mir also die zurückgegebenen Daten ansehen, bevor ich eine screenId wähle:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X