Executable
這個命令實際上會導致什麼?
有一次和我的朋友聊天時,我試圖開玩笑說,如果我們只是執行大量隨機程序並期望其中一個程序能夠解決我們的問題,我們可能會有更好的機會完成我們的項目。為了證明這一點,我寫了這個“概念證明”:
while true; do dd if=/dev/urandom of=pliczek count=1 chmod +x pliczek ./pliczek done
令我驚恐的是,當我執行這個循環並呼叫
ls
時,我注意到目前目錄中有很多文件名看起來很隨機的文件(在 64 位 x86 上的 Fedora Linux 上測試)。現在我忍不住想知道——實際上會發生什麼?
您正在將 512 個字節寫入文件並執行它。所以結果可能是一個 512 字節的程序可以做的任何事情。那是什麼取決於你的機器。但是 512 字節是很多指令,所以基本上所有事情都可能發生,比如更改 root 密碼、創建隨機文件或生成包含項目原始碼的 tar 存檔。
不需要 ELF 標頭。簡單的 ASCII 文本就足夠了,並且會被目前執行的 shell 解釋(因為缺少 shebang 行)。
大於號 (
>
) 將輸出重定向到文件。因此這個特定的字節已經足夠創建文件了。例子:# this will create a file named abc123 in almost every shell :>abc123 # another variant >abc123^D
這表明有幾種方法可以使用少量字節創建文件,這使得它更有可能發生。