Добыча картона

Добыча картона

https://t.me/new_infonet

Начну с вводной информации, немного расскажу о том, как это делаю я и в чем основные трудности.

Для взлома шопов я использую sqlmap в kali linux (можно его запустить и под виндоуз, и с виртуалки - кому как удобно, я же буду говорить в контексте кали). Вообще в кали много приблуд и сильнейшая из них это метасплоит фреймворк, но тут речь пойдет только о sqlinjection.


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


Для начала его нужно установить, т.к. в кали он предустановлен и требует только обновления после установки системы, мы рассмотрим способ установки на маздай (виндовс).


Прежде всего нам потребуется сам sqlmap и питон. Сразу скажу, что питон нужен версии 2 - на 3 НЕ ЗАПУСТИТСЯтут, питон качаем с офф.сайта тут (v.2*).


Питон ставится методом нажатия кнопки "далее" и выбором каталога (по умолчанию C:/Python27), сделали? Ехала дальше.


Распаковываем sqlmap в папочку (рекомендую создать в папке с питоном директорию, например utilits и пихать все туда) и вызываем консоль.


Для начала переходим в папку с питоном:

cd C:/Python27

Затем вызываем исполняемый файл питона и указываем путь для приложения (куда сохраняли sqlmap) с нужными ключами. Для начала вызовем справку (-hh):

python.exe C:/Python27/utilits/sqlmap/sqlmap.py -hh

Видим инструкцию использования программы.


ВАЖНО!


-l LOGFILE Парсить цель(и) из файлов логов Burp или WebScarab

-x SITEMAPURL Парсить цель(и) из удалённого файла sitemap(.xml)

-m BULKFILE Сканировать множество целей, заданных в текстовом файле

-r REQUESTFILE Загрузить HTTP запросы из файла

-g GOOGLEDORK Обработать результаты дорков Google как целевых URL

-c CONFIGFILE Загрузить опции из конфигурационного файла INI


Запросы:

Эти опции могут использоваться для определения как подключиться к целевому URL


--method=МЕТОД Принудительно использовать заданный HTTP метод (например, PUT)

--data=ДАННЫЕ Строка данных для отправки через POST

--param-del=РАЗД_ПАР Символ, используемый для разделения величин параметров

--cookie=КУКИ Значение заголовка HTTP куки

--cookie-del=РАЗДЕЛИТЕЛЬ_КУКИ Символ, используемый для разделения величин куки

--load-cookies=ФАЙЛ_ДЛЯ_ЗАГРУЗКИ Файл, содержащий куки в формате Netscape/wget

--drop-set-cookie Игнорировать заголовок Set-Cookie из ответа

--user-agent=AGENT Значение заголовка HTTP User-Agent

--random-agent Использовать случайно выбранное значение заголовка HTTP User-Agent

--host=ХОСТ Значение заголовка хоста HTTP

--referer=РЕФЕРЕР Значение заголовка HTTP Referer

-H ЗАГОЛОВОК, --header Дополнительный заголовок (к примеру, "X-Forwarded-For: 127.0.0.1")

--headers=ЗАГОЛОВКИ Дополнительные заголовки (к примеру, "Accept-Language: fr\nETag: 123")

--auth-type=ТИП_АУТ HTTP тип аутентификации (Basic, Digest, NTLM или PKI)

--auth-cred=ДАННЫЕ_АУТ учётные данные HTTP аутентификации (имя:пароль)

--auth-file=ФАЙЛ_АУТ файл HTTP аутентификации PEM сертификат/частный ключ

--ignore-401 Игнорировать ошибку HTTP 401 (Unauthorized) (Неавторизован)

--ignore-proxy Игнорировать дефолтные системные настройки прокси

--ignore-redirects Игнорировать попытки редиректа

--ignore-timeouts Игнорировать таймауты соединений

--proxy=ПРОКСИ Использовать прокси для подключения к целевому URL

--proxy-cred=УЧЁТКА_ПРОКСИ Учётные данные аутентификации прокси (имя:пароль)

--proxy-file=ФАЙЛ_ПРОКСИ Загрузить список прокси из файла

--tor Использовать анонимную сеть Tor

