Показать сообщение отдельно

Заметка о фрагментированной SQL-inj
  #3  
Старый 01.12.2008, 11:30
Elekt
Banned
Регистрация: 05.12.2005
Сообщений: 982
Провел на форуме:
4839935

Репутация: 1202


Отправить сообщение для Elekt с помощью ICQ
По умолчанию Заметка о фрагментированной SQL-inj


Заметка о фрагментированной SQL-inj

Использование "substr\substring" создает потенциальную уязвимость.

Предположим, что $_POST['name'] слэшируется magic_quotes либо addslashes()
Перед подстановкой в SQL $query переменная $_POST['name'] обрезается по длине(в эстетических соображениях приемлемой длины имени, либо с целью профилактики уязвимости обрезания транзакций SQL). Кстати, обрезание транзакций можно использовать точно также.

Пусть исходное $_POST['name'] будет [ cooladmin' ]
После слеширования: [ cooladmin\' ]
Пусть сабстринг обрезает до 10ти символов: [ cooladmin\ ]

PHP код:
mysql_query("SELECT * from users WHERE user='".substr($_POST['name'],0,10)."' AND passwd='".$_POST['pass']."'"); 
История аналогична ecard дыре в копермайне.
Слэш экранирует ковычку, открывающая ковычка pass превращается в закрывающую, а через сам pass проводится атака.

Сабстринг может быть как php так и sql. Только в случае sql сложнее: нужен первичный инсерт\апдейт\реплэйс запрос, а затем второй запрос, чувствительный в выборке к слэшу.

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