Инъекция SQL с уязвимостью в нескольких кодировках mysql_escape_string для записи выходного файла
На прошлой неделе я пытался обойти SQL-запрос с помощью уязвимости PHP addlashes/mysql_escape с использованием языков с несколькими наборами символов.
Принимая во внимание следующий PHP-код, я пытаюсь манипулировать запросом с помощью инжекции для записи в выходной файл по своему выбору:
$username = mysql_escape_string($_POST["puser"]);
$password = mysql_escape_string($_POST["ppwd"]);
$sql = "SELECT * FROM users WHERE username='$username' and password='$password'";
База данных использует кодировку gbk.
Я знаю, что, вставляя 0xbf27, я могу избежать одиночной кавычки, так как функция mysql_escape_string превращает код в 0xbf5c27, однако я не могу понять, как сделать рабочий запрос SQL для записи выходного файла с использованием этого метода.
Внедрение в параметр пароля, ближайший я могу получить следующее:
aaaa%Bf%27+UNION+SELECT+1+INTO+OUTFILE+%BF%27/tmp/sql.out
который выводит неверный синтаксический запрос как:
SELECT * FROM users WHERE username='000' and password='aaa縗' UNION SELECT 1 INTO OUTFILE 縗'/tmp/sql.log'
Недопустимый запрос из-за символа между параметром OUTFILE и именем файла, сгенерированным как часть внедрения.
Из того, что я прочитал в документации MySQL, говорится, что кавычки вокруг имени файла являются обязательными.
Есть ли способ использовать это для записи произвольного содержимого файла?
Любые мысли очень ценятся.
mcgeezer