Показаны сообщения с ярлыком SQL-injection. Показать все сообщения
Показаны сообщения с ярлыком SQL-injection. Показать все сообщения

Sqlmap: SQL-инъекции - это просто


Разработкой сканера занимаются два человека. Мирослав Штампар (@stamparm), профессиональный разработчик софта из Хорватии, и Бернардо Дамеле (@inquisb), консультант по ИБ из Италии, сейчас проживающий и работающий в Великобритании. Проект появился на свет в 2006 г. благодаря Даниэлю Беллучи (@belch), но по-настоящему стремительно стал развиваться после того, как в 2009 г. в работу включились Мирослав и Бернардо.
Итак, что такое sqlmap? Одна из мощнейших открытых утилит для пентестера, которая автоматизирует процесс поиска и эксплуатации SQL-инъекций с целью извлечения данных или захвата удаленного хоста. Что делает sqlmap отличным от других утилит для обнаружения SQL-инъекций, так это возможность эксплуатировать каждую найденную уязвимость. Это означает, что sqlmap способен не только находить "дырку", но еще и заюзать ее по полной программе. А коль уж в качестве задачи ставится именно эксплуатация уязвимости, то сканеру приходится быть особенно внимательным к деталям: он не будет выдавать миллион ложных срабатываний "так, на всякий случай" (как это мы видим во многих других приложениях). Любая потенциальная уязвимость дополнительно проверяется на возможность эксплуатации. Сканер из коробки идет с огромным функционалом, начиная от возможности определения системы управления базой данных (далее DBMS), создания дампа (копии) данных и заканчивая получением доступа к системе с возможностью обращаться к произвольным файлам на хосте и выполнять на сервере произвольные команды. И все-таки главное — это обнаружение возможности сделать инъекцию SQL-кода.

Узнать имена колонок в таблице, зная ее название

Задача: Узнать имена колонок в таблице, зная ее название
Решение: Представлю недавно опубликованный на форуме sla.ckers.org юзером Paic способ, с помощью которого можно узнать имена колонок, если они имеют тип NOT NULL. Отправляем первый запрос, чтобы узнать, сколько колонок в нужной нам таблице:
id=1 and (select * from users) = (1)
В результате MySQL вернет ошибку «Operand should contain 7 column(s)». Это значит, что в таблице users 7 полей. Тогда составим логически верный запрос:
id=1 and (1,2,3,4,5,6,7) = (select * from users union select 1,2,3,4,5,6,7 limit 1)
Запрос верный и ошибки мы не увидим. А теперь о том, как узнать имена колонок. Для каждого поля в запросе поочередно подставляем последовательность символов %0 и, если у поля стоит ключ NOT NULL, мы увидим ошибку. Посмотрим на примере:
id=1 and (1,2,3,4,5,6,7) = (select * from users union select 1%0,2,3,4,5,6,7 limit 1)
В итоге видим ошибку – «Column ‘id’ cannot be null».
(c)xakep.ru

Обход фильтрации пробелов в SQL-injection


Задача: Обойти фильтрацию пробелов в SQL-injection
Решение

В прошлом номере я уже рассказал, как можно обойти фильтрацию запятых, но подобная фильтрация встречается крайне редко, совсем другой случай – фильтрация пробелов. Скажем, ты нашел инъекцию на крупном новостном портале, но никак не можешь ее раскрутить, так как все известные тебе варианты пробелов не работают. Давай рассмотрим такой код
<?php
if(isset($_GET['id']) && $_GET['id']!=»){
if(strstr($_GET['id'],» «) {die «HACK ALERT»};
if(strstr($_GET['id'],»/**/») {die «HACK ALERT»};
if(strstr($_GET['id'],»+») {die «HACK ALERT»};
if(strstr($_GET['id'],»%20″) {die «HACK ALERT»};

Обход фильтрации символов запятой при проведении SQL-Injection

Задача: Обойти фильтрацию символов запятой при проведении SQL-Injection
Решение:
Задача не банальная. Хоть и встречается редко, но, как правило, ставит в тупик многих людей. Допустим, мы имеем такой код:
<?php
if(isset($_GET['id']) && $_GET['id']!=»){
$replaced = preg_replace(/,/,»,$_GET);

….
здесь какие-то запросы с использованием переменной $replaced
К чему же мы приходим? Невозможно использовать конструкцию union select, если в запросе участвует больше 2-х полей. ОК, крутим как слепую, скажешь ты. Но в данном случае большинство известных способов, таких как использование функций substring(), mid(), ExtractValue(), а также последние наработки Qwazar’a в области раскрутки слепых инъекций работать не будут. Что же делать? Будем использовать логику SQL-выражений, и здесь поможет нам LIKE.
Для начала узнаем версию: