2016-08-18 3 views
-2

В локальном сервере XAMPP, который я создал для развития, у меня есть таблица, например, так:Как выполнить SQL-инъекцию для этого кода?

CREATE TABLE `entries` 
(

`id` int(10) UNSIGNED NOT NULL, 

`title` varchar(100) NOT NULL, 

`entry` text NOT NULL, 

`date_entered` datetime NOT NULL 

) 

Для того, чтобы узнать, как защитить свои запросы к инъекции SQL, я хочу, чтобы вызвать один (я намеренно не используя подготовленные заявления). У меня есть запрос, чтобы вставить запись в этой таблице, как так:

$sql = 'insert into entries (title , entry , date_entered) ' 
    . 'values("' 
    . $postTitle 
    . '","' 
    . $postEntry 
    . '","' 
    . $dateEntered 
    . '")'; 

Он работает (это вставить записи в таблице), но я не смог вызвать SQL инъекцию нападение на него. Вот что я пытался вставить в $postEntry поле:

;drop table entries; 
;drop table entries;' 
';drop table entries;' 
`;drop table entries;' 
q';drop table entries; 
q","e");drop table entries; --' 
q","e");drop table entries;-- 

Для последнего значения SQL-запрос стал:

insert into entries (title , entry , date_entered) values("r","q","e");drop table entries;--","2016-08-18 10:35:36") 

Еще записи таблицы нетронутыми!

Я изменил строку SQL, чтобы использовать одинарные кавычки, как так:

$sql = 'insert into entries (title , entry , date_entered) ' 
    . ' values(\'' 
    . $postTitle 
    . '\',\'' 
    . $postEntry 
    . '\',\'' 
    . $dateEntered 
    . '\')'; 

Затем попробовал:

q','2016-5-5');drop table entries; --' 

Но до сих пор нет удачи! Как я могу создать SQL-инъекцию? примечание: предлагаемый дубликат не дублируется и даже не отвечает. вся суть этого вопроса заключается в демонстрации экспоната, чтобы я убедился в том, что меры безопасности работают.

+0

Попробуйте выполнить подзапрос вместо нескольких разделов запятой. –

+0

mysqli_multi_query(); для выполнения нескольких запросов, разделенных полу (;) двоеточием – JYoThI

+0

Чтобы узнать, как защитить свои запросы от SQL-инъекций, вам нужно научиться защищать свои запросы. Хотя любой материал для инъекций совершенно не имеет отношения к защите. –

ответ

1

Mysql не разрешает несколько операторов в одном запросе. Вот почему заявления Drop игнорируются.

Использовать mysqli_multi_query() для нескольких запросов.

Вы все еще можете использовать другие инъекции.

Попробуйте использовать

http://sqlmap.org/

проверить уязвимость вашего кода.

1

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

Так, например, вы можете охватить таблицу, добавив массу дополнительных представлений из одного сообщения. Вам нужно будет работать над этим, но на догадку можно попробовать установить $ посттаможенном быть:

poo'),'2016-5-6'),('poo','poooo','2016-5-5'),('poo','poooo 

Идея заключается в том, что начало строки $ посттаможенном первым заканчивает первоначальный запрос правильно, то добавляются дополнительные значения и затем заканчивается в точке, когда исходный запрос собирался заключить одну цитату вокруг значения $ postEntry. Вам нужно было бы установить $ postEntry точно так, как я набрал. Я думаю .. :)

1

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

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

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

В результате я могу использовать поле postEntry как результат для отображения результата любых SQL-запросов, манипулируя значением postTitle.

ПРИМЕЧАНИЕ: Возможно, я пропустил одну цитату или что-то в этом роде, потому что я просто набираю это на лету, основываясь на том, что, как я знаю, может работать, поэтому вам нужно будет немного поработать с теорией. Я почти уверен, что пример кода можно скопировать и вставить.

Этап 1). Выясните список доступных для запроса таблиц. Set $ ​​postTitle (не запись) следующим образом:

poo',SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEME.TABLES),'2016-5-5'),'poo 

После подачи этого (и при условии, что вы принимаете меня на страницу, показывая мне свой пост) главный пост область должна содержать запятую список таблиц из база данных

Этап 2). Очистка Скопируйте список и немедленно удалите мое сообщение, чтобы уменьшить статус предупреждения для всех, кто смотрит.

Этап 3). Получить имена столбцов таблицы Используйте тот же метод для создания оператора SELECT, который извлекает все имена COLUMN из конкретной таблицы, имена которых я теперь знаю. Я получаю сообщение, которое содержит запятую отдельный список столбцов для этой таблицы.

Этап 4). Очистить снова

Этап 5). Вероятно, вы можете увидеть, куда сейчас идет. Теперь я могу в значительной степени выбрать любые данные, которые я хочу получить из любой таблицы, запустив инструкцию select и просмотрев вывод на моем посту.

Смежные вопросы