--tor-port=TORPORT Установить порт прокси Tor отличный от дефолтного

--tor-type=TORTYPE Установить тип прокси Tor (HTTP (по умолчанию), SOCKS4 или SOCKS5)

--check-tor Проверить, используется ли Tor должным образом

--delay=ЗАДЕРЖКА Задержка в секундах между каждым HTTP запросом

--timeout=ТАЙМАУТ Секунды для ожидания перед таймаутом соединения (по умолчанию 30)

--retries=ПОПЫТКИ Попытки при таймаутах соединения (по умолчанию 3)

--randomize=ПАРАМЕТРЫ Случайно менять значения данного параметра(ов)

--safe-url=БЕЗОПАСНЫЙ_EURL URL адрес для частого посещения во время тестирования

--safe-post=POST Данные POST для отправки на безопасный URL

--safe-req=БЕЗОПАСНЫЙ_ФАЙЛ Load safe HTTP request from a file

--safe-freq=КОЛИЧЕСТВО Тестовые запросы между двумя визитами на заданный безопасный URL

--skip-urlencode Пропустить URL кодирование данных для запросов

--csrf-token=CSR.. Параметр используемый для удержания токена anti-CSRF

--csrf-url=CSRFURL URL адрес для посещения для извлечения токена anti-CSRF

--force-ssl Принудительное использование SSL/HTTPS

--hpp Использовать метод загрязнения параметра HTTP

--eval=EVALCODE Выполнить данный код Python перед запросом (например,

"import hashlib;id2=hashlib.md5(id).hexdigest()")


Оптимизация:

Эти опции могут использовать для оптимизации производительности sqlmap


-o Отключить все переключатели оптимизации

--predict-output Прогнозировать общий вывод запросов

--keep-alive Использовать постоянные соединения HTTP(s)

--null-connection Получить длину страницу без фактического тела ответа HTTP

--threads=ПОТОКИ Максимальное количество одновременных HTTP(s) запросов (по умолчанию 1)


Инъекция:

Эти опции могут использоваться для определения, какой параметр тестировать,

обеспечивать пользовательскую инъекционную нагрузку и дополнительные скрипты обфускации


-p TESTPARAMETER Тестируемый параметр(ы)

--skip=SKIP Пропустить тестирования данного параметра(ов)

--skip-static Пропустить тестирование параметров, которые не кажутся динамическими

--param-exclude=.. Регулярное выражение для исключения параметров из тестирования (например, "ses")

--dbms=DBMS Принудительно указать СУБД

--dbms-cred=DBMS.. Данные аутентификации СУБД (пользователь:пароль)

--os=OS Принудительно указать операционную систему СУБД

--invalid-bignum Использовать большие числа для недействительных значений

--invalid-logical Использовать логические операции для недействительных значений

--invalid-string Использовать случайные строки для недействительных значений

--no-cast Отключить механизм отбора полезной нагрузки

--no-escape Отключить механизм экранирования строк

--prefix=PREFIX Предваряющая строка инъекционного запроса

--suffix=SUFFIX Завершающая строка инъекционного запроса

--tamper=TAMPER Использовать данный скрипт(ы) для обфускации инъекционных данных


Выявление:

Эти опции можно использовать для настройки фазы выявления


--level=УРОВЕНЬ Уровень выполнения тестирования (1-5, по умолчанию 1)

--risk=РИСК Риск выполняемого тестирования (1-3, по умолчанию 1)

--string=СТРОКА Строка, когда запрос выполнен в True (Истина)

--not-string=НЕ_ИСТИНА Строка, когда запрос выполнен в False (Ложь)

--regexp=РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕ Регулярное выражение, когда запрос выполнен в True (Истина)

--code=КОД HTTP код, когда запрос выполнен в True (Истина)

--text-only Сравнить страницы основываясь только на текстовом содержимом

--titles Сравнить страницы основываясь только на их заголовках


Техники:

Эти опции можно использовать для поднастройки тестирования отдельных техник SQL инъекции


--technique=ТЕХНИКА Техники SQL инъекций для использования (по умолчанию "BEUSTQ")

