小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

淺談關(guān)于unix系統(tǒng)下的病毒特點 -

 accesine 2005-08-10
欺騙庫函數(shù)

我們可以愚弄那些比較傻的用戶。如果你利用LD_PRELOAD環(huán)境變量來捉弄他,你可以讓他執(zhí)行你自己的代碼,你已經(jīng)利用LD_PRELOAD環(huán)境變量把標準的庫函數(shù)替換成了你自己的程序,挺有意思吧?LD_PRELOAD并不是linux系統(tǒng)特有的,并且它一般用在一些應(yīng)用程序(比如老版本的StarOffice需要運行在較新版本的Redhat系統(tǒng)上)必須用他們自己的(或者比較老的版本,或者修改過的)庫函數(shù),因為在安裝的時候沒有滿足他們的需求。Quantum(Staog病毒的作者)在Unix病毒的郵件列表里面提供了這些代碼,我做了修改,也是為了便于大家理解:

------------------------tryld.c------------------------------
extern int __open(char *, int, int); 
extern int execv(char *, char *[], char *envp[]); 

int open(char *path, int flags, 
int mode){ 
printf("open: %s\n", path); 
return __open(path, flags, mode); 
} 

/* 注意這里,原來它放棄了envp參數(shù),這樣會...:(?! 
呵呵,所以我修改了一下,影響不大:)*/ 
int execve(char *path, char *args[], 
char *envp[]){ 
printf("execve: %s\n", path); 
return execv(path, args, envp); 
} 
--------------------------------------------------------------


------------------------main.c--------------------------------
/*test only,by e4gle*/ 
#include 
#include 
#include 
#include 

main() 
{ 
int fd; 
execve("/bin/date","",NULL); 
if(fd=open("/etc/inittab",O_RDONLY)!=-1) 
{ 
fprintf(stdout,"open file succeed!\n"); 
} 
else 
fprintf(stderr,"open error!\n"); 
close(fd); 
return 0; 
} 
----------------------------------------------------------------


這段代碼獲取open和execv并且改變了它們的輸出,好,我們測試一下:

[e4gle@redhat62 elf]$ gcc -o main main.c 
[e4gle@redhat62 elf]$ ./main 
open file succeed! <--證明我們打開文件成功了,open調(diào)用正常工作 
[e4gle@redhat62 elf]$ ldd -v -r ./main 
libc.so.6 => /lib/libc.so.6 (0x4001c000) 
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) 

Version information: 
./main: 
libc.so.6 (GLIBC_2.0) => /lib/libc.so.6 
/lib/libc.so.6: 
ld-linux.so.2 (GLIBC_2.1.1) => /lib/ld-linux.so.2 
ld-linux.so.2 (GLIBC_2.1) => /lib/ld-linux.so.2 
ld-linux.so.2 (GLIBC_2.0) => /lib/ld-linux.so.2 
/*跟蹤一下庫函數(shù)的利用,都是glibc的標準庫函數(shù),solaris里面是sotruss,我個人認為sotruss 
比較好用:)*/ 
[e4gle@redhat62 elf]$ gcc -shared -o tryld tryld.c 
[e4gle@redhat62 elf]$ export LD_PRELOAD=./tryld <--用我們自己的lib 
[e4gle@redhat62 elf]$ ./main 
execve: /bin/date 
open: /etc/inittab 
open file succeed! 
/*注意!不一樣了吧?已經(jīng)在用我們自己的open和execve了,呵呵:)*/


以上僅僅是個測試代碼并且沒有任何危害性,但是它足以說明我們利用欺騙函數(shù)庫來攻擊程序的原理。


欺騙庫函數(shù)

我們可以愚弄那些比較傻的用戶。如果你利用LD_PRELOAD環(huán)境變量來捉弄他,你可以讓他執(zhí)行你自己的代碼,你已經(jīng)利用LD_PRELOAD環(huán)境變量把標準的庫函數(shù)替換成了你自己的程序,挺有意思吧?LD_PRELOAD并不是linux系統(tǒng)特有的,并且它一般用在一些應(yīng)用程序(比如老版本的StarOffice需要運行在較新版本的Redhat系統(tǒng)上)必須用他們自己的(或者比較老的版本,或者修改過的)庫函數(shù),因為在安裝的時候沒有滿足他們的需求。Quantum(Staog病毒的作者)在Unix病毒的郵件列表里面提供了這些代碼,我做了修改,也是為了便于大家理解:

------------------------tryld.c------------------------------
extern int __open(char *, int, int); 
extern int execv(char *, char *[], char *envp[]); 

int open(char *path, int flags, 
int mode){ 
printf("open: %s\n", path); 
return __open(path, flags, mode); 
} 

/* 注意這里,原來它放棄了envp參數(shù),這樣會...:(?! 
呵呵,所以我修改了一下,影響不大:)*/ 
int execve(char *path, char *args[], 
char *envp[]){ 
printf("execve: %s\n", path); 
return execv(path, args, envp); 
} 
--------------------------------------------------------------


------------------------main.c--------------------------------
/*test only,by e4gle*/ 
#include 
#include 
#include 
#include 

main() 
{ 
int fd; 
execve("/bin/date","",NULL); 
if(fd=open("/etc/inittab",O_RDONLY)!=-1) 
{ 
fprintf(stdout,"open file succeed!\n"); 
} 
else 
fprintf(stderr,"open error!\n"); 
close(fd); 
return 0; 
} 
----------------------------------------------------------------


這段代碼獲取open和execv并且改變了它們的輸出,好,我們測試一下:

[e4gle@redhat62 elf]$ gcc -o main main.c 
[e4gle@redhat62 elf]$ ./main 
open file succeed! <--證明我們打開文件成功了,open調(diào)用正常工作 
[e4gle@redhat62 elf]$ ldd -v -r ./main 
libc.so.6 => /lib/libc.so.6 (0x4001c000) 
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) 

Version information: 
./main: 
libc.so.6 (GLIBC_2.0) => /lib/libc.so.6 
/lib/libc.so.6: 
ld-linux.so.2 (GLIBC_2.1.1) => /lib/ld-linux.so.2 
ld-linux.so.2 (GLIBC_2.1) => /lib/ld-linux.so.2 
ld-linux.so.2 (GLIBC_2.0) => /lib/ld-linux.so.2 
/*跟蹤一下庫函數(shù)的利用,都是glibc的標準庫函數(shù),solaris里面是sotruss,我個人認為sotruss 
比較好用:)*/ 
[e4gle@redhat62 elf]$ gcc -shared -o tryld tryld.c 
[e4gle@redhat62 elf]$ export LD_PRELOAD=./tryld <--用我們自己的lib 
[e4gle@redhat62 elf]$ ./main 
execve: /bin/date 
open: /etc/inittab 
open file succeed! 
/*注意!不一樣了吧?已經(jīng)在用我們自己的open和execve了,呵呵:)*/


以上僅僅是個測試代碼并且沒有任何危害性,但是它足以說明我們利用欺騙函數(shù)庫來攻擊程序的原理。


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多