[工具编写][漏洞研究]MS17-010分析-上

[工具编写][漏洞研究]MS17-010分析-上,第1张

win7 sp1 32bits srv.sys 6.1.7601.17514

srvnet.sys 6.1.7601.17514

PS:这两个文件在 C:\Windows\System32\drivers 下

windbg双机调试

该漏洞主要是利用smb1在处理一个结构体转换过程中,错误计算了大小,导致的溢出。Nasa的工具集的EternalBlue利用这个溢出,对后面相连的一个内存池做了覆盖,并利用堆喷射的技巧,精准覆盖了0xffdff000的可执行内存,这个内存本来是系统预留用于存储一些配置信息的(Win7x86中是这个地址,Win7x64中是0xffffffffffd00010),最终在srvnet!SrvNetWskReceiveComplete这个函数中触发了shellcode。

溢出漏洞的函数链

srv!SrvSmbOpen2 ->srv!SrvOs2FeaListToNt ->srv!SrvOs2FeaListSizeToNt ->srv!SrvOs2FeaToNt

3.下以下几个断点

bu srv!SrvOs2FeaListSizeToNt内存长度计算出错的函数

bu srv!SrvOs2FeaToNt内存实际溢出的函数

bu srv!SrvOs2FeaListToNt 上层函数

bu srv!SrvSmbOpen2 接收数据的地方

10. SrvOs2FeaListSizeToNt 的函数分析如下图

关键点在于 mov word ptr [eax], si 这个汇编语句,仅赋值了低位数据 :

11.下个断点,看一下poc的结构体分布。

本来后面想研究一下它怎么实现的堆布局,以及覆盖这部分内存是什么结构体,以及shellcode写入的包是在哪个部分的,发现自个有点搞不动了,看几天书回忆回忆再来弄。

之前分析wanacry的时候感觉挺简单的,内核分析感觉像是在盲人摸象,每一次观察都能有新的东西,但是又始终无法有一个完整清晰的轮廓。

一份好心人的windows源码

https://github.com/Hengle/windows_nt_3_5_source_code

一份可以让你在三环弄明白大致原理的分析文章

https://paper.seebug.org/280/

一份隐藏了利用细节,但是展现详细调试细节的文章

https://www.anquanke.com/post/id/86270

听起来要把两台机器联网好像很麻烦,其实仔细想想也就需要下面几步:

1.安装硬件:也就是网卡(2台机器上各一块网卡)

2.调理硬件

3.安装软件:(1)首先,要在作为主机的机器上安装网络共享软件(2)其次,要在另外一台机器上安装网络共享软件

必要的硬件条件

如果仅仅是两台电脑连接,虽然可以简单地用一根串口线缆将两台电脑的串口连接起来,而且串口线在电脑城只要十几块钱就可以买到,

但是需要占用串口资源,连接带宽低,线缆长度比较短。因此,实用价值并不高。

通常使用的双机连接方法,是在每台电脑上分别安装网卡,用网线将网卡直接连接即可。硬件方面,推荐使用PCI接口的10M/ 100M自适

应网卡,价格从30元到几百上千元的都有,

一般家庭使用,50元左右的网卡完全足够了。网线只需要一根即可,长度根据两台电脑间距离而定,价格一般为1元/米;

网线接头通常为1元/个,一根网线需要两个接头。在购买网线时,让商家直接把网线的接头给你做好。需要注意的是,要告诉商家你是

用网线直接连接两台电脑,不通过集线器。

如果家里不止两台电脑,就需要一个集线器(HUB,),每台电脑的网卡通过网线连接到集线器。通常家庭购买三四百元的8口

(就是可以连接8台电脑)10M/100M自适应集线器就可以了。由于要把每台电脑都跟集线器连接,所以有几台电脑就需要几根网线。

网线接头也在购买时让商家帮你做好。

双机互联我们需要选择一台性能相对较好的电脑充当服务器的角色,一般选择已经调试好能够上宽带的那台机器作为服务器。

由于宽带接入本身需要一块网卡,这样在服务器上面需要安装两块网卡,在另外一台机器上(也就是性能稍差点的机器上)安装一块网卡。

在花费了不多的金钱之后,就该用稍微多一些的时间来安装、调试硬件和设置软件,以便让家庭网络能够真正地“跑”起来。

调 理 硬 件

硬件的安装非常简单,打开机箱,找到主板上空闲的PCI插槽,将网卡插入其中即可。如果是两台电脑,将网线的两头分别连接到

两台电脑的网卡上即可。

如果是几台电脑,则用网线分别把每台电脑的网卡和集线器连接起来。

