ctfshow-web入门-php特性(web96-web99)

目录

1、web96

2、web97

3、web98

4、web99


1、web96

试了下通配、转义、拼接、大小写都不行

这里使用绝对路径或者当前路径绕过:

?u=./flag.php

?u=/var/www/html/flag.php

还可以使用 php 伪协议:

?u=php://filter/resource=flag.php

2、web97

关于 sha1 和 md5 的绕过可以参考我之前的博客:

PHP特性之CTF中常见的PHP绕过-CSDN博客

(1)对于php强比较和弱比较:md5() 和 sha1() 函数无法处理数组,如果传入的为数组,会返回NULL,两个数组经过加密后得到的都是NULL,也就是相等的。

使用数组绕过,payload:

a[]=1&b[]=2

拿到 flag:ctfshow{2e3efa82-aa01-4871-b26d-7b8cd6b1d449}

(2)对于某些特殊的字符串加密后得到的密文以0e开头,PHP会当作科学计数法来处理,也就是0的n次方,得到的值比较的时候都相同。

下面是常见的加密后密文以0e开头的字符串:

md5:
 
240610708:0e462097431906509019562988736854
QLTHNDT:0e405967825401955372549139051580
QNKCDZO:0e830400451993494058024219903391
PJNPDWY:0e291529052894702774557631701704
NWWKITQ:0e763082070976038347657360817689
NOOPCJF:0e818888003657176127862245791911
MMHUWUV:0e701732711630150438129209816536
MAUXXQC:0e478478466848439040434801845361
 
 
sha1:
 
10932435112: 0e07766915004133176347055865026311692244
aaroZmOk: 0e66507019969427134894567494305185566735
aaK1STfY: 0e76658526655756207688271159624026011393
aaO8zKZF: 0e89257456677279068558073954252716165668
aa3OFF9m: 0e36977786278517984959260394024281014729
0e1290633704: 0e19985187802402577070739524195726831799

但是这里并不是弱比较,因此该方法不行:

对于 md5 强碰撞,我们需要找到两个 md5 值真正相同的数据。

(1)

十六进制格式的两个不同字符串:

4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa200a8284bf36e8e4b55b35f427593d849676da0d1555d8360fb5f07fea2
4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa202a8284bf36e8e4b55b35f427593d849676da0d1d55d8360fb5f07fea2

两者都有 MD5 哈希: 

008ee33a9d58b51cfeb425b0959121c9

(2)

0e306561559aa787d00bc6f70bbdfe3404cf03659e704f8534c00ffb659c4c8740cc942feb2da115a3f4155cbb8607497386656d7d1f34a42059d78f5a8dd1ef
0e306561559aa787d00bc6f70bbdfe3404cf03659e744f8534c00ffb659c4c8740cc942feb2da115a3f415dcbb8607497386656d7d1f34a42059d78f5a8dd1ef

两者都有 MD5 哈希:

cee9a457e790cf20d4bdaa6d69f01e41

但是这些十六进制里存在一些不可见字符: 

因此我们采用 url 编码来构造 payload: 

有点奇怪我这里顺着转出来和下面的 payload 有点差别,但是下面的 payload 逆着转回去又是和上面的十六进制值完全一样。

a=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2&b=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2

后面又看了一下:

开头 M 之后的字符确实应该被转成 %C9 才是对的

但是 %C3%89 也是转成这个东西

按照这样转出来的 payload 打不通,还是要使用上面给的那个 %C9 的payload。

3、web98

这里出现了 PHP 中的三元运算符:形如 XXXX?XX:xx

如果条件 XXXX 成立,则执行冒号前边的 XX,否则执行冒号后面的 xx

比如:isset($_GET['id']) ? $_GET['id'] : 1;

isset()函数用于检查变量是否设置,如果设置了,则 id=$_GET['id'],否则 id=1。

接下来我们分析下题目代码:

$_GET?$_GET=&$_POST:'flag';

$_GET 变量是一个数组,预定义的 $_GET 变量用于收集来自 method="get" 的表单中的值,表单域的名称会自动成为 $_GET 数组中的键。

如果 $_GET 不为空,也就是说我们进行了 get 传参,那么就会通过 $_GET = &$_POST 将 $_POST 的引用赋值给 $_GET,引用赋值导致两个变量指向同一个内存地址,而 $_POST 变量内容改变会影响 $_GET 变量的内容;如果 $_GET 为空则返回  'flag'。

$_GET['flag']=='flag'?$_GET=&$_COOKIE:'flag';
$_GET['flag']=='flag'?$_GET=&$_SERVER:'flag';

中间的两段代码其实没什么影响,都是根据 get 请求变量 flag 值是否为 'flag',是的话就进行引用赋值,不是的话就返回 'flag',我们只想获取 $flag。

highlight_file($_GET['HTTP_FLAG']=='flag'?$flag:__FILE__);

判断 get 请求变量 HTTP_FLAG 值是否为 'flag',是就输出 $flag,不是则返回当前脚本的绝对路径和文件名。

payload:

?HTTP_FLAG=flag

post:

HTTP_FLAG=flag

拿到 flag:ctfshow{ba1bc737-de2f-45f5-9e24-a65bec06b0f9}

当然这里的 get 请求其实可以是随意的,由于第一段代码的引用赋值,post 进去的内容会直接替代掉 get 的内容,因此只要存在 get 请求即可触发。

4、web99

代码审计:

$allow = array();

创建了一个空数组 $allow,用来存储后续生成的随机数。

for ($i=36; $i < 0x36d; $i++) {

for 循环,从 $i 初始化为 36,逐步增加直到 0x36d(十六进制表示的 877)。

array_push($allow, rand(1,$i));

在每次循环中,使用 rand(1, $i) 函数生成一个 1 到 $i 之间的随机数(也就是 1~877),并将其添加到 $allow 数组中。

if(isset($_GET['n']) && in_array($_GET['n'], $allow)){

检查是否设置了名为 n 的 GET 参数,并且确保它的值在 $allow 数组中。

file_put_contents($_GET['n'], $_POST['content']);

如果 $_GET['n'] 的值在 $allow 数组中,将 $_POST['content'] 的内容写入文件 $_GET['n'] 中。

 

接下来我们先看一个关于 in_array 函数的小测试:

<?php
$allow = [1,2,3];
$a = '2.php';
echo in_array($a,$allow)
?>

结论:in_array() 函数存在弱比较的漏洞,如果没有设置第三个参数,in_array() 函数在比较时默认是弱类型比较,这意味着它会进行自动类型转换。例如数组中的元素是整数,而搜索的值是字符串,PHP 会尝试将字符串转换为整数来进行比较。比如上面字符串类型的 1.php 就自动转换为了整数 1,也就符合在数组中的条件。

关于 in_array() 函数的参数和用法:

参数描述
needle必需。规定要在数组搜索的值。
haystack必需。规定要搜索的数组。
strict可选。如果该参数设置为 TRUE,则 in_array() 函数检查搜索的数据与数组的值的类型是否相同。

因此我们的文件名的数字只要符合在 1~877 之间,理论上来说就都可以写入一句话木马。

保险起见我们使用大概率会出现的,比如 1 ,多试几次。

写入一句话木马

get:

?n=1.php

post:

content=<?=eval($_REQUEST['1'])?>

调用:

读取 flag:

ctfshow{d3a99707-235d-4b10-a9e7-551000feba02}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

102.qt qml-最全Table交互之多列固定、行列拖拽、自定义委托、标题交互使用教程

自定义实现的Table控件&#xff0c;支持跨qt版本&#xff0c;兼容qt5,qt6&#xff01; 截图如下所示: 黑色风格如下所示&#xff1a; 视频演示入口&#xff1a;Qt QML QianWindowV2.5(新增曲线综合示例、QML最全Table交互示例、支持qt5/qt6)_哔哩哔哩_bilibili 1.示例页面入口…

【低照度图像增强系列(8)】URetinex-Net算法详解与代码实现(2022|CVPR)

前言 ☀️ 在低照度场景下进行目标检测任务&#xff0c;常存在图像RGB特征信息少、提取特征困难、目标识别和定位精度低等问题&#xff0c;给检测带来一定的难度。 &#x1f33b;使用图像增强模块对原始图像进行画质提升&#xff0c;恢复各类图像信息&#xff0c;再使用目标检…

中创算力公益行 | 夏日炎炎送清凉,温暖童心筑梦行

这是一个关于爱与关怀的故事&#xff0c;也是一段关于成长与责任的旅程。在这个炎炎夏日&#xff0c;喧嚣与热浪交织&#xff0c;有些孩子&#xff0c;他们生活在偏远的乡村&#xff0c;用稚嫩的双肩承载着生活的重担&#xff0c;在这个本应享受无忧无虑童年的年纪&#xff0c;…

SpringBoot3.3.0升级方案

本文介绍了由SpringBoot2升级到SpringBoot3.3.0升级方案&#xff0c;新版本的升级可以解决旧版本存在的部分漏洞问题。 一、jdk17下载安装 1、下载 官网下载地址 Java Archive Downloads - Java SE 17 Jdk17下载后&#xff0c;可不设置系统变量java_home&#xff0c;仅在id…

【python】PyQt5事件传递,鼠标动作捕获,键盘按键捕获原理与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

深度学习论文: MobileSAMv2: Faster Segment Anything to Everything

深度学习论文: MobileSAMv2: Faster Segment Anything to Everything MobileSAMv2: Faster Segment Anything to Everything PDF:https://arxiv.org/pdf/2312.09579 PyTorch: https://github.com/shanglianlm0525/PyTorch-Networks 1 概述 SAM模型应对两大分割任务的挑战&…

数字数据编码为数字信号/编码模式

&#xff5e;&#xff5e;&#xff5e;&#xff5e;&#xff5e;&#xff5e;&#xff5e;&#xff5e;&#xff5e;&#xff5e;&#xff5e;&#xff5e;&#xff5e; 1 非归零编码【NRZ】 2 曼彻斯特编码 3 差分曼彻斯特编码 &#xff5e;&#xff5e;&#xff5e;&#xff…

『C++成长记』vector模拟实现

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;C &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、存储结构 二、默认成员函数 &#x1f4d2;2.1构造函数 &#x1f4d2;2.2拷贝…

Unity实现安卓App预览图片、Pdf文件和视频的一种解决方案

一、问题背景 最近在开发app项目&#xff0c;其中有个需求就是需要在app软件内显示图片、pdf和视频&#xff0c;一开始想的解决方案是分开实现&#xff0c;也就是用Image组件显示图片&#xff0c;找一个加载pdf的插件和播放视频的插件&#xff0c;转念一想觉得太麻烦了&#x…

集成excel工具:自定义导入监听器、自定义类型转换器、web中的读

文章目录 I 封装导入导出1.1 定义工具类1.2 自定义读监听器: 回调业务层处理导入数据1.3 定义文件导入上下文1.4 定义回调协议II 自定义转换器2.1 自定义枚举转换器2.2 日期转换器2.3 时间、日期、月份之间的互转2.4 LongConverterIII web中的读IV 其他注意事项应用场景:导入…

Canvas:实现在线动态时钟效果

想象一下&#xff0c;用几行代码就能创造出如此逼真的图像和动画&#xff0c;仿佛将艺术与科技完美融合&#xff0c;前端开发的Canvas技术正是这个数字化时代中最具魔力的一环&#xff0c;它不仅仅是网页的一部分&#xff0c;更是一个无限创意的画布&#xff0c;一个让你的想象…

万界星空科技MES系统:食品加工安全的实时监控与智能管理

万界星空科技MES系统通过集成多种技术和功能&#xff0c;能够实时监控食品加工过程中各环节的安全风险。以下是对该系统如何实现实时监控的详细分析&#xff1a; 一、集成传感器和数据分析技术 万界星空科技MES系统利用集成的传感器和数据分析技术&#xff0c;实时监控生产过程…

c++ - 多态

文章目录 一、多态的概念二、多态使用三、多态的原理 一、多态的概念 1、概念&#xff1a; 多态就是具有多种形态&#xff0c;可以理解为同一个行为不同对象去完成表现出不同的状态&#xff0c;如&#xff1a; 二、多态使用 1、构成多态的条件 &#xff08;1&#xff09;派…

硬件开发笔记(二十五):AD21导入电解电容原理图库、封装库和3D模型

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140344547 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

[DiT] Scalable Diffusion Models with Transformers

1、目的 用transformer来替代U-Net backbone&#xff0c;提升生成效果 2、方法 Diffusion Transformers (DiTs) 1&#xff09;结构 Latent Diffusion Models (LDMs) -> Transformer (Vision Transformer, ViT) based DDPM -> off-the-shelf convolutional VAE 2&#xf…

Navicat使用教程——连接/新建数据库、SQL实现表的创建/数据插入、解决报错【2059-authentication plugin‘caching_sha2_password’……】

一、连接数据库 以MySQL为例 1、新建连接 &#xff08;1&#xff09;点击“文件”“新建连接”“MySQL” &#xff08;2&#xff09;根据需要&#xff0c;自定义连接名&#xff0c;输入安装MySQL时的密码&#xff0c;点击“连接测试”&#xff0c;确定是否可以连接 &#xf…

【企业级监控】Zabbix实现邮箱报警

Zabbix监控自动化 文章目录 Zabbix监控自动化资源列表基础环境前言四、Zabbix邮件告警4.1、实现报警所需的条件4.1.1、告警媒介4.1.2、触发器&#xff08;trigger&#xff09;4.1.3、动作&#xff08;action&#xff09; 4.2、配置告警媒介4.2.1、设置告警媒介参数4.2.2、启用此…

秋招Java后端开发冲刺——Mybatis使用总结

一、基本知识 1. 介绍 MyBatis 是 Apache 的一个开源项目&#xff0c;它封装了 JDBC&#xff0c;使开发者只需要关注 SQL 语句本身&#xff0c;而不需要再进行繁琐的 JDBC 编码。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java POJO&#xff08;Plain …

【提交ACM出版 | EIScopus检索稳定 | 高录用】第五届大数据与社会科学国际学术会议(ICBDSS 2024,8月16-18)

第五届大数据与社会科学国际学术会议&#xff08;ICBDSS 2024&#xff09;将于2024年08月16-18日在中国-上海隆重举行。 ICBDSS会议在各专家教授的支持下&#xff0c;去年已成功举办了四届会议。为了让更多的学者有机会参与会议分享交流经验。本次会议主要围绕“大数据”、“社…

小浣熊素材 - 分析博客文章分布

我上传的 Excel&#xff0c;第一列为文章标题&#xff0c;请你分析这个 Excel 里总共的文章数量&#xff0c;并且根据文章标题&#xff0c;智能地将这些文章进行归类&#xff0c;然后绘制出饼状图&#xff0c;展示每一类的文章&#xff0c;占文章总数的百分比。 自己的 Pytho…