emlog签名爆破利用
字数 1250 2025-08-29 08:30:24
EMLog签名爆破利用技术分析
环境搭建
- 使用EMlog 2.5.3版本源码进行测试
- 安装过程需要注意的关键文件:
install.php
源码关键点分析
1. Cookie生成机制
在install.php文件中存在一个生成cookie的方法,简化后的核心逻辑如下:
function getRandStr() {
$chars = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randStr = '';
for ($i = 0; $i < 32; $i++) {
$randStr .= $chars[mt_rand(0, 61)];
}
return $randStr;
}
该方法:
- 循环32次
- 每次使用
mt_rand(0,61)从$chars中随机选取一个字符 - 最终拼接成32位随机字符串
生成的字符串会与EM_AUTHCOOKIE_前缀和分号拼接,赋值给AUTH_COOKIE_NAME
2. 获取明文信息的方法
方法一:通过登录获取
- 前提:知道账号密码或能注册新账号
- 问题:注册账号默认被封禁,需管理员开启
方法二:通过用户登出获取
- 登出时会返回
AUTH_COOKIE_NAME变量 - 注意:返回的字符串可能包含等号和%20(空格),这些是系统调用
setcookie方法时自动添加的
3. 随机数种子爆破
使用工具:php_mt_seed (https://github.com/openwall/php_mt_seed)
步骤:
- 修改PHP脚本,设置
allowable_characters(密文)和pass(cookie) - 对于32位字符串,需要在前面添加32组4个0的前缀
- 使用Python生成合适的输入格式
- 运行
php_mt_seed爆破出随机数种子
4. 鉴权绕过分析
getUserDataByLogin方法存在SQL注入漏洞:
- 关键点在于SQL语句的拼接方式
- 可以构造恶意输入实现注入
5. Cookie构造方法
构造恶意cookie需要以下信息:
558fb80a37ff0f45d5abbc907683fc02- 博客安装时得到的UA头MD5加密值- 在Windows上的Google浏览器环境中搭建
- 构造永真式实现绕过
注意:建议添加Referer头,否则可能无法成功进入后台
攻击利用流程
-
获取或预测
AUTH_COOKIE_NAME- 通过登出功能获取
- 或通过爆破随机数种子预测
-
利用SQL注入绕过鉴权
- 构造恶意cookie
- 包含有效的UA头MD5值
-
进入后台后的利用
- 上传Webshell的方法多样
- 可参考公开资料实现RCE
版本影响
- 多个EMlog版本存在类似问题
- 关键点在于如何利用
AUTH_KEY和AUTH_COOKIE_NAME - 特别注意
HTTP_USER_AGENT的MD5值在认证中的作用
防御建议
- 使用更强的随机数生成方法替代
mt_rand() - 修复SQL注入漏洞,使用参数化查询
- 加强cookie生成机制的不可预测性
- 对关键操作增加二次验证
- 及时更新到最新安全版本
总结
该漏洞利用EMlog在cookie生成和验证过程中的多个弱点:
- 可预测的随机数生成
- SQL注入漏洞
- 认证机制设计缺陷
通过组合这些弱点,攻击者可以在不知道密码的情况下绕过认证,获取后台权限,最终可能导致服务器被完全控制。