首页
社区
课程
招聘
[讨论]Android内核模式下对当前进程的cred结构的获取方式
发表于: 2014-1-11 11:51 13295

[讨论]Android内核模式下对当前进程的cred结构的获取方式

2014-1-11 11:51
13295

大家好,最近一直在研究android下的溢出获取root权限,目前研究的成果是: 已经对一个设备进行溢出,让pc指针跳入了预定好的函数中;在获取要获取权限的时候遇到了如下难题。

1、在4.3+ 开启SELinux 的情况下,根本就没法从/proc/kallsyms获取函数地址。(有人可能说可以暴力搜索,参照android_run_root_shell 的方式)

  对于上述的问题,我想到了一个小技巧来解决,那就是直接暴力搜索进程的cred结构;直接对结构中的设置在内核模式中做修改;以达到提权的目的,但又遇到了问题。
  那就是 从什么地址开始搜索 ,搜到哪才算正确,到哪里结束;

  之前一直都是玩windows下逆向,一下子转到android下 有很多不懂的地方;习惯了用之前解决windows下问题的习惯来弄android,可能会走弯路,还请众大神多多指教~

贴上cred结构的解释和原型


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 5
支持
分享
最新回复 (12)
雪    币: 138
活跃值: (470)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
真丢人, 之前搞那么久windows从来都没发帖提问过,有问题直接看雪搜 谷歌搜就解决了;足以可见关于linux 关于android下的这方面的文章有多缺乏;

其实最大的一个原因是,这货我现在没法像windows那样从R3-R0一路调试过去。。。
2014-1-11 11:57
0
雪    币: 506
活跃值: (318)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
虽然看不懂,但是感觉很牛憋的样子
2014-1-11 12:01
0
雪    币: 138
活跃值: (470)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
找到一份linux下的exploit 暴力查找cred的代码,但是不明所以然。
上传的附件:
  • 1.jpg (47.97kb,34次下载)
2014-1-11 14:29
0
雪    币: 138
活跃值: (470)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
[QUOTE=Nermor;1254684]找到一份linux下的exploit 暴力查找cred的代码,但是不明所以然。
[/QUOTE]

什么情况下栈中正好就存放了自己的cred结构,如果牵扯到应用层到内核中的数据传递,能否用magic值类定位当前进程的cred;
2014-1-11 18:07
0
雪    币: 28
活跃值: (51)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
这个暴力搜索大概是这样的:
内核栈顶固定的thread_info结构,thread_info的第一个成员就是task_struct,指向current,arm可能不一样好像要减去8,看asm/thread_info.h。后面就简单了,实在是不知道那几个struct cred*的偏移,如果觉得成员是个指针就开始猜呗。
2014-1-12 18:52
0
雪    币: 269
活跃值: (25)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
7
magic就是task_struct里面的 char comm[TASK_COMM_LEN];

从/proc/pid/comm里面拿
2014-1-13 10:30
0
雪    币: 53
活跃值: (280)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
这些数据结构在内核数据段中,用户态的进程不map出来没法修改啊
2014-1-13 22:13
0
雪    币: 138
活跃值: (470)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
在 tewilove 大神的指引下, 用暴力搜索找到了cred;

顺便说明一句:最好是找到需要搜索的手机的包的源码,因为有些厂商会自己修改一些设置 结构项会有差异;我就在这里走了弯路的
2014-1-14 22:33
0
雪    币: 138
活跃值: (470)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
[QUOTE=ReturnsMe;1255026]magic就是task_struct里面的 char comm[TASK_COMM_LEN];

从/proc/pid/comm里面拿[/QUOTE]

  已经在kernel了,就不用再去访问上层的东西,直接爆搜;

comm 在我现在碰到的这款机型(N9006)里头不代表  magic。
2014-1-14 22:35
0
雪    币: 138
活跃值: (470)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
注意:帖子图中,还有贴出来的代码片段,跟您现在手上的源码可能会有差别; 请注意区分,以免造成不必要的困扰!
2014-1-14 22:38
0
雪    币: 269
活跃值: (25)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
12
comm是用来避免避免tewilove说的 “实在是不知道那几个struct cred*的偏移,如果觉得成员是个指针就开始猜呗” 的情况的。跟机型没关系
2014-1-16 02:01
0
雪    币: 138
活跃值: (470)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
原来如此~ 上面的帖子是我我功力低木有听懂;这下明白了
2014-1-16 08:49
0
游客
登录 | 注册 方可回帖
返回
//