Friday, December 02, 2011
[GDB Tricks] File Descriptor Hijacking / 劫持 FDs 之奇技淫巧
對於Linux有點概念的人,大概都知道 "In Unix-like systems, FDs can refer to many things." 這句話的涵意,因此不再多說。所以若能劫持FDs的話,其實可以幹很多壞事,是的,某長輩說過「幹壞事是進步最大的原動力」,但偶爾拿來作些有意義的事也是會讓人有動力的。
試著想想,在Unix中不改變/破壞程式執行狀態的debug方式,常見的一些好用的工具,像是strace, ltrace, ptrace, gdb, syslog...。若此時,當你擁有FDs hijacking的能力的話,那就表示你有機會可以達成FDs swap的效果。言下之意,「若綁架跑在背景Daemon的stdout, stderr的話,意謂著可以在不重啟Daemon為前景的情況下,將它的stdout, stderr重導至某個"/dev/pts/x"的stdout,即可看到該Daemon所吐出之debug訊息」,套句老賈(Steve Jobs)的名言"Isn’t that AWESOME!"。至於這樣的奇技淫巧,該如何辦到呢? 當你知道其箇中道理之後,搭配神器GNU GDB,就可以針對該支Daemon做一些run time的修改,以達你的需求。
.簡易的測試方式如下
.呈現出來的結果,就像下圖所視,原先在右邊(Terminal 2)所印到stdout的訊息,被左邊(Terminal 1)所hijack走了!因此,Terminal 2的stdout全被redirect至Terminal 1了,Happy hacking!
試著想想,在Unix中不改變/破壞程式執行狀態的debug方式,常見的一些好用的工具,像是strace, ltrace, ptrace, gdb, syslog...。若此時,當你擁有FDs hijacking的能力的話,那就表示你有機會可以達成FDs swap的效果。言下之意,「若綁架跑在背景Daemon的stdout, stderr的話,意謂著可以在不重啟Daemon為前景的情況下,將它的stdout, stderr重導至某個"/dev/pts/x"的stdout,即可看到該Daemon所吐出之debug訊息」,套句老賈(Steve Jobs)的名言"Isn’t that AWESOME!"。至於這樣的奇技淫巧,該如何辦到呢? 當你知道其箇中道理之後,搭配神器GNU GDB,就可以針對該支Daemon做一些run time的修改,以達你的需求。
.簡易的測試方式如下
.On terminal 1:
kent@imac:~ $ echo -e '#!/bin/sh\n while true; do ((n++)); echo $n; sleep 1; done\n' > echo.sh
kent@imac:~ $ chmod +x echo.sh && ./echo.sh
.On terminal 2:
kent@imac:~ $ fdhijack.sh "pid of echo.sh" `tty`
.呈現出來的結果,就像下圖所視,原先在右邊(Terminal 2)所印到stdout的訊息,被左邊(Terminal 1)所hijack走了!因此,Terminal 2的stdout全被redirect至Terminal 1了,Happy hacking!
.:: Phrack Magazine ::. Title : File Descriptor Hijacking
http://www.phrack.org/issues.html?issue=51&id=5#article
.Passing File Descriptors:
http://book.chinaunix.net/special/ebook/addisonWesley/APUE2/0201433079/ch17lev1sec4.html
0 Comments:
Plz Post a Comment / 拜託你留個言啦...^^"