簡體   English   中英

execve 緩沖區溢出成功完成后的 CPU 執行流程? ..int 0x80 成功完成后?

[英]CPU execution flow after execve buffer overflow completes successfully? ..after int 0x80 completes successfully?

我正在學習 Linux 下的緩沖區溢出 shellcode 方法。 https://seedsecuritylabs.org/Labs_16.04/Software/Buffer_Overflow/

我使用的 shellcode 以 movb $0x0b、%a1 和 int $0x80 結尾。 shellcode 執行,我得到我的命令提示符。 我讀過很多地方說 execve 和 int 0x80 “不返回”。 好吧.. 好的,但是當 execve 進程成功並退出時~程序執行流程去哪里了(也就是我在命令行提示符下輸入“exit”)?

我認為調用程序的堆棧幀已替換為新的 execve 代碼信息。 新的 execve 代碼是否保留了被覆蓋進程的返回地址並返回到該地址,就好像它是它自己的一樣? (所以它確實返回 .. 到借用的地址?)就 int $0x80 而言,在 int 0x80 指令之后的下一個字節是否繼續執行? 如果不是,下一個字節是什么?

在緩沖區溢出問題和 int 0x80 的上下文中,比如說(例如)517 字節的黑客覆蓋了 24 字節的緩沖區。 字節將替換緩沖區之外的堆棧內存地址處的值,包括指向堆棧中更高位置的自己的可執行代碼的返回地址。 但是故意的代碼會踩踏內存中更高的 100 個其他堆棧字節,從而破壞無關的外部作用域進程的堆棧幀。 有了這些被破壞的堆棧幀,當...

1)當shell從int 0x80返回並執行更多不屬於hack的堆棧數據時。 現在有什么未指定的字節可能是無效的 CPU 操作碼。

2) 外部堆棧幀的上下文已被破壞,那么在我的 shell 命令提示符下輸入“exit”后,系統如何優雅地繼續運行?

任何幫助表示贊賞!

我想如果我們討論execve是什么以及它是如何工作的,你就會明白發生了什么。

我讀過很多地方說 execve 和 int 0x80 “不返回”。 好吧.. 好的,但是當 execve 進程成功並退出時~程序執行流程去哪里了(也就是我在命令行提示符下輸入“exit”)?

以下來自execve的聯機幫助頁。

execve() executes the program pointed to by filename.  filename must be
       either a binary executable, or a script starting with  a  line  of  the
       form:

           #! interpreter [optional-arg]

execve是執行指定程序的系統調用。

繼續,

execve() does not return on success, and the text, data, bss, and stack
       of the calling process are overwritten by that of the program loaded.

本聲明涉及您的問題。

每個進程都有自己的內存布局。 內存布局由文本段、數據段、堆棧、堆、依賴庫等組成,可以參考任意進程的/proc/PID/maps ,可以清楚地了解內存布局。

execve執行並成功時,整個內存布局將被擦除(調用者進程的內容將永遠丟失)並將新進程的內容加載到內存中。 新文本段、新數據段、新堆棧、新堆,一切都是新的。

因此,當您嘗試在命令行上exit時,您只需終止使用 execve 運行的/bin/sh 沒有段錯誤,沒有錯誤。

新的 execve 代碼是否保留了被覆蓋進程的返回地址並返回到該地址,就好像它是它自己的一樣? (所以它確實有點返回 .. 到借來的地址?)

不,這不會發生。 execve 啟動的新進程對舊進程一無所知。

就 int $0x80 而言,在 int 0x80 指令之后的下一個字節不會繼續執行嗎? 如果不是,下一個字節是什么?

int 0x80指令用於請求操作系統執行指定的系統調用。 因此,一旦int 0x80返回,是否繼續執行完全取決於系統調用是什么

一般來說,讀、寫、打開、創建等,都執行並返回。 但是,函數的exec類(轉到man exec )是不同的。 這些函數中的每一個都不會在成功時返回。 他們只會在失敗時返回。

問題的最后一部分,因為內存布局已經被擦除並加載了新內容,所以這里沒有緩沖區溢出的跡象,沒有內存損壞。

我希望這回答了你的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM