2013-04-05 136 views
2

我想在彙編中編寫shellcode。我需要執行一個/usr/bin/killall命令和一個/usr/bin/wget命令。我的兩個命令都可以通過shellcode與系統調用execve()完美配合。但是現在我想合併這兩個,但這是不可能的,因爲當第一個execve()調用被執行時程序退出。 (來自execve()的手冊頁:execve()未成功返回)。Shellcode:執行2 execve()調用

如何執行2 execve()調用?還是有另一種方法可以從相同的shell代碼中調用/usr/bin/killall/usr/bin/wget

歡迎和感謝提前!

+0

爲什麼你要「在彙編中編寫shell代碼」?通常你會用C編寫並編譯它。連續運行兩個命令是shell的設計目的,並且在彙編時將會提供很小的收益...... – Jens 2013-04-06 15:10:33

+0

使用fork,然後if和兩個execves。 – AbiusX 2013-11-26 19:08:02

回答

5

當您使用exec系列函數時,您調用它的程序會被替換到當前進程中。因此,當第一次執行execve調用時,您的整個過程映像將消失,因此第二次調用將不會進行。爲了解決這個問題,你必須在調用execve之前分叉另一個進程。

1

首先,不可能一個接一個執行兩個execve()。簡單地說,根據定義,execve()調用將覆蓋原始進程的內存,並且您將永遠無法再次切換回原始進程。

你提出(合併/usr/bin/killall/usr/bin/wget到的shellcode)第二種選擇是完全可能的,如果killall命令不殺執行的shellcode本身的過程。如果是這樣的話,我真的需要更多關於爲什麼需要這種行爲的信息,因爲這對我來說似乎有點荒謬(但我當然會錯過運行shellcode的上下文)。