--time-sec=TIMESEC Секунды для задержки ответа СУБД (по умолчанию 5)

--union-cols=UCOLS Диапазон колонок для тестирования с запросами UNION SQL инъекций

--union-char=UCHAR Символ для использования при брутфорсинге количества колонок

--union-from=UFROM Таблица для использования в FROM части UNION запроса SQL инъекции

--dns-domain=ДОМЕН Доменное имя, используемое для эксфильтрационной атаки DNS

--second-order=СТРОКА В результате по URL ищется ответ второго порядка


Отпечатки:

-f, --fingerprint Выполняет обширную сверку версии СУБД


Перечисления:

Эти опции могут использоваться для перечисления информации

системы управления базами данных, структуры содержащихся в

таблицах данных. Более того, вы можете запустить ваши собственные

SQL выражения


-a, --all Получить всё

-b, --banner Получить банер СУБД

--current-user Получить текущего пользователя СУБД

--current-db Получить текущую базу данных СУБД

--hostname Получить имя хоста сервера СУБД

--is-dba Определить, является ли текущий пользователь администратором СУБД

--users Перечислить пользователей СУБД

--passwords Перечислить хеши паролей пользователей СУБД

--privileges Перечислить пользовательские привилегии СУБД

--roles Перечислить пользовательские роли СУБД

--dbs Перечислить базы данных СУБД

--tables Перечислить таблицы базы данных СУБД

--columns Перечислить колонки таблицы СУБД

--schema Перечислить схему СУБД

--count Перечислить количество записей для таблицы(таблиц)

--dump Сдампить записи таблицы базы данных СУБД

--dump-all Сдампить все записи таблиц базы данных СУБД

--search Поиск колонки(ок), таблиц(ы) и/или имени(имён) базы данных

--comments Получить комментарии СУБД

-D БД БД СУБД для перечисления

-T ТБЛ Таблица(ы) БД СУБД для перечисления

-C КОЛ Колонка(и) таблицы БД СУБД для перечисления

-X ПРОПУСТИТЬКОЛ Колонка(и) БД СУБД для не перечисления

-U ПОЛЬЗОВАТЕЛЬ Пользователи СУБД для перечисления

--exclude-sysdbs Пробустить системные БД СУБД при перечислении таблиц

--pivot-column=P.. Имя стержневой (Pivot) колонки

--where=DUMPWHERE Использовать условие WHERE при дампинге таблиц

--start=LIMITSTART Первая выходная запись запроса для получения

--stop=LIMITSTOP Последняя выходная запись запроса для получения

--first=FIRSTCHAR Первый символ выходного слова запроса для получения

--last=LASTCHAR Последний символ выходного слова запроса для получения

--sql-query=QUERY SQL выражение для исполнения

--sql-shell Приглашение интерактивного SQL шелла

--sql-file=SQLFILE Выполнить SQL выражение из данного файла(ов)


Брут-форс:

Эти опции могут использоваться для записи проверок брут-форсом


--common-tables Проверить наличие распространённых таблиц

--common-columns Проверить наличие распространённых колонок


Инъекция заданных пользователем функций:

Эти опции могут быть использованы для создания определённых пользователем функций


--udf-inject Вставка предопределённых пользователем функций

--shared-lib=SHLIB Локальный путь до общей библиотеки


Доступ к файловой системе:

Эти опции могут быть использованы для доступа к файловой системе СУБД


--file-read=RFILE Прочитать файл из файловой системы СУБД

--file-write=WFILE Записать локальный файл в файловую систему СУБД

--file-dest=DFILE Абсолютный путь для записи файла в СУБД


Доступ к оперативной системе:

Эти опции могут быть использованы для получения доступа к ОС СУБД


--os-cmd=OSCMD Выполнить команду ОС

--os-shell Приглашение интерактивного шелла ОС

--os-pwn Прриглашение для внеполосного шелла, Meterpreter или VNC

--os-smbrelay Однокликовое приглашение для внеполосного шелла, Meterpreter или VNC

--os-bof Эксплуатация переполнения буфера хранимой процедуры

--priv-esc Повышение пользовательских привилегий процесса БД

