2010-02-12 7 views
2

나는 하나의 실험실 용 WebGoat 견본을 해결 해왔다. 연습 중 하나에서 자동으로 "테스트"를 수행하기 위해 urllib2와 함께 python 스크립트를 사용하려고 했으므로 수동으로 ascii (substr (first_name, 3,1))> 97 등을 사용해야했습니다.WebGoat URL에 대한 스크립트 액세스?

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 : F2, F3 및 f4.html 일명 urllib2가 스크립트를 사용할 때 다른 URL을 시도 그겁니다 같은 페이지를 얻는 것은 모든 기본적인 첫 페이지와 브라우저에서 액세스하는 경우뿐만 아니라 같은 페이지입니다 : 나는 "어려운 길"이라는 과제에 대한 답을하고 그것을 들여 줬다. 지금 나는 어떤 종류의 메커니즘이 urllib 스크립트가 내용에 접근하는 것을 막는 지 궁금하다.

트라이 webgoat과 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] 

정말 지금까지 내가 말할 수있는 나를 도와 나던.

+0

좀 더 자세한 정보를 제공 할 수 있습니까? 예상되는 결과는 무엇입니까? – jathanism

+0

일반 브라우저를 사용할 때 "Screen = 1600"의 내용을 얻지 만 파이썬 스크립트를 사용할 때/webgoat/attack의 내용은 어떤 쿼리 문자열 없이도 얻을 수 있습니다. – svrist

답변

0

우후! 발견 된 사람

찾으려는 페이지의 ID는 모든 세션마다 재생성됩니다. 따라서 화면 ID를 선택하기 전에 반환 된 데이터를 살펴 봐야합니다.

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

사용자 에이전트가 검사되고 있습니까? 그런 과거의 검사를 받기 전에 일반적인 브라우저를위한 사용자 에이전트를 지정해야했습니다. "데이터"변수에 나열된 변수가 있지만 실제로 적용하지 않는 것처럼 보입니다.

+0

실제로 User-Agent 필드를 사용해 보았지만 아무 소용이 없었습니다. 사용자 에이전트를 사용하는 다른 스크립트 버전을 추가하려고합니다. – svrist

관련 문제