其中主要是服务器的安装设置比较麻烦。

下面,我们就先把服务器这个难关攻克!

假设我们把已经接好宽带,把可以正常上网的那台电脑作为服务器。不管是使用电信的ADSL宽带,还是其他形式的宽带,

服务器里面本来就有一块网卡,使用一个真实的固定IP地址(或者从ISP那里获取动

态的IP地址)。现在需要做的就是设置新安装的那块网卡,在“控制面板”下的“网络”里面,找到新网卡,为网卡添加TCP/IP协议。

默认状态下,网卡安装完成后就自动安装了TCP/IP协议,在控制面板里面的 “网络”中可以看到。如果没有,点击“安装”(Windows2000)

或者“添加”(Windows98)安装TCP/IP协议。在“Internet协议(TCP/ IP)”中将IP地址设为192.168.0.1 (这是一个规定保留的IP,

在互联网上不会有形如192.168.xxx.xxx的 IP),子网掩码设置为255.255.255.0,默认网关不设。一般来说,为了更好地利用家庭网络,

除了TCP/IP协议之外,同时添加“NetBEUI” 和“IPX/SPX”协议。

其他的电脑通过服务器上网,称为客户机。客户机的网卡安装完成之后,在“控制面板”下的“网络”里面添加跟服务器一样的协议,

不同的是在

“Internet协议(TCP/IP)”中将IP地址设置为192.168.0.x(其中x的取值范围是2到255。需要注意的是,各台电脑不能使用重复的IP地址),

子网掩码跟服务器一样用255.255.255.0,默认网关就是服务器的IP地址,即192. 168.0.1。

设置妥当,重新启动电脑之后,测试家庭网络是否正常运行:

进入“MS-DOS方式”(Win9X)或者“命令提示符” (Win2000&XP),键入如下命令,按回车。

Ping 192.168.0.x(也就是其他电脑的IP地址),如果看到类似下面的回答,就表明网络已经正常运行,硬件的安装调试也就大功告成了!

Pinging 192.168.0.5 with 32 bytes of data:

Reply from 192.168.0.5: bytes=32 time=10ms TTL=252

Reply from 192.168.0.5: bytes=32 time=10ms TTL=252

Reply from 192.168.0.5: bytes=32 time=10ms TTL=252

Reply from 192.168.0.5: bytes=32 time=10ms TTL=252

硬件的安装调试倒是比较简单,但安装、设置软件可就要复杂一些了,不过按照下面的步骤逐一进行,也只是花费你“稍微”多一点的时间

而已。

调 理 软 件

要实现共同上网,其实就是让可以上网的那台电脑(服务器)充当代理服务器,其他电脑全部通过代理服务器进行网络访问。

实现网络共享可以由 *** 作系统完成,Windows98第二版、 Windows Me、Windows2000、Windows XP中都可以通过共享拨号网络

(ADSL使用虚拟拨号)实现。只要在拨号网络的属性中的共享栏目中,启用 “ Internet连接共享”,客户机在 Internet Explorer中的

“Internet选项”里面的“连接”中选择“通过局域网连接到Internet”,并且在“局域网设置”中选定“自动检测设置”。

如果 一切正常就可以浏览网页了。至于其他网络软件,比如 QQ、Foxmail等,只要简单地把连接方式设置为局域网就可以了,

Windows Me系统中具有家庭网络向导,如果服务器安装的是Windows Me,在“开始/程序/附件/通讯”中打开“家庭网络向导”,

只要在“使用下列设备连接到我的ISP”选项中选择正确的上网方式,其他设置按照向导提示不断点击“下一步”即可。

这种方法分配给客户机的权限比较大,而且服务器无法监控客户机的网络使用情况。

还有一种方式是通过专门的软件。用专门的软件来实现网络共享,不仅简单,而且控制性比较好。我们就来看看比较常见的网络共享软件:

WinGate

代理服务器软件的大哥大要算WinGate了。作为一款优秀的代理服务器应用软件,WinGate能使多个用户通过一个连接(包括宽带、Modem、

ISDN、专线等)实现同时访问Internet。相对同类软件,WinGate有很多优点,如可以分级分组限制用户对Internet访问的能力,

通过GateKeeper 提供强劲的远程控制和用户认证能力(Pro版)、记录和审计能力、 HTTP缓存(节省带宽和加速访问)、连接映射等等。

但是WinGate的 *** 作设置复杂,而且很多功能对于家庭用户来说完全没有必要。

SyGate

