欧美精品一区二区,体育生GAY白袜调教VIDEO,私人影院播放器,色偷偷AV老熟女色欲涩爱

?
內(nèi)容中心
按關(guān)鍵字查找
數(shù)據(jù)庫安全漏洞淺析之緩沖區(qū)溢出漏洞(2)
作者:安華金和 發(fā)布時(shí)間:2017-01-25

前文中我們對數(shù)據(jù)庫安全漏洞中最為常見的一種——緩沖區(qū)溢出漏洞進(jìn)行了簡單的概念介紹。在靜態(tài)數(shù)據(jù)溢出、棧溢出和堆溢出三種類型中,棧溢出和堆溢出相對來說更復(fù)雜,且危害范圍較大,在前文概念介紹的基礎(chǔ)上,本文對windows下的棧結(jié)構(gòu)進(jìn)行更直觀的介紹,通過構(gòu)造一段代碼示例,更清晰的演示棧結(jié)構(gòu)下的緩沖區(qū)溢出漏洞原理。

下面我們將構(gòu)造一段代碼,完成3個(gè)任務(wù):

1.演示W(wǎng)IN下棧的結(jié)構(gòu)

2.演示緩沖區(qū)溢出改變函數(shù)控制流程

3.演示緩沖區(qū)溢出覆蓋返回地址(劫持函數(shù))

下面的程序包含一個(gè)主函數(shù)main和另外一個(gè)子函數(shù)re_choose。re_choose函數(shù)用于把從main函數(shù)中取得的輸入字符串和存儲的字符串liusicheng做對比。如果輸入的字符串和存儲的字符串一致則返回0。如果不一致則可能返回1或者-1。同時(shí)還人為制造了一個(gè)緩沖區(qū)溢出點(diǎn)strcpy(buffer,input)。input有1024的空間,而buffer只有44的空間。只要input超過44則就會引發(fā)緩沖區(qū)溢出。main函數(shù)取re_choose返回值如果返回1或-1走if。如果返回0則走else。將用緩沖區(qū)溢出來讓返回1或者-1也走else。

#include <stdio.h>

#include <string.h>

#define ture_password "liusicheng"

int re_choose (char *input)

{

int result;

char buffer[44];

result = strcmp(input,ture_password);       

strcpy(buffer,input);                 //緩沖注入點(diǎn)

return result;

}

 void main()

{

int choose=0;        

char input[1024];

scanf("%s",input);

choose=re_choose(input);

if (choose == 1 || choose == -1)

{

printf("error\n");

else

{

printf("ture\n");

}

}

     

編譯出上面代碼的release版,放入IDA pro中得到反編譯代碼。下圖是MAIN函數(shù)的流程結(jié)構(gòu)。清楚的看到main函數(shù)的整個(gè)控制流程和main函數(shù)的棧從建立到銷毀的全過程。棧主要用在函數(shù)調(diào)用上。進(jìn)程調(diào)用的開始會調(diào)用大量系統(tǒng)函數(shù),其中大量函數(shù)的地址是固定不變的(只和操作系統(tǒng)版本有關(guān)系),這些固定的函數(shù)將成為以后用于跳轉(zhuǎn)的平臺 。本文先不涉及這些函數(shù)。直接跳到main函數(shù)開始介紹。棧的結(jié)構(gòu)是4個(gè)字節(jié)為一層。如果超過4個(gè)字節(jié)。按照4個(gè)整數(shù)倍存儲。不足4個(gè)字節(jié)按照4個(gè)字節(jié)存儲。棧的主要操作只有2種push和POP。push是把寄存器的內(nèi)容壓入到棧中,pop是把棧中的內(nèi)容釋放掉。ebp是當(dāng)前棧幀的棧底,esp是當(dāng)前棧幀的棧頂。(注意由于棧是順序執(zhí)行的所以同一時(shí)間只有一個(gè)棧頂和一個(gè)棧底。但棧底一般不是整個(gè)系統(tǒng)棧的棧底,而只是當(dāng)前這個(gè)棧幀的棧底)。棧的結(jié)構(gòu)采用先進(jìn)先出,后進(jìn)后出的原則。所以當(dāng)創(chuàng)建一個(gè)棧的時(shí)候會遵循如下步驟:

1把上一個(gè)棧幀的棧底的指針壓入當(dāng)前棧保存起來(push ebp)。這一步其實(shí)是2步:第一步壓入返回地址,第二步壓入當(dāng)上一個(gè)棧幀的ebp。

2把上一個(gè)棧幀的棧底移動到上一個(gè)棧幀的棧頂(mov ebp,esp)。從此這個(gè)棧的棧底就確定且不會發(fā)生任何改變。棧頂esp會一直發(fā)生變化。

3接著分配局部函數(shù)(sub esp,404h)。本程序中2個(gè)變量1個(gè)是4字節(jié)1個(gè)是1024字節(jié)。加一起正好是0x404個(gè)字節(jié)。需要棧頂上移0x404。注意棧的方向和內(nèi)存相反。數(shù)據(jù)進(jìn)入內(nèi)存是從低地址向高地址寫,而棧則是從高地址向低地址寫。正是這種結(jié)構(gòu),給了后來數(shù)據(jù)改寫之前數(shù)據(jù)的機(jī)會。棧頂?shù)闹禃S著棧中數(shù)據(jù)隨時(shí)進(jìn)行調(diào)整。 


          20170125-1.jpg
