免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 5180 | 回复: 26
打印 上一主题 下一主题

redhat enterPrise linux 5的系统调用劫持 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-24 10:41 |只看该作者 |倒序浏览
我用linux2.6 系统调用劫持的代码,去劫持redhat enterPrise linux 5。


system_call=(offset_high<<16)|offset_low;   

shell=(char *)system_call;   
sort="\xff\x14\x85";   
  
for(i=0;i<(100-2);i++)   
     if(shell==sort[0]&&shell[i+1]==sort[1]&&shell[i+2]==sort[2])   
             break;  

代码运行到for循环的时候,系统就崩了,但是同样的代码在redhat enterPrise linux 4上运行就是好的。
是不是redhat enterPrise linux 5对系统调用表有什么特殊的保护啊?
有谁做过redhat enterPrise linux 5的系统调用劫持吗?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
2 [报告]
发表于 2009-09-24 10:47 |只看该作者
2.6上对系统调用做了保护,不会随意就让你替换的

论坛徽章:
0
3 [报告]
发表于 2009-09-24 10:52 |只看该作者
原帖由 Godbach 于 2009-9-24 10:47 发表
2.6上对系统调用做了保护,不会随意就让你替换的


redhat EnterPrise linux 4也是linux2.6 ,arch linux也有linux2.6的版本。都是可以的。
我的archlinux的内核版本还比redhat EnterPrise linux 5版本要高,都是可以的。

应该不是linux本身的问题

论坛徽章:
0
4 [报告]
发表于 2009-09-24 10:54 |只看该作者
不是内核本身问题。在as4和as5还是suse10上面都做过。记得在寻找调用表上,这三个系统都是一样的。

论坛徽章:
0
5 [报告]
发表于 2009-09-24 10:57 |只看该作者
原帖由 caravsapm70 于 2009-9-24 10:54 发表
不是内核本身问题。在as4和as5还是suse10上面都做过。记得在寻找调用表上,这三个系统都是一样的。


是啊,感觉也应该是一样的才对啊~~~

论坛徽章:
0
6 [报告]
发表于 2009-09-24 11:00 |只看该作者
下面是系统调用劫持的代码,通用的那种:
  1. #include <linux/kernel.h>   
  2. #include <linux/module.h>   
  3. #include <linux/init.h>   
  4. #include <linux/sched.h>   
  5. #include <asm/unistd.h>   
  6.   
  7. MODULE_LICENSE("GPL");   
  8. MODULE_AUTHOR("xunil@bmy");   
  9. MODULE_DESCRIPTION("Different from others, this module automatically locate the entry of  sys_call_table !");   
  10.   
  11. unsigned long *sys_call_table=NULL;   
  12. asmlinkage int (*orig_mkdir)(const char *,int);   
  13.   
  14. struct _idt   
  15. {   
  16. unsigned short offset_low,segment_sel;   
  17. unsigned char reserved,flags;   
  18. unsigned short offset_high;   
  19. };   
  20.   
  21. unsigned long *getscTable(){   
  22.         unsigned char idtr[6],*shell,*sort;   
  23.         struct _idt *idt;   
  24.         unsigned long system_call,sct;   
  25.         unsigned short offset_low,offset_high;   
  26.         char *p;   
  27.         int i;   
  28.   
  29.   
  30.         /* get the interrupt descriptor table */  
  31.   
  32.   
  33.         __asm__("sidt %0" : "=m" (idtr));   
  34.   
  35.   
  36.         /* get the address of system_call */  
  37.         idt=(struct _idt*)(*(unsigned long*)&idtr[2]+8*0x80);   
  38.         offset_low = idt->offset_low;   
  39.         offset_high = idt->offset_high;   
  40.         system_call=(offset_high<<16)|offset_low;   
  41.   
  42.   
  43.         shell=(char *)system_call;   
  44.         sort="\xff\x14\x85";   
  45.   
  46.   
  47.         /* get the address of sys_call_table */  
  48.   
  49.         for(i=0;i<(100-2);i++)   
  50.                 if(shell==sort[0]&&shell[i+1]==sort[1]&&shell[i+2]==sort[2])   
  51.                         break;   
  52.   
  53.         p=&shell;   
  54.         p+=3;   
  55.         sct=*(unsigned long*)p;   
  56.   
  57.         return (unsigned long*)(sct);   
  58. }   
  59.   
  60. asmlinkage int hacked_mkdir(const char * pathname, int mode){   
  61.         printk("PID %d called sys_mkdir !\n",current->pid);   
  62.         return orig_mkdir(pathname,mode);   
  63. }   
  64.   
  65. static int __init find_init(void){   
  66.         sys_call_table = getscTable();   
  67.         orig_mkdir=(int(*)(const char*,int))sys_call_table[__NR_mkdir];   
  68.         sys_call_table[__NR_mkdir]=(unsigned long)hacked_mkdir;   
  69.         return 0;   
  70. }   
  71.   
  72. static void __exit find_cleanup(void){   
  73.         sys_call_table[__NR_mkdir]=(unsigned long)orig_mkdir;   
  74. }   
  75.   
  76. module_init(find_init);   
  77. module_exit(find_cleanup);
复制代码
帮忙看下有什么问题没有??

论坛徽章:
0
7 [报告]
发表于 2009-09-24 11:01 |只看该作者
还是说as5里边打了什么补丁了,禁止调用劫持了?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
8 [报告]
发表于 2009-09-24 11:03 |只看该作者
你劫持的那个调用,内核版本是多少,2.6.18吗

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
9 [报告]
发表于 2009-09-24 11:05 |只看该作者
哦,是mkdir啊,我试一把

论坛徽章:
0
10 [报告]
发表于 2009-09-24 11:05 |只看该作者
原帖由 Godbach 于 2009-9-24 11:03 发表
你劫持的那个调用,内核版本是多少,2.6.18吗


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP