棧溢位 控制程式的執行流程

2021-10-09 11:16:13 字數 1150 閱讀 3072

#include

#include

#include

#define password

"1234567"

int verify_password

(char *password)

void

main()

fscanf

(fp,

"%s"

,password)

; valid_flag =

verify_password

(password);if

(valid_flag)

else

fclose

(fp)

;}

簡單利用棧溢位漏洞使程式能跳過驗證

環境:windows xp

編譯器:vc++

偵錯程式:od

1.首先把程式拖到od中,通過查詢字串找到關鍵對比的函式cpp1.00401005,還得知了輸出正確函式的位址。

2.發現棧中明顯存在著乙個溢位點,使用strcpy時未限制長度,因此我們的目標就是覆蓋掉位於12fb20的函式返回位址,使函式直接跳到正確的選項。這段**的驗證方式是通過讀取檔案中的字串來進行,所以我們可以直接加長檔案中字串的長度來使其覆蓋掉該函式的返回位址。

3.修改檔案中字串的長度使其能夠把返回位址直接替換成為輸出正確的函式的位址

4.可以看到右下角的棧中12fb24的位置已經替換成輸出正確的函式的位址了

5.然後程式就能成功輸出正確結果,但是直接修改沒有考慮棧平衡這些東西,因此輸出了就直接崩潰了。

ch2 棧溢位,控制程式執行流程

實驗環境 作業系統 windows7 idevc 6.0 build版本 debug 用於實驗的c語言 我們可以通過將棧幀中的返回位址,覆蓋為0x00401122。這樣直接跳轉到驗證通過,然後printf。利用ollydbg單步除錯,看到執行完strcpy後 棧幀中變數分布為 password.tx...

利用檔案鎖控制程式的執行

我們在寫程式的時候,需要同步控制的時候往往利用執行緒鎖對程式進行加鎖控制,哈哈,昨天看 unix網路程式設計 裡面提到對程式可以利用檔案鎖進行程式控制,覺得挺有意思,就拿過來試試。利用檔案給程式加鎖 include include include include include include in...

C 學習 之 控制程式流程 (筆記)

在一些時候語句需要進行有條件的執行。比如如果輸入 y 就執行賦值語句n 1 否則n 0 includeusing namespace std intmain if條件下一條語句時 可省略,此處給出 else cout if.else是可以巢狀使用的,下面例出乙個模板 if expression1 e...