Kaie"s Blog 2.0 beta!
Back to "Top"

My Secret Notebook
 Show "Table of Contents"
Contact Me
Subscribe to my Posts feed
Subscribe to my Comments feed
My Flickr
Back to "Top"
My Secret Notebook
 Show "Table of Contents"
Contact Me
Subscribe to my Posts feed
Subscribe to my Comments feed
My Flickr

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的修改,以達你的需求。

.簡易的測試方式如下 .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