zoukankan      html  css  js  c++  java
  • Linux下利用动态链接劫持库函数并注入代码

    关于环境变量$ LD_PRELOAD

    $LD_PRELOAD是一个环境变量,用于加载动态库,他的优先级是最高的

    /*
        优先级顺序:
        (1)$LD_PRELOAD
        (2)$LD_LIBRARY_PATH
        (3)/etc/ld.so.cache
        (4)/lib
        (5)/usr/lib
    */
    

    一个挑战就是,这玩意可以产生一个shell,就像下面这样:

    $ LP_PRELOAD = ./payload.so /bin/true
    

    劫持库函数

    假设存在一段这样的代码,其编译过程

    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>
    
    int main(int argc, char const *argv[]){
        srand(time(NULL));
        printf("%d
    ", rand());
    }
    
    gcc random.c -o random
    ./random
    

    好的我们来覆写一下这个函数

    int rand(void){
        return 32;
    }
    
    gcc -shared -fpic shlib.c -o shlib.so
    LD_PRELOAD=./shlib.so ./random
    

    构造Payload

    #include <unistd.h>
    
    void _init(){
        char *argv[] = {"/bin/sh", 0};
        execve(argv[0], &argv[0], NULL);
    }
    

  • 相关阅读:
    学习些新东西
    浏览器内的web开发工具
    基于oracle开发的初步接触
    LAMP3 PHP安装
    svn for windows
    PHP替换掉字符串中的非字符
    搭个邮件服务器
    centos下安装mysql
    安装tomcat
    c#线程
  • 原文地址:https://www.cnblogs.com/mutudou/p/13607519.html
Copyright © 2011-2022 走看看