注意:上圖中var_404= -404h、str1= -400h

  同樣棧撤銷的時(shí)候基本可以按照棧建立的逆操作進(jìn)行。首先把棧底值覆蓋棧頂(mov esp,ebp)。接著棧中彈出當(dāng)前ebp的值(pop ebp)。然后跳轉(zhuǎn)EIP中存儲的上個(gè)函數(shù)的返回地址(retn),回到前一個(gè)棧幀中(上一個(gè)函數(shù)中)刪除返回地址行(add esp 4)。到此棧被完全撤銷。至此一個(gè)棧從建立到撤銷的全部過程已經(jīng)完成。我們除了關(guān)心一個(gè)棧的創(chuàng)建和消亡,更關(guān)心的就是棧是如何傳遞返回值和參數(shù)的。下圖是re_choose的反匯編圖:清楚的解釋了,在棧中是如何傳參和返回值的。

20170125-3.png            

注上圖中 var_4= -4 、str1 = 8

main函數(shù)從 call sub_401000這句開始,創(chuàng)建子函數(shù)re_choose的棧幀,開始也是和main一樣的棧創(chuàng)建過程。直到執(zhí)行到 mov eax,[ebp+str1],這句就是大家最關(guān)心的傳參。在棧中固定不動的是棧底(ebp)。利用棧底為坐標(biāo)向高位內(nèi)存移動8個(gè)字節(jié)取值。取到存在main中的input。放入eax寄存器中傳入re_choose用于計(jì)算。同樣的機(jī)制看后半段 從re_choose中 (mov eax,[ebp+var_4])取棧底向低地址偏移4個(gè)字節(jié)的內(nèi)容。存在eax中,main把eax值存入ebp-404(mov [ebp+var_404],eax)這個(gè)地址中用于后續(xù)的判斷。至此棧的基本結(jié)構(gòu)基本操作已經(jīng)介紹完畢。棧緩沖區(qū)溢出的根源和棧的自身結(jié)構(gòu)密切相關(guān)。正是由于棧中數(shù)據(jù)是先存入的在內(nèi)存高地址,后入的在內(nèi)存低地址。所以給了后入的機(jī)會,一旦超過棧原本分配的長度則會直接覆蓋原先存在內(nèi)存高地址中的數(shù)據(jù)或指令。從而帶來不可預(yù)知的結(jié)果。

至于函數(shù)的參數(shù)傳入的順序是從左到右還是從右到左(局部變量int a,b 是先壓a還是先壓b),函數(shù)返回時(shí)恢復(fù)棧平衡是讓母函數(shù)作還是子函數(shù)作。這部分和函數(shù)調(diào)用約定相關(guān),主要的調(diào)用約定分為,_cdecl、_fastcall和_stdcall。一般VS默認(rèn)采用 _stdcall和windows api保持一致。stdcall規(guī)則要求:參數(shù)從右向左壓。(int a,b 先壓b)。函數(shù)退出的時(shí)候自己清理?xiàng)V械膮?shù)。(圖中經(jīng)常會看到一個(gè)參數(shù)后面沒用直接被add esp 4了)

至此,通過上面緩沖區(qū)溢出漏洞的實(shí)例演示,你應(yīng)該已經(jīng)了解了棧溢出的漏洞原理。后續(xù),我們將基于此實(shí)例,向大家介紹利用棧溢出漏洞的攻擊方式,以及隨之帶來的數(shù)據(jù)庫安全風(fēng)險(xiǎn)。通過這樣的實(shí)例演示,讓大家對此類漏洞原理產(chǎn)生深刻理解,并梳理出防護(hù)思路。


?
45分钟做受片免费观看| 国产乱码精品一区二区三区中文 | 性生生活大片又黄又| 国产一性一交一伦一A片小说| 大香伊在人线免| good在线观看| 精品人妻无码一区二区三区手机版| 国产999精品久久久久久| 麻豆国产av超爽剧情系列| 久久久久久A片免费播放| 熟妇人妻av无码一区二区三区| 成人免费视频在线观看| 熟女少妇精品一区二区三区| SM调教贱屁股眼哭叫求饶H| 撑开毛都没长齐的小缝| 伊人狠狠色丁香婷婷综合尤物 | 初尝黑人巨砲波多野结衣| 亚洲欧洲精品一区二区三区波多野 | 精品丝袜av在线观看视频| 韩国公妇里乱片a片| 精品久久久久久无码人妻黑人 | 亚洲精品无码| 边做饭边被躁我和邻居的视频| 欧美《熟妇的荡欲》未删减版| 波多野结衣高清无碼中文字幕| 花房姑娘免费观看全集| 宫交拔不出来h| 波多野结衣在线视频| 成人看片黄APP免费看软件| 色哟哟免费精品网站入口| 免费a片在线观看| 欧美军警gay巨大粗长| 无码精品a∨在线观看十八禁| 色婷婷av国产精品欧美毛片| 久久精品人妻一区二区蜜桃| 一边吃奶一边做边爱| 亚洲精品无码国产| 御书屋御宅屋高辣h| 色婷婷亚洲婷婷七月中文字幕| 中国白嫩丰满人妻videos| 在免费jizzjizz在线播放|