--msf-path=MSFPATH Локальный путь где установлен Metasploit Framework

--tmp-path=TMPPATH Удалённый абсолютный путь директории временных файлов


Доступ к регистру Windows:

Эти опции могут использоваться к доступу к регистру Windows СУБД


--reg-read Прочитать значение ключа регистра Windows

--reg-add Записать значение ключа регистра Windows

--reg-del Удалить значение ключа регистра Windows

--reg-key=REGKEY Ключ регистра Windows

--reg-value=REGVAL Значение ключа регистра Windows

--reg-data=REGDATA Данные значения ключа регистра Windows

--reg-type=REGTYPE Тип значения ключа регистра Windows


Общие:

Эти опции могут быть использованы для установки общих рабочих параметров


-s SESSIONFILE Загрузить сессию из сохранённого файла (.sqlite)

-t TRAFFICFILE Записать весь HTTP трафик в текстовый файл

--batch Никогда не спрашивать пользовательского ввода, использовать поведение по умолчанию

--binary-fields=.. Поля результатов имеют двоичные значения (например, "digest")

--charset=CHARSET Принудительная кодировка символов, используемых для получения данных

--check-internet Проверить Интернет-соединение перед оценкой цели

--crawl=CRAWLDEPTH Ползать по веб-сайту начиная с заданного URL

--crawl-exclude=РЕГВЫРАЖЕНИЕ Регулярное выражение для исключения страниц для ползания (например, "logout")

--csv-del=CSVDEL Символ разделителя, используемый в выводе CSV (по умолчанию ",")

--dump-format=ДАМПФОРМАТ Формат сдампленных данных (CSV (по умолчанию), HTML или SQLITE)

--eta Отобразить для каждого вывода приблизительное время прибытия

--flush-session Стереть сессионные файлы для текущей цели

--forms Парсить и тестировать формы на целевой URL

--fresh-queries Игнорировать результаты запросов, сохранённые в сессионном файле

--hex Использовать шестнадцатеричную функцию(ии) СУБД для получения данных

--output-dir=OUT.. Пользовательский путь директории вывода

--parse-errors Парсить и отображать сообщения ошибок СУБД из ответов

--save=SAVECONFIG Сохранить опции в конфигурационный INI файл

--scope=SCOPE Регулярное выражение для фильтрации целей из лога proxy

--test-filter=TE.. Выбрать тесты по полезной нагрузке и/или названиям (например, ROW)

--test-skip=TEST.. Пропустить тесты по полезной нагрузке и/или названиям (например, BENCHMARK)

--update Обновить sqlmap


Разное:

-z MNEMONICS Использовать короткие мнемоники (например, "flu,bat,ban,tec=EU")

--alert=ALERT Запустить команду(ы) ОС, когда найдена SQL инъекция

--answers=ANSWERS Установить ответ на вопрос (например "quit=N,follow=N")

--beep Сигнал на вопрос и/или когда найдена SQL инъекция

--cleanup Очистить СУБД от специфичных для sqlmap пользовательских функций и таблиц

--dependencies Проверить на отсутствующие (неосновные) зависимости sqlmap

--disable-coloring Отключить раскрашивание вывода в консоли

--gpage=GOOGLEPAGE Использовать результаты дорка Google с указанного номера страницы

--identify-waf Провести тщательное тестирование на WAF/IPS/IDS защиту

--mobile Имитировать смартфон через заголовок HTTP User-Agent

--offline Работать в оффлайн режиме (использовать только данные сессии)

--purge-output Безопасно удалить всё содержимое из директории вывода

--skip-waf Пропустить эвристическое обнаружение WAF/IPS/IDS защиты

--smart Провести тщательные тесты только если эвристика дала положительные результаты

--sqlmap-shell Запрос интерактивного шелла sqlmap

--tmp-dir=TMPDIR Локальная директория для сохранения временных файлов

--web-root=WEBROOT Корневая директория веб-сервера (например, "/var/www")

--wizard Простой интерфейс мастера для начинающих пользователей




Перед началом работы обязательно нужно обмазаться VPN, носками и т.п. sqlmap можно запустить через прокси, однако скорость будет зависить от их качества. Есть ключ --tor, запускающий мап через цепочку - его использовать не рекомендую, т.к. сильно падает скорость (хорошо если есть vps и там можно оставить крутить дорки на длительное время).


Теперь я немного расскажу как крутить конкретный сайт и на что стоит обращать внимание.


Допустим, по какой-то неведомой причине, возникла необходимость слива с конкретного ресурса, а не использовать дорки.

Всегда есть шанс, что сайт блокирует подозрительные запросы по ip - выручат прокси, но это уже на этапе сканирования, а спрева нужно понять где искать уязвимость. Для этого надо как следует изучить целевой ресурс - чем больше соберем инфы, тем лучше.

sqlmap умеет работать с двумя типами запросов GET и POST, если с первым все более-менее понятно (тупо ищем в урлах строки вида [key]=[value] или *.php?,*.asp?key=value, например oprder.php?item=iphone), то для POST не так очевидно и нужно лезть в инструменты разработчика.

Там нас интересует вкладка network и тут мы видим все POST и GET запросы\ответы сервера.

Что бы увидеть тело запроса кликаем по строке с POST запросом и справа выбираем change and resend, в окошке body видим параметры - их и будем тестировать (просто копипастим в кавычки после ключа --data=''). Лучше под эти цели использовать tamper data для firefox, а в идеале burp (тут кому как удобнее, последний вариант предпочтительнее, описаный - проще). Пишем в комменты.


Итак, для тестирования GET параметра вызываем мап с ключем -u 'site.domain?key=value', а для POST указываем -u 'site.domain/vulnerability/targetpage' --data='param1=key&param2=key' .

Возможные варианты уязвимых POST запросов:

-страницы авторизации (бывает, что в админку можно попасть подставив вместо логина и пароля ' or ''=')

-страницы с динамическим контентом (чаты, живые поиски и тп.)

-страницы обновляющие сессии и контент


Часто бывает полезным просканировать директории сайта (я использую dirb) или выкачать его целиком (да пребудет с нами curl), что бы локально изучить его досконально. Конечно доступа к php скриптам у нас не будет (хотя стоит проверять варианты хранения временных файлов, например index.php~), но появится общее понимание структуры и возможных уязвимых мест.

Зачем сканить директории? Часто бывает так, что на сайте есть страницы статистики, атворизации или каких-то тестовых разработок, на котоыре не ведут ссылки. Такие разделы и страницы админы частенько по глупости оставляют без должного внимания - тут-то мы и можем найти нашу инъекцию.


Хватит лирики, перейдем к добыче картона.

Использовать будем дорки, где их брать - гугл в помощь. От себя тут добавлю, что паблик дорки в чистом виде не годятся - они задрочены.

