updated to version 0.3.1
This commit is contained in:
@@ -32,13 +32,13 @@ def copy():
|
||||
settings.in_queue.put(extension)
|
||||
|
||||
# Searching installed extensions
|
||||
# Check on version if we get 200 or 403.
|
||||
# Check version if getting 200 or 403.
|
||||
def check_extension():
|
||||
while True:
|
||||
extension = settings.in_queue.get()
|
||||
for path in settings.EXTENSION_PATHS:
|
||||
try:
|
||||
req = urllib2.Request('http://' + settings.DOMAIN + path + extension + '/', None, settings.user_agent)
|
||||
req = urllib2.Request(settings.DOMAIN + path + extension + '/', None, settings.user_agent)
|
||||
connection = urllib2.urlopen(req, timeout = settings.TIMEOUT)
|
||||
connection.close()
|
||||
check_extension_version(path, extension)
|
||||
@@ -52,7 +52,7 @@ def check_extension():
|
||||
except urllib2.URLError, e:
|
||||
pass
|
||||
#retry = raw_input('Error on checking ' + extension + ': ' + str(e.reason) + '\nRetrying? (y/n) ')
|
||||
#if retry:
|
||||
#if retry is 'y':
|
||||
# settings.in_queue.put(extension)
|
||||
# if extension is not in any given path, it's not installed
|
||||
if settings.verbose:
|
||||
@@ -69,7 +69,7 @@ def check_extension_version(path, extension):
|
||||
settings.out_queue.put(extension.ljust(32) + Fore.GREEN + 'installed' + Fore.RESET)
|
||||
else:
|
||||
try:
|
||||
request = urllib2.Request('http://' + settings.DOMAIN + path + extension +'/ChangeLog', None, settings.user_agent)
|
||||
request = urllib2.Request(settings.DOMAIN + path + extension +'/ChangeLog', None, settings.user_agent)
|
||||
response = urllib2.urlopen(request, timeout = settings.TIMEOUT)
|
||||
changelog = response.read(1500)
|
||||
response.close()
|
||||
|
||||
36
lib/login.py
36
lib/login.py
@@ -12,26 +12,24 @@ from colorama import Fore
|
||||
from lib import settings
|
||||
|
||||
# Searching Typo3 login page
|
||||
def search_login(domain):
|
||||
def search_login():
|
||||
try:
|
||||
r = requests.get('http://' + domain + '/typo3/index.php', allow_redirects=False, timeout=settings.TIMEOUT, headers=settings.user_agent)
|
||||
r = requests.get(settings.DOMAIN + '/typo3/index.php', allow_redirects=False, timeout=settings.TIMEOUT, headers=settings.user_agent, verify=False)
|
||||
statusCode = r.status_code
|
||||
httpResponse = r.text
|
||||
if statusCode == 200:
|
||||
return check_title(httpResponse, r.url)
|
||||
elif (statusCode == 301) or (statusCode == 302):
|
||||
location = r.headers['location']
|
||||
if ("http://") in location:
|
||||
locsplit = location.split("//")
|
||||
new_location = locsplit[1].split("/")
|
||||
search_login(new_location[0])
|
||||
elif ("https://") in location:
|
||||
r = requests.get(location, timeout=settings.TIMEOUT, headers=settings.user_agent, verify=False)
|
||||
statusCode = r.status_code
|
||||
httpResponse = r.text
|
||||
redirect = raw_input('Got redirect to: ' + str(location) + '\nFollow? (y/n) ')
|
||||
if redirect is 'y':
|
||||
locsplit = location.split('/')
|
||||
settings.DOMAIN = locsplit[0] + '//' + locsplit[2]
|
||||
return "redirect"
|
||||
else:
|
||||
return check_title(httpResponse, r.url)
|
||||
elif statusCode == 404:
|
||||
return check_main_page()
|
||||
return False
|
||||
else:
|
||||
print "Oops! Got unhandled code:".ljust(32) + str(statusCode) + ": " + str(r.raise_for_status())
|
||||
except requests.exceptions.Timeout:
|
||||
@@ -52,11 +50,11 @@ def check_title(response, url):
|
||||
return True
|
||||
except:
|
||||
pass
|
||||
return check_main_page()
|
||||
return False
|
||||
|
||||
# Searching for Typo3 references in HTML comments
|
||||
def check_main_page():
|
||||
req = urllib2.Request('http://' + settings.DOMAIN, None, settings.user_agent)
|
||||
req = urllib2.Request(settings.DOMAIN, None, settings.user_agent)
|
||||
req.add_header('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')
|
||||
try:
|
||||
connection = urllib2.urlopen(req, timeout = settings.TIMEOUT)
|
||||
@@ -66,6 +64,9 @@ def check_main_page():
|
||||
cookie = connection.info().getheader('Set-Cookie')
|
||||
if 'fe_typo_user' in cookie:
|
||||
return bad_url()
|
||||
except KeyboardInterrupt:
|
||||
print Fore.RED + "\nReceived keyboard interrupt.\nQuitting..." + Fore.RESET
|
||||
exit(-1)
|
||||
except:
|
||||
try:
|
||||
regex = re.compile("TYPO3(.*)", re.IGNORECASE)
|
||||
@@ -85,16 +86,15 @@ def check_main_page():
|
||||
if "404" in str(e):
|
||||
print Fore.RED + str(e) + "\nPlease ensure you entered the right url" + Fore.RESET
|
||||
else:
|
||||
print Fore.RED + "Got \"" + str(e) + "\" on testing main page." + Fore.RESET
|
||||
return False
|
||||
print "Typo3 Login:".ljust(32) + Fore.RED + "Typo3 is not used on this domain" + Fore.RESET
|
||||
print Fore.RED + str(e) + Fore.RESET
|
||||
return "skip"
|
||||
return False
|
||||
|
||||
def bad_url():
|
||||
print "Typo3 Login:".ljust(32) + Fore.GREEN + "Typo3 is used, but could not find login" + Fore.RESET
|
||||
print "".ljust(32) + "This will mostly result in \"no extensions are installed\"."
|
||||
print "".ljust(32) + "This could result in \"no extensions are installed\"."
|
||||
print "".ljust(32) + "Seems like something is wrong with the given url."
|
||||
var = raw_input("".ljust(32) + "Try anyway (y/n)? ")
|
||||
if var is 'y':
|
||||
return True
|
||||
return False
|
||||
return "skip"
|
||||
@@ -44,7 +44,6 @@ verbose = False
|
||||
|
||||
#Input and output queues
|
||||
in_queue = ""
|
||||
in_queue2 = ""
|
||||
out_queue = ""
|
||||
|
||||
# Seconds to wait before timeout connection.
|
||||
@@ -68,7 +67,7 @@ EXTENSION_PATHS = ('/typo3conf/ext/', '/typo3/sysext/')
|
||||
# Possible version info file
|
||||
EXTENSION_VERSION_INFO = ('ChangeLog', 'README.txt')
|
||||
|
||||
EXTENSIONS_FOUND = {}
|
||||
EXTENSIONS_FOUND = 0
|
||||
|
||||
|
||||
|
||||
|
||||
28
lib/start.py
28
lib/start.py
@@ -16,13 +16,26 @@ from lib import output
|
||||
from lib import extensions
|
||||
|
||||
# Startmethod
|
||||
def start(domain):
|
||||
settings.in_queue = Queue()
|
||||
settings.out_queue = Queue()
|
||||
def check_typo_installation(domain):
|
||||
settings.DOMAIN = domain
|
||||
print '\n\n' + Fore.CYAN + '[ Checking ' + domain + ' ]' + '\n' + "-"* 70 + Fore.RESET
|
||||
|
||||
if login.search_login(domain) is True:
|
||||
check = login.search_login()
|
||||
if check is "redirect":
|
||||
check_typo_installation(settings.DOMAIN)
|
||||
|
||||
elif check is True:
|
||||
init_extension_search()
|
||||
else:
|
||||
mainpage = login.check_main_page()
|
||||
if mainpage is True:
|
||||
init_extension_search()
|
||||
elif mainpage is not "skip":
|
||||
print "Typo3 Login:".ljust(32) + Fore.RED + "Typo3 is not used on this domain" + Fore.RESET
|
||||
|
||||
def init_extension_search():
|
||||
settings.in_queue = Queue()
|
||||
settings.out_queue = Queue()
|
||||
versioninfo.search_version_info()
|
||||
versioninfo.output()
|
||||
|
||||
@@ -38,17 +51,17 @@ def start(domain):
|
||||
try:
|
||||
while True:
|
||||
if settings.in_queue.empty() == False:
|
||||
time.sleep(0.1)
|
||||
time.sleep(0.5)
|
||||
for i in xrange(0, settings.THREADS):
|
||||
t = Thread(target=extensions.check_extension, args=())
|
||||
t.daemon = True
|
||||
t.start()
|
||||
else:
|
||||
break
|
||||
settings.in_queue.join()
|
||||
except KeyboardInterrupt:
|
||||
print Fore.RED + "\nReceived keyboard interrupt.\nQuitting..." + Fore.RESET
|
||||
exit(-1)
|
||||
settings.in_queue.join()
|
||||
|
||||
installed_ext = settings.out_queue.qsize()
|
||||
if installed_ext is 0:
|
||||
@@ -58,7 +71,6 @@ def start(domain):
|
||||
t.daemon = True
|
||||
t.start()
|
||||
settings.out_queue.join()
|
||||
print Fore.GREEN + '\n', str(installed_ext) + '/' + str(extensions_to_check),'extension(s) installed' + Fore.RESET
|
||||
|
||||
print Fore.GREEN + '\n', str(settings.EXTENSIONS_FOUND) + '/' + str(extensions_to_check),'extension(s) installed' + Fore.RESET
|
||||
else:
|
||||
print '\nSkipping check for extensions...'
|
||||
@@ -13,7 +13,7 @@ from lib import settings
|
||||
def search_version_info():
|
||||
for path, regex in settings.TYPO3_VERSION_INFO.iteritems():
|
||||
try:
|
||||
request = urllib2.Request('http://' + settings.DOMAIN + path, None, settings.user_agent)
|
||||
request = urllib2.Request(settings.DOMAIN + path, None, settings.user_agent)
|
||||
response = urllib2.urlopen(request, timeout = settings.TIMEOUT)
|
||||
news = response.read(700)
|
||||
response.close()
|
||||
|
||||
Reference in New Issue
Block a user