虽然跟WinGate比起来SyGate功能较单一,对客户端的控制管理功能不够强大。不过对于家庭使用却是正好合适,而且SyGate在 *** 作方面更为

简单、易用。

下面就针对服务器和客户端分别介绍:

一、服务器安装

1.双击SyGate的安装程序,当解压完成后,出现欢迎窗口。

2.单击“下一步”,出现软件使用协议,单击“是”。

3.如果要更改SyGate的安装路径,单击“浏览”按钮。在“选择文件夹”对话框中输入要更改的安装路径,然后单击“OK”。如果你所要找

的文件夹不存在,则新建立一个文件夹。

4.单击“下一步”,出现程序组对话框,如果有需要的话,可以改变程序组名称。

5.单击“下一步”,安装程序开始安装,然后提示你执行“Server”安装或“Client”安装,选择“Server” (图6),单击“OK”。

安装程序开始执行SyGate诊断程序(SyGate Diagnostics,图7),测试前需要先连接到因特网。该程序将进行以下测试:

●系统设置

●网卡

●TCP/IP协议和设置

注: 如果这三项中的任何一项无法通过测试,安装程序将出现一个信息框,描述可能存在的问题,并提出解决方案。单击“OK”,退出诊断

程序。纠正这些错误,然后再次运行SyGate诊断程序(SyGate Diagnostics)。

6.单击“继续”(如果你选择“Skip”,可跳过以下测试。

然而,在你运行SyGate管理程序之前,还是需要先成功地运行诊断程序)。和TCP/IP的测试一样,SyGate诊断程序要检查ISP的连接。

如果你的配置正确,安装程序会显示测试过程是成功的。需要注意的是,在按下“Continue”之前,需要保证已经连接到Internet上。

7.单击“OK”,然后单击“Finish”。在安装的第一时间里,“软件注册”对话框出现,请完成下面的一项:

●如果你已经购买了SyGate许可证,其中包含了你的序列号和注册码,在“软件注册”对话框内输入你的姓名,公司的名称,E-mail地址

(可以不输),序列号以及注册码,然后单击“OK”。

●如果没有购买SyGate许可证,则单击“I Am a Trial User”按钮。

8.安装程序提示你重新启动计算机。

在你的计算机系统启动之后,运行SyGate管理程序(SyGate Manager),你将看到本地工作站出现在SyGate网络邻居表

(SyGate Network Neighborhood)中(图8)。

二、客户端安装

SyGate的客户端(client)安装并不是必须的,只 要前面的IP、子网掩码、网关设置妥当后,在Internet Explorer中的“Internet选项”

里面的“连接”中选择“通过局域网连接到Internet”,并且在“局域网设置”中选定 “自动检测设置”(图5)。

如果一切正常就可以浏览网页了。至于其他网络软件,比如QQ、Foxmail等,只要简单地把连接方式设置为局域网就可以了。

安装客户端的目的在于实现一些特殊的功能,比如检查因特网的连接状态或自动拨号上网或挂机。

1.双击安装程序图标,当解压缩完成后,出现欢迎窗口。

2.单击“下一步”,出现软件使用协议,单击“是”。

3.如果你要更改SyGate的安装路径,单击“浏览”按钮。在“选择文件夹”对话框中输入要更改的安装路径,然后单击“OK”。

如果你所要找的文件夹不存在,则新建立一个文件夹。

4.单击“下一步”,出现程序组对话框,如果有需要的话,可以改变程序组名称。

5.单击“下一步”,安装程序开始安装,然后提示你执行“Server”安装或“Client”

6.选择“Client”安装,单击“OK”。安装程序开始执行SyGate诊断程序(SyGate Diagnostics),单击“Finish”。

安装程序将自动启动SyGate Manager(Client),在SyGate网络邻居表中,你将看到本地工作站,这和你在服务器端看到的是一样的。

安装了Sygate客户端之后,不用做其他任何设置就可以正常使用所有网络软件,诸如QQ、ICQ、Outlook Express、FTP软件等等。

除了多台电脑同时上网,现在你打开“我的电脑”,在任意一个驱动器、硬盘分区、打印机、扫描仪等设备上单击右键的d出菜单中就

会有“共享”选项,点击进入设置共享之后,其他电脑就可以通过家庭网络共享设备了!对于需要保密的东西,你还可以设置访问密码,

只有知道密码才可以访问。

其实,使用ISDN或者Modem拨号上网也一样可以建立家庭网络,除了接入部分有少许不同,其他硬件和软件的安装设置跟上面都几乎相同。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6456479.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-22
下一篇 2023-03-22

发表评论

登录后才能评论

评论列表(0条)

保存