[鹤城杯 2021]Middle magic 解题思路过程

过程

打开题目,是一道PHP的代码审计。代码如下:

<?php
highlight_file(__FILE__);
include "./flag.php";
include "./result.php";
if(isset($_GET['aaa']) && strlen($_GET['aaa']) < 20){$aaa = preg_replace('/^(.*)level(.*)$/', '${1}<!-- filtered -->${2}', $_GET['aaa']);if(preg_match('/pass_the_level_1#/', $aaa)){echo "here is level 2";if (isset($_POST['admin']) and isset($_POST['root_pwd'])) {if ($_POST['admin'] == $_POST['root_pwd'])echo '<p>The level 2 can not pass!</p>';// START FORM PROCESSING    else if (sha1($_POST['admin']) === sha1($_POST['root_pwd'])){echo "here is level 3,do you kown how to overcome it?";if (isset($_POST['level_3'])) {$level_3 = json_decode($_POST['level_3']);if ($level_3->result == $result) {echo "success:".$flag;}else {echo "you never beat me!";}}else{echo "out";}}else{die("no");}// perform validations on the form data}else{echo '<p>out!</p>';}}else{echo 'nonono!';}echo '<hr>';
}?>

分析代码,需要过三关,才能拿到flag。

  1. 需要传入一个参数,对其进行正则替换掉/^(.*)level(.*)$/得到$aaa,再对$aaa正则匹配,需匹配到pass_the_level_1#
  2. 需要保证$_POST['admin'] == $_POST['root_pwd'],且要通过判断sha1($_POST['admin']) === sha1($_POST['root_pwd'])
  3. 需要传入一个level_3参数,经过json_decode()之后与内置的$result变量弱类型比较相等(==)

bypass:

  1. 正则匹配单行模式(?s)下 ,.号将匹配所有字符,包括换行符;但默认情况下点号不匹配换行符,因此给了绕过(.*)的可能。payload:%0apass_the_level_1%23,%0a、%23分别是换行符、井号的URL编码。
  2. 利用哈希函数无法处理数组,会返回结果null,传入两个数组参数令其不一致绕过$_POST['admin'] == $_POST['root_pwd'],再sha1($_POST['admin']) === sha1($_POST['root_pwd'])时,null===null从而绕过。
  3. 利用json_decode()的缺陷与php弱类型比较,“json_decode()函数用于对json格式数据进行json解码操作,对于一个json类型的字符串,会解密成一个数组;存在一个0=="efeaf"的Bypass缺陷”,如下:
<?php
$key = "JsonTest";
if (isset($_GET['data'])) {$data = json_decode($_GET['data']);if ($data->key == $key) {echo "Bypass json_decode()!";} else {echo "No...";}
}
?>

因此最终payload:
payload

acquisition

  1. 正则匹配默认不匹配换行来bypass.
  2. 哈希函数处理数组时为null
  3. php弱类型比较中json_decode()函数的缺陷

reference

https://johnfrod.top/ctf/2021-%E9%B9%A4%E5%9F%8E%E6%9D%AF/
https://www.mi1k7ea.com/2019/06/21/PHP%E5%BC%B1%E7%B1%BB%E5%9E%8B%E5%B0%8F%E7%BB%93/#0x09-json-decode

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

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

相关文章

opencv带GStreamer之Windows编译

目录 1、下载GStreamer和安装2. GSTReamer CMake配置3. 验证是否配置成功 1、下载GStreamer和安装 下载地址如下&#xff1a; gstreamer-1.0-msvc-x86_64-1.18.2.msi gstreamer-1.0-devel-msvc-x86_64-1.18.2.msi 安装目录无要求&#xff0c;主要是安装完设置环境变量 xxx\1…

6. CSS(三)

目录 一、盒子模型 &#xff08;一&#xff09;网页布局的本质 &#xff08;二&#xff09;盒子模型组成 &#xff08;三&#xff09;边框&#xff08;border&#xff09; &#xff08;四&#xff09;表格的细线边框 &#xff08;五&#xff09;内边距&#xff08;padding…

jupyter默认工作目录的更改

1、生成配置文件&#xff1a;打开Anaconda Prompt&#xff0c;输入如下命令 jupyter notebook --generate-config询问[y/N]时输入y 2、配置文件修改&#xff1a;根据打印路径打开配置文件jupyter_notebook_config.py&#xff0c;全文搜索找到notebook_dir所在位置。在单引号中…

VB6查表法编解Modbus RTU协议CRC16校验码

Modbus RTU协议CRC16编解码用VB6写起来比较啰嗦&#xff0c;需要做一些简单处理。下面就查表法&#xff0c;贴上源代码&#xff0c;并做一些简要说明。 源程序&#xff0c;对照上面的图看更方便。 Private Sub Command2_Click() Dim I As Integer, J As Integer Dim CRCHi As …

微服务03-RabbitMQ

1、简介 MQ,中文是消息中间件(队列)(MessageQueue),字面来看就是存放消息的队列。也就是事件驱动架构中的Broker。 简单来说,消息中间件就是指保存数据的一个容器(服务器),可以用于两个系统之间的数据传递。 几种常见MQ的对比: RabbitMQActiveMQRocketMQKafka公司…

Git全栈体系(六)

第十章 自建代码托管平台-GitLab 一、GitLab 简介 GitLab 是由 GitLabInc.开发&#xff0c;使用 MIT 许可证的基于网络的 Git 仓库管理工具&#xff0c;且具有 wiki 和 issue 跟踪功能。使用 Git 作为代码管理工具&#xff0c;并在此基础上搭建起来的 web 服务。GitLab 由乌克…

docker案例复现

$uri导致的CRLF注入漏洞 前期准备dockerdocker compose 漏洞配置 前期准备 docker 要完成这样的测试&#xff0c;需要我们有一定的环境&#xff0c;也就是需要大家去安装docker 更新系统软件包&#xff1a; sudo yum update 安装 Docker 的依赖软件包&#xff1a; sudo yum …

1个用户促成800万订单背后:三翼鸟将极致用户运营进行到底

今年暑假档&#xff0c;《长安三万里》是一批当之无愧的黑马&#xff0c;总票房正式超过光线动画《姜子牙》&#xff0c;创造了追光动画的票房新纪录。 当朋友们纷纷打卡分享强烈安利这部电影时&#xff0c;我不由感叹“它究竟有怎样的魔力”&#xff0c;形成如此炸裂的口碑传…

合并图形并共享同一个图例的三种方法

简介 小编在科研中&#xff0c;需要将多个图形进行合并&#xff0c;并共享同一个图例。此时应该如何实现&#xff1f;关于图形合并的相关推文写了很多了&#xff1a;R可视乎&#xff5c;合并多幅图形、cowplot包&#xff0c;ggplot2图形排版R包。 但是对于今天这个问题&#x…

关于安卓打包生成aar,jar实现(一)

关于安卓打包生成aar&#xff0c;jar方式 背景 在开发的过程中&#xff0c;主项目引入三方功能的方式有很多&#xff0c;主要是以下几个方面&#xff1a; &#xff08;1&#xff09;直接引入源代码module&#xff08;优点&#xff1a;方便修改源码&#xff0c;易于维护&#…

【TypeScript】TS类型守卫(六)

【TypeScript】TS类型守卫&#xff08;六&#xff09; 【TypeScript】TS类型守卫&#xff08;六&#xff09;一、什么是类型守卫二、in操作符三、typeof操作符四、instanceof操作符五、自定义类型谓词函数 一、什么是类型守卫 TypeScript类型守卫&#xff08;Type Guards&…

Python实现SSA智能麻雀搜索算法优化BP神经网络分类模型(BP神经网络分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 麻雀搜索算法(Sparrow Search Algorithm, SSA)是一种新型的群智能优化算法&#xff0c;在2020年提出&a…