首页
社区
课程
招聘
linux hook
发表于: 2014-1-29 22:02 6581

linux hook

2014-1-29 22:02
6581
最近在做linux下so文件的hook,总体思路比较清晰,用一段shellcode注入被攻击进程,这段shellcode代码就会驱动so文件的注入,主要是利用dlopen函数来动态加载so文件,从而完成so文件的注入,现在关键是如果找不到dlopen怎么办呢,根据我的实践,我的linux系统版本是ubuntu10.04,内核版本是2.6.32,在我的动态连接器中并不存在dlopen这个函数,而dlopen这个函数存在于libdl.so的共享库中,可是假如一个被攻击的程序运行时并没有加载libdl.so这个共享库,那么我就无法找到dlopen函数了,想请问大家有什么另外的办法???
   我的被攻击程序是简单的HelloWorld程序,运行时内存中只存在三个ELF文件的映射:一个是HelloWorld的可执行文件的内存映射,一个是动态链接器ld.so的内存映射,另一个是libc.so的映射,libc.so文件在静态的的时候存在对dlopen的引用,不过加载到内存中的时候,在符号表里面并不存在dlopen这个符号,所以,现在没想到啥好办法能够解决,希望大家能够给点提示,谢谢

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 208
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
输出一下dlopen的地址就会知道实际上是在那个模块里面了,但估计那个模块里面也没有这个符号,:)。
libdl.so这玩意比较特殊,一般只是编译时的一个stub,你不能用libdl.so来装载自己,但前面有fork,其实这些东西都已经在内存中了。
2014-1-30 15:29
0
雪    币: 47
活跃值: (43)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
能说的再清楚点吗,你说的fork是再开一个子进程吗,不太懂,求详细解释
2014-1-31 09:17
0
雪    币: 208
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
你用libdl.so的dlopen来加载share库,但你能用libdl.so的dlopen来加载它自身吗?结果肯定是不行的,那libdl.so是谁加载的,如果有代码能加载libdl.so,那些代码肯定也能加载其他的share库,干嘛还要libdl.so,还不如直接在libdl.so的got中把对应的abi直接指向那些已经存在的代码。
2014-1-31 11:46
0
雪    币: 47
活跃值: (43)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
先谢谢你的给的提示啊,我后来也查过了一些资料,做了下小的实验,可是仍然发现不了libdl到底是怎么加载的,只能勉强猜测出来时由动态链接器ld加载进去的,可是没有依据,也没有资料,你有什么好的资料可以介绍给我看看吗,求大神再给点提示
2014-2-10 17:17
0
雪    币: 208
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
先输出一下dlopen的地址,看看在那个so里面。
2014-2-10 21:34
0
雪    币: 47
活跃值: (43)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
这个已经完成啦,dlopen在libdl.so里面啊
2014-2-10 22:11
0
雪    币: 47
活跃值: (43)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
大神,求指点啊,不知道如何下手啊,libdl.so这个文件时由动态连接器加载的吗,怎么做到的呢?
2014-2-11 19:52
0
雪    币: 208
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
确定dlopen在libdl.so里面,那就直接做个inline hook,不用考虑got表hook了
2014-2-12 13:21
0
游客
登录 | 注册 方可回帖
返回
//