Что бы запустить мап по доркам используем ключ -g 'dork', например -g 'inurl:".php?cid=" intext:"add to cart"&paypal' - что мы найдем? Правильно - сайты с GET параметро cid в тексте которого встречается "add to cart" и "paypal". Теперь нам надо добавить параметры атаки, например --dbs (узнать именя БД), --is-dba (проверить есть ли права на запись у текущего пользователя БД), --random-agent (имитируем сеанс случайного браузера, можно указать конкретный десктоп или мобилку - см. хайд с параметрами), --threads 10 (кол-во потоков, максимум 10, я обычно ставлю 3-5, что бы не агрить фильтры), --level 2 (по сути - кол-во тестов, максимальный 5, по умолчанию 1, для сканирования достаточно 1, а если найдется потенциально уязвимый параметр, тогда повышаем и можно добавить --smart), --risk (от 1 до 3, не совсем понимаю, что это значит, заметил, что чем он выше - тем чаще обрывается соединение), --tamper=(скрипты обхода фильтров, требует значения, например apostrophemask, charencode, equaltolike, halfversionedmorekeywords и т.п. указывать через запятую. ВАЖНО, что чем их больше, тем больше запросов мы шлем, поэтому злоупотреблять ими не стоит), --batch (ключ для лентяев, но в нашем случае с ним лучше, чем без него, энивей плохого мап не выберет

. Ключи изучайте на практике, не стесняйтесь писать в комменты


Итак, вводим в консоль:

-g 'inurl:".php?cid=" intext:"add to cart"&paypal' --batch --dbs --is-dba --threads 5 --level 2 --tamper=apostrophemask,charnecode,apostrophenullencode,multiplespaces и жмем Enter.


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

Основные типы сообщений (вообще приучите себя внимательно относиться к выводу консоли, разработчики не просто так писали разъяснения для того или иного исключения):

Все, что оранжевое (WARNING) говорит о возможной неудаче взлома и ее причинах.

Все что бледно-зеленое - текущий процесс, жирно-зеленое - сообщение о потенциальной уязвимости (если вы его схватили, считай что 80% успеха есть, даже если по итогу мап скажет, что параметр не уязвим, стоит перепроверить со --smart и --level 5, а так же разными скриптами тампера)

Все что красное - не оче хорошо, обычно либо проблемы с коннектом, либо проблемы на стороне сервера, либо сообщение о провале теста.


Итак, неспешно мы добрались до уязвимого сайта и получили сообщение, что пейлоад найден, а так же версию и список БД, наличие/отсутсвие прав записи (TRUE/FALSE) отлично!


Допустим увидели 2 БД в выдаче:

*information_schema

*targetbd


Первая БД нас по умолчанию не интересует, тем более если dba=FALSE, сразу крутим вторую, для этого вызываем новое окно терминала и запускаем еще один поток sqlmap но уже с параметрами:

-u 'тут пишем урл, который был отображен в начале теста взломаной БД' -D targetbd --tables, все остальное без изменений (можно накинуть потоков), - эта операция покажет нам все таблицы в данной бд. Нас будут интересовать таблицы с логинами/паролями админов, пользователей (например для дальнейшего чека) и конечно же данные картох (обычно это таблицы, в названии которых есть orders, orderdetails, transactions, ship, payments ну и проч, думаю поймете что мусор, а что нет)

Прежде чем дампить таблицу или базу целиком нужно убедиться, что там есть интересующая нас информация, т.к. чем крупнее сайт, тем больше база, тем дольше она будет дампиться. Поэтому сперва в предыдущем запросе меняем --tables на -T [имя таблицы] --columns и получаем названия стобцов. Если среди них есть нечто вида cc, ccnum, creditcard, cardnumber, cvv, exp, ccid, ccauth, ccsecurity и проч, тогда дампим, заменив --columns на --dump (можно указать файл для вывода, по умолчанию это будет папка .sqlmap/output/targeturl/dump/tablename.csv - мап укажет полный путь и имя)


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

Если мы столкнулись с хешами, топаем например сюда https://www.onlinehashcrack.com/hash-identification.php и определяем тип хэша. Это может быть как известный алгоритм, так и онный с солью или самописный (часто бывает, что данные просто в другой кодировке, например base64 или HEX - тут достаточно перевести в родимый utf-8).

Определив тип хеша можно попытаться его взломать, т.к. хеширование - процесс необратимый, будем брутить или гонять по онлайн сервисам например https://www.hashkiller.co.uk/ , для брута берем hashcat или passwordpro и молимся, предварительно неплохо обмазаться радугой - сильно упрощает жизнь. Бывает так, что расшифровать не получается, это еще не значит, что все потеряно! Можно искать на бордах в разделах крипты умельцев или, в конце-концов, продать одному из них зашифрованную базу за гроши (гроши лучше чем соленый болт на постном масле).


Что еще можно сделать? Да много чего, в отличии от sqldumpera, который как ковровая бомбордировка, sqlmap скорее самонаводящаяся ракета с лазерным прицелом. Можно пойти в админку (ее, безусловно нужно найти, но для этого туча тулз) и поискать что-то интересное там, например если из нее можно редактировать контент, а лучше сами php и добавить frame скрипт на страницу чекаута, который будт отправлять на сервер вводимые данные (благо их в паблике полно). Допилил бы статью, да день рабочий кончился.

Энивей, хотелось бы замутить именно Q&A, т.к. сам только учусь и буду рад, если в тред ворвется профи, разнесет все в пух и прах и укажет, где можно повысить эффективность.

:)


;)


Report Page