На сайте есть место, где можно редактировать пользовательские файлы, хранящиеся на сервере. Редактирование происходит с подключением по SSH.
Вкратце схема такая:
1. In1ernal Error - 18 Августа, 2011 - 21:04:24 - перейти к сообщению
Где $str - строка, полученная от пользователя; $file - нужный мне файл.
Но здесь можно сделать инъекцию(не знаю даже как ее назвать, php/bash наверное), например, если в $str пользователь передаст строку
Цитата:
\" >> $file; touch admin_n00b; echo \"
то в итоге получится
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- $command.="echo \"\" >> $file; touch admin_n00b; echo \"\" >> $file;";
То есть пользователь сможет выполнять на сервере все, что ему захочется (только то, что позволяют права, но все равно бяка будет)
Я попытался решить эту проблему просто отфильтровав некоторые значимые команды:
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- function check_bash_inj($str){
- $bash = array(0 => 'rm ', 1 => 'cd ', 2 => 'touch ', 3 => 'cat ', 4 => 'echo ', 5 => '/etc', 6 => '/data', 7 => '/var', 8 => ';', 9 => 'ls ', 10 => 'mv ', 11 => 'su ', 12 => 'sudo ');
- foreach($bash as $key => $value){
- new_mail("bash_inj: $str ____ $value");
- }
- } else {
- }
- }
- }