# 鬼仔:今天把theme从三栏改成了两栏,又修改了一些细节。两栏的文章阅读区域更大,不知道大家喜欢三栏还是两栏。
作者:zodiacsoft
从来就没有公开过未修补的bug,庆祝今天中午吃到一个很甜的砂糖桔,公开一个05年发现现在还没有修补的中文windows2003的bug。
典型问题出现在quser.exe。query user也是一样的。
main调用DisplayUserInfo,函数开始是:
.text:010017E6 ; __stdcall DisplayUserInfo(x, x, x) .text:010017E6 [email protected] proc near ; CODE XREF: _main+165 p .text:010017E6 .text:010017E6 DefaultChar = byte ptr -10C8h .text:010017E6 arglist = byte ptr -10C4h .text:010017E6 var_10C0 = word ptr -10C0h .text:010017E6 var_107C = dword ptr -107Ch .text:010017E6 var_1064 = dword ptr -1064h .text:010017E6 cchTime = dword ptr -105Ch .text:010017E6 WideCharStr = word ptr -0C3Ch .text:010017E6 var_C0C = dword ptr -0C0Ch .text:010017E6 var_C04 = dword ptr -0C04h .text:010017E6 var_804 = dword ptr -804h .text:010017E6 var_404 = dword ptr -404h .text:010017E6 var_4 = dword ptr -4 .text:010017E6 arg_0 = dword ptr 8 .text:010017E6 arg_4 = dword ptr 0Ch .text:010017E6 arg_8 = dword ptr 10h .text:010017E6 .text:010017E6 mov edi, edi .text:010017E8 push ebp .text:010017E9 mov ebp, esp .text:010017EB mov eax, 10C8h .text:010017F0 call __chkstk
开头是一段检查用户状态的,都很简单,到这里的时候
.text:01001918 push offset a20s15s ; "%-20s %-15s " .text:0100191D push eax ; FILE * .text:0100191E call ebx ; __imp__fprintf .text:01001920 add esp, 10h .text:01001923 push 1 .text:01001925 push dword ptr [ebp+arglist] ; arglist .text:0100192B call [email protected] ; StrConnectState(x,x)
调用了utildll.dll的一个函数。我们来看看中文win2k3 sp2 all hot fix下面的这个函数:
.text:5A9C2C5A ; __stdcall StrConnectState(x, x) .text:5A9C2C5A public [email protected] .text:5A9C2C5A [email protected] proc near .text:5A9C2C5A .text:5A9C2C5A String2 = word ptr -204h .text:5A9C2C5A var_4 = dword ptr -4 .text:5A9C2C5A arg_0 = dword ptr 8 .text:5A9C2C5A arg_4 = dword ptr 0Ch
开始是一些初始化的,然后在处理字符串的时候:
.text:5A9C2D33 lea ecx, [ebp+String2] .text:5A9C2D39 push ecx ; lpBuffer .text:5A9C2D3A push eax ; uID .text:5A9C2D3B push offset ModuleName ; "UTILDLL.DLL" .text:5A9C2D40 call ds:[email protected] ; GetModuleHandleW(x) .text:5A9C2D46 push eax ; hInstance .text:5A9C2D47 call ds:[email protected] ; LoadStringW(x,x,x,x)
这个时候,倘若有一个远程登录的用户登录后关闭了远程桌面,uID应该是0x135,这时候调用LoadStringW的时候,会返回一个unicode字符串”/x31/x55/x47/x72″。
在这种情况下对应的资源Disc,从上下文来看是”Disconnected”的缩写,因此对应中文本来该是“断开”,但是资源中,也就是上面的那个unicode字符串”/x31/x55/x47/x72″,却是“唱片”,这是一个很明显的bug。
顺便说一句,在英文版中,utildll.dll不存在这个问题。
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论