LaborOfficeFree 中弱 MySQL 数据库 root 密码影响版本 19.10。此漏洞允许攻击者使用两个常量计算 LaborOfficeFree 所用 MySQL 数据库的 root 密码。
在测试实验室中安装 LaborOfficeFree 并逆向备份过程后,可以确定它创建了一个 "mysqldump.exe" 进程,该进程使用 root 用户,而密码来源于字符串 "hola" 连接 "00331-20471-98465-AA370"(在此案例中)。这似乎是许可证密钥,但与 GUI 仪表板中显示的许可证不同。此许可证必须从内存中提取。例如,附加调试器并在 mysqldump 进程中中断(为此,不需要管理员权限)。
此外,该应用程序会检查你是否是管理员来执行备份,如果不是以管理员身份运行则失败。但此检查无效,因为它实际上使用的是派生密码调用 mysqldump。因此,不需要管理员权限。
以下是 LaborOfficeFree.exe 中负责计算 root 密码的过程的反汇编片段。
00506548 | 53 | push ebx | 这里是进行 XOR 等操作计算密码的地方 :)
00506549 | 56 | push esi |
0050654A | A3 7CFD8800 | mov dword ptr ds:[88FD7C],eax | eax:"hola00331-20471-98465-AA370"
0050654F | 0FB7C2 | movzx eax,dx | eax:"hola00331-20471-98465-AA370"
00506552 | 85C0 | test eax,eax | eax:"hola00331-20471-98465-AA370"
00506554 | 7E 2E | jle laborofficefree.506584 |
00506556 | BA 01000000 | mov edx,1 |
0050655B | 8B1D 7CFD8800 | mov ebx,dword ptr ds:[88FD7C] |
00506561 | 0FB65C13 FF | movzx ebx,byte ptr ds:[ebx+edx-1] |
00506566 | 8B31 | mov esi,dword ptr ds:[ecx] |
00506568 | 81E6 FF000000 | and esi,FF |
0050656E | 33DE | xor ebx,esi |
00506570 | 8B1C9D A40B8800 | mov ebx,dword ptr ds:[ebx*4+880BA4] |
00506577 | 8B31 | mov esi,dword ptr ds:[ecx] |
00506579 | C1EE 08 | shr esi,8 |
0050657C | 33DE | xor ebx,esi |
0050657E | 8919 | mov dword ptr ds:[ecx],ebx |
00506580 | 42 | inc edx |
00506581 | 48 | dec eax | eax:"hola00331-20471-98465-AA370"
00506582 | 75 D7 | jne laborofficefree.50655B |
00506584 | 5E | pop esi |
00506585 | 5B | pop ebx |
00506586 | C3 | ret |
此过程得到的结果数字随后被取反(按位 NOT)并转换为有符号整数。注意:地址 0x880BA4 存储了一个由 256 个 DWORD 组成的常量数组。
005065C8 | F755 F8 | not dword ptr ss:[ebp-8] |
运行此脚本可产生 LaborOfficeFree MySQL 的 root 密码。
C:\Users\***\Desktop>python myLaborRootPwdCalculator.py
1591779762
C:\Users\***\Desktop>