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



流程继续走到

.text:6B234531 push ?g_szMachineName@@3PAGA ; Str
.text:6B234537 call ebx ; __imp__wcslen
.text:6B234539 cmp [ebp+eax*2+String1], 2Eh
.text:6B234542 pop ecx
.text:6B234543 jnz loc_6B2345DD
.text:6B234549 mov eax, ?g_szComputerDnsName@@3V?$AP@G@@A ; AP<ushort> g_szComputerDnsName
.text:6B23454E test eax, eax
.text:6B234550 jz short loc_6B234570
.text:6B234552 lea ecx, [ebp+String1]
.text:6B234558 push ecx ; Str2
.text:6B234559 push eax ; Str1
.text:6B23455A call ds:__imp___wcsicmp ;比较字符串
.text:6B234560 pop ecx
.text:6B234561 test eax, eax
.text:6B234563 pop ecx
.text:6B234564 jnz short loc_6B234570 ; 这里不能跳转
.text:6B234566 mov ecx, [ebp+arg_4]
.text:6B234569 push 1
.text:6B23456B pop eax
.text:6B23456C mov [ecx], eax
.text:6B23456E jmp short loc_6B2345DF

注意这里
mov eax, ?g_szComputerDnsName@@3V?$AP@G@@A ; AP<ushort> g_szComputerDnsName
test eax, eax
jz short loc_6B234570

这个dns name是从机器中取的
.text:6B234552 lea ecx, [ebp+String1]
.text:6B234558 push ecx ; Str2
.text:6B234559 push eax ; Str1
.text:6B23455A call ds:__imp___wcsicmp

然后马上比较两个串是否相同。

根据我们的流程需要,最后要走到
mov ecx, [ebp+arg_4]
push 1
pop eax
mov [ecx], eax
jmp short loc_6B2345DF

然后这个天杀的 IsPathnameForLocalMachine 就总算返回为真了,而且我们同时绕过了以下两处的判断:
.text:6B2178CF cmp eax, ebx ; 比较ispath函数的返回值
.text:6B2178D1 pop ecx
.text:6B2178D2 jnz short loc_6B2178EC ; 这里有个判断

.text:6B2178EC cmp [ebp-1Ch], ebx ; 这里有个判断
.text:6B2178EF jz short loc_6B217906

从而让函数流程顺利的执行到了 ReplaceDNSNameWithNetBiosName

小结下绕过 IsPathnameForLocalMachine 的条件:
1. 要发送个 目标机器的dnsname 加上 一个斜杠 \
2. 要是unicode字符串发送dnsname

实际上从 ReplaceDNSNameWithNetBiosName 这个函数的名字也可以看出来,是要把DNS name替换为 机器名。

同时也可以看出来这个漏洞的利用条件: 需要知道目标机器的dnsname。
一般如果机器在域里面,那就是域后缀。
如下图:


我的机器名是: a-dda41398f44f4
DNS后缀是: .fuck

注意这个“.”很重要,在触发条件中是一定要的。

========= 这是要抓狂的分割线 =================

现在回过头来看 ReplaceDNSNameWithNetBiosName 的代码:
push esi
push 5Ch ; Ch
push [esp+8+Str] ; Str
call ds:__imp__wcschr
pop ecx
mov esi, eax
pop ecx
push ?g_szMachineName@@3PAGA ; Source
push [esp+8+Dest] ; Dest
call ds:__imp__wcscpy
pop ecx
pop ecx
push esi ; Source
push [esp+8+Dest] ; Dest
call ds:__imp__wcscat


就是把 \ 后面的字符串,wcscat到 机器名后面, 而这个拷贝发生在栈上,没有做长度检查,发生了栈溢出。

最后我使用覆盖seh 的方法利用成功发送超过2000 bytes字节的stub,保证覆盖到栈底触发异常,然后call ebx执行shellcode

下面是一个装B的exploit,只适用于我的机器(机器名是a-dda41398f44f4 , dns 后缀是.fuck ),如果你要修改,需要考虑到机器名的不同带来的影响,要重新计算payload长度值. 为啥说这是装B的exploit呢,因为明明有更清晰的exploit写法我不写,要写个可以忽悠很多人的。所以说大家要是以前看到过这种exploit写法又看不懂,那不要灰心,那个人只是和我一样在装B而已!

Exploit运行效果:

Shellcode 使用exitthread退出线程,则可以反复溢出,如果使用seh退出,则会反复执行你的shellcode

上一页  [1] [2] [3] [4] [5] [6] 下一页

  • 上一篇文章:
  • 下一篇文章:
  • 最近更新
    固顶文章 爱国者安全网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算法分析历程
    普通文章雨过天晴自我注册
    精彩专题