偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

無代碼執(zhí)行溢出攻擊

安全 黑客攻防
對(duì)于溢出攻擊來說,有時(shí)除了運(yùn)行溢出代碼以外,我還發(fā)現(xiàn)了其它一些利用溢出方式,而且并不是所有的溢出都會(huì)彈出異常。某些溢出不允許攻擊者獲得控制權(quán),但是肯能允許他們讀取或操縱額外數(shù)據(jù)。

對(duì)于溢出攻擊來說,有時(shí)除了運(yùn)行溢出代碼以外,我還發(fā)現(xiàn)了其它一些利用溢出方式,而且并不是所有的溢出都會(huì)彈出異常。某些溢出不允許攻擊者獲得控制權(quán),但是肯能允許他們讀取或操縱額外數(shù)據(jù)。例如,Logon.exe,這是一個(gè)允許管理員登錄某個(gè)服務(wù)的工具。由于登錄的密碼每次都是隨機(jī)產(chǎn)生的,很難猜測(cè)得到。如果不知道密碼,要想登錄服務(wù)就需要查看內(nèi)存(我假設(shè)這是沒有限制的)或使用某些狡猾的計(jì)策。讓我們看看Logon.exe是如何工作的。

C:\Documents and Settings\Czy>Logon.exe

USAGE: Logon.exe <username> <password>

試試輸入偽造的參數(shù):

C:\Documents and Settings\Czy>Logon.exe spy W7g6351a

Access Denied.

再試試輸入長(zhǎng)字符串:

有點(diǎn)奇怪,當(dāng)全部為字母a時(shí),服務(wù)允許你登錄。再檢查一下,看看這種情況是否還會(huì)發(fā)生:

使用同一個(gè)用戶名、不同的密碼,登錄仍然有效!只要你指定了一個(gè)長(zhǎng)密碼,無論這個(gè)密碼是否正確,程序都允許你登錄,這樣看來,你必須不把這種行為作為一個(gè)漏洞進(jìn)行匯報(bào)。讓我們看看為什么會(huì)發(fā)生這樣的事。

Logon.exe中的類是如下定義的:

www.2cto.com

#define CREDENTIAL_LENGTH 64

class Login {

public:

Login();

void ClearCreds();

bool IsLoggedIn();

bool TryCreds(char *Username, char *Password);

virtual ~Login();

private:

char UserName[CREDENTIAL_LENGTH];

char PassPhrase[CREDENTIAL_LENGTH];

char CorrectPassPhrase[CREDENTIAL_LENGTH];

char Buffer[521];

};

這個(gè)類的定義中有幾個(gè)非常有趣的地方:PassPhrase和CorrectPassPhrase是順序存儲(chǔ)在內(nèi)存中的。查看一下用于檢查密碼是否正確的代碼:

bool Password::IsLoggedIn()

{

return(0==memcmp(passPhrase,CorrectPassPhrase,CREDENTIAL_LENGTH));

}

看起來一切正常。再來看看調(diào)用者。

bool Login::TryCreds(char *User, char *Password)

{

FillMemory(UserName,CREDENTIAL_LENGTH,0x00);

strcpy(UserName,User);

FillMemory(PassPhrase,CREDENTIAL_LENGTH,0x00);

strcpy(PassPhrase,Password);

retrun IsLoggedIn();

}

注意到了嗎?strcpy(PassPhrase,Password);這行代碼看起來很可疑。如果PassPhrase[]緩沖區(qū)溢出會(huì)怎樣呢?由于CorrectPassPhra[]緩沖區(qū)在內(nèi)存中的位置剛好在PassPhrase[]緩沖區(qū)的后面,很顯然,溢出的數(shù)據(jù)會(huì)覆蓋CorrectPassPhra[]緩沖區(qū)。如果Password的字節(jié)長(zhǎng)度為2*CREDENTIAL_LENGTH,而且該密碼的前半部分和后半部分完全一樣,那么不管CorrectPassPhrase的真實(shí)數(shù)值是多少,函數(shù)IsLoggedIn返回的值都是true。

修補(bǔ)這個(gè)漏洞非常容易:只要檢查一下輸入的長(zhǎng)度,如果過長(zhǎng),返回false就可以了。

bool Login::TryCreds(char *User, char *Password)

{

if ((strlen(User) < CREDENTIAL_LENGTH) &&

(STRLEN(pASSWORD) < CREDENTIAL_LENGTH)

{

FillMemory(UserName,CREDENTIAL_LENGTH,0x00);

strcpy(UserName,User);

FillMemory(PassPhrase,CREDENTIAL_LENGTH,0x00);

strcpy(PassPhrase,Password);

retrun IsLoggedIn();

}

else

{

retrun false;

}

}

尾聲:

測(cè)試一下修訂后的版本,你可以發(fā)現(xiàn)這個(gè)演示中的漏洞已經(jīng)得到了修補(bǔ)。如果你經(jīng)過仔細(xì)研究,其實(shí)它并不難。

責(zé)任編輯:藍(lán)雨淚 來源: 紅黑聯(lián)盟
相關(guān)推薦

2009-09-24 18:29:12

2013-06-28 13:35:37

2022-02-22 09:33:38

LIFO數(shù)據(jù)結(jié)構(gòu)

2014-07-30 11:21:46

2009-09-24 18:16:40

2018-12-19 08:52:55

無文件攻擊信息安全惡意代碼

2019-03-26 09:11:32

無文件惡意軟件

2019-04-10 10:03:52

2022-03-10 12:17:02

植入LaserShark無接觸

2024-12-19 15:13:26

2025-03-07 12:18:07

2025-03-06 16:38:19

2011-02-28 09:34:55

2021-09-22 10:05:58

OpenOffice漏洞代碼

2025-02-14 23:13:14

2011-11-15 16:00:42

2018-01-20 22:01:11

2010-10-09 14:45:48

2022-05-07 08:27:42

緩沖區(qū)溢出堆棧

2020-05-21 09:14:36

無代碼代碼開發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)