emlog签名爆破利用
字数 1250 2025-08-29 08:30:24

EMLog签名爆破利用技术分析

环境搭建

  1. 使用EMlog 2.5.3版本源码进行测试
  2. 安装过程需要注意的关键文件: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)

步骤:

  1. 修改PHP脚本,设置allowable_characters(密文)和pass(cookie)
  2. 对于32位字符串,需要在前面添加32组4个0的前缀
  3. 使用Python生成合适的输入格式
  4. 运行php_mt_seed爆破出随机数种子

4. 鉴权绕过分析

getUserDataByLogin方法存在SQL注入漏洞:

  • 关键点在于SQL语句的拼接方式
  • 可以构造恶意输入实现注入

5. Cookie构造方法

构造恶意cookie需要以下信息:

  1. 558fb80a37ff0f45d5abbc907683fc02 - 博客安装时得到的UA头MD5加密值
  2. 在Windows上的Google浏览器环境中搭建
  3. 构造永真式实现绕过

注意:建议添加Referer头,否则可能无法成功进入后台

攻击利用流程

  1. 获取或预测AUTH_COOKIE_NAME

    • 通过登出功能获取
    • 或通过爆破随机数种子预测
  2. 利用SQL注入绕过鉴权

    • 构造恶意cookie
    • 包含有效的UA头MD5值
  3. 进入后台后的利用

    • 上传Webshell的方法多样
    • 可参考公开资料实现RCE

版本影响

  • 多个EMlog版本存在类似问题
  • 关键点在于如何利用AUTH_KEYAUTH_COOKIE_NAME
  • 特别注意HTTP_USER_AGENT的MD5值在认证中的作用

防御建议

  1. 使用更强的随机数生成方法替代mt_rand()
  2. 修复SQL注入漏洞,使用参数化查询
  3. 加强cookie生成机制的不可预测性
  4. 对关键操作增加二次验证
  5. 及时更新到最新安全版本

总结

该漏洞利用EMlog在cookie生成和验证过程中的多个弱点:

  1. 可预测的随机数生成
  2. SQL注入漏洞
  3. 认证机制设计缺陷

通过组合这些弱点,攻击者可以在不知道密码的情况下绕过认证,获取后台权限,最终可能导致服务器被完全控制。

EMLog签名爆破利用技术分析 环境搭建 使用EMlog 2.5.3版本源码进行测试 安装过程需要注意的关键文件: install.php 源码关键点分析 1. Cookie生成机制 在 install.php 文件中存在一个生成cookie的方法,简化后的核心逻辑如下: 该方法: 循环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注入漏洞 认证机制设计缺陷 通过组合这些弱点,攻击者可以在不知道密码的情况下绕过认证,获取后台权限,最终可能导致服务器被完全控制。