CTF中的PHP特性函数(上)

news2024/12/31 3:55:46

前言

对于PHP大家一定不陌生,但你知道PHP在CTF中是如何考察的吗,本文给大家带来的是通过PHP特性来进行CTF比赛中解题出题的知识,会介绍一下CTF中常见的php特性以及围绕该知识点的相关案例,因为内容过多这里分成上中下三篇来讲,下面我们展开来讲。

MD5强弱碰撞

对于MD5加密大家一定很熟悉,在PHP里同样存在函数MD5,该函数可以将指定的字符串通过哈希函数转为复杂的加密字符串。在CTF中有着关于MD5的最基本的知识,即强/弱类型比较。

弱类型比较

观察以下代码:

if(md5($_GET['a'])==md5($_GET['b']))
echo $xino; 

可以看到比较时有两个等号,我们要怎样让他们相等呢?根据php弱类型比较特性,当两个等于号时,会将变量转化为同类型,那么我们可以思考,如果把传入的数据改成md5加密后都为开头0e的字符串是不是就可以绕过了,因为这样会被认为是科学计数法,不管加什么都永远是0,我们也就绕过了,这里举几个字符串md5加密后都为0e的:

NWWKITQ:0e763082070976038347657360817689
NOOPCJF:0e818888003657176127862245791911
s878926199a:0e545993274517709034328855841020
s1091221200a:0e940624217856561557816327384675 

强类型比较

观察下面代码:

if (md5($_POST['a']) === md5($_POST['b']))
echo xino; 

如果我们等号变成三个还可以用上面方法绕过吗?答案是否定的,因为三个等号在PHP里意味着强类型比较,上面的方法因为0e后面数据不同便不可行了,于是这里可以用数组来绕过,因为PHP特性允许接受数组,而数组在MD5加密后为NULL,于是借助这个特性可以进行绕过。

我们可以传入下面的PAYLOAD绕过:

a[]=a&b[]=b 

强碰撞

难度进一步升级,如果我们要面对的是以下代码呢:

$a = (string)$_GET['a'];
$b = (string)$_GET['b'];
if (md5($a) === md5($b)) {
die('OK');
} 

因为强制类型转换的原因,我们不能像上面一样传入数组了,于是需要进行MD5强碰撞,及内容不同而MD5值要相同,这就很难办了,但是我们可以用工具生成,这里给大家举一个可行的例子:

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 

preg_match()

这是一个正则表达式函数,简单来说会对我们设置的数据进行匹配,比如:

<?php 
if (preg_match("/xino/i", "XINO IS A BOY .")){ 
echo "查找到匹配的字符串 php。"; } 
else { echo "未发现匹配的字符串 php。"; } ?> 

因为我们用/i设置了大小写不敏感,所以可以找到匹配字符串,所以会返回查询到的字符串,下面我们看看如何绕过。

<?php
include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){$num = $_GET['num'];if(preg_match("/[0-9]/", $num)){die("no no no!");}if(intval($num)){echo $flag;}
} 

其中intval的作用是取整,可以看到正则过滤了数字,但由于PHP特性,该函数只能处理字符串,于是我们可以传入数组进行绕过:

?num[]=1 

提交后成功echo出了flag,绕过成功。

结语

作为PHP特性总结的第一篇,介绍了一下最简单的特性函数以及绕过方法,后面还会给大家带来更多的PHP特性知识,希望大家能喜欢。

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

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

相关文章

操作系统的特征

文章目录&#x1f380;前言&#xff1a;本篇博客知识总览&#x1f354;并发&#x1f387;概念&#xff1a;&#x1f354;共享&#x1f387;概念&#xff1a;&#x1f354;虚拟&#x1f387;概念&#xff1a;&#x1f354;异步&#x1f387;概念&#xff1a;&#x1f3f3;️‍&a…

ThinkPHP 多应用模式之Api路由分组+中间件

ThinkPHP 6.1 在多应用模式下实现API路由分组中间件验证业务 目录 1.创建中间件文件 2.迁移中间件到子应用目录中 3.编辑中间件验证业务 修改命名空间 编写handle处理代码 4.注册中间件 编辑中间件文件 TP内置中间件 5.设置路由分组 优化相同控制器前缀 最终效果&am…

【信息论与编码 沈连丰】第六章:连续信息和连续信道

【信息论与编码 沈连丰】第六章&#xff1a;连续信息和连续信道第六章 连续信息和连续信道6.1 连续消息的信息6.2 连续消息在信道上的传输问题6.3 香农信道容量公式6.4 连续消息的识别和理想接收机6.5 连续信源的数字处理及其编码第六章 连续信息和连续信道 6.1 连续消息的信息…

在 KubeSphere 上部署 OpenLDAP 并进行对接使用

在 KubeSphere 上部署 OpenLDAP 并进行对接-进阶背景前置条件KubeSphere 中部署 LDAP部署 LDAP 应用ApacheDirectoryStudio 验证 LDAP下载部署 ApacheDirectoryStudioApacheDirectoryStudio 测试 LDAP创建 Ldap Search &#xff0c;KS 对接时可选择使用KubeSphere 对接 LDAPHar…

【区块链 | EVM】深入理解学习EVM - 深入Solidity数据存储位置:内存

图片来源: Mech Mind on Unsplash 这是深入Solidity数据存储位置系列的另一篇。在今天的文章中,我们将学习EVM内存的布局,它的保留空间,空闲内存指针,如何使用memory引用来读写内存,以及使用内存时的常规最佳做法。 我们将使用 Ethereum Name Service (ENS)中的合约代码…

实模式和保护模式的区别

实模式和保护模式的区别 实模式和保护模式的来历 最早期的8086 CPU只有一种工作方式 ---- 实模式。数据总线为16位&#xff0c;地址总线为20位。实模式下所有寄存器都是16位。 从80286开始就有了保护模式&#xff0c;从80386开始CPU数据总线和地址总线均为32位&#xff0c;而且…

开发板测试手册——SPI FLASH 读写、USB WIFI 模块(2)

目录 1.8 SPI FLASH 读写测试 20 1.9 USB 接口读写测试 21 1.10 网络接口测试 23 1.10.1 网络连通测试 23 1.10.2 网络速度测试 25 2 网络静态 IP 设置 27 3 USB WIFI 模块测试 31 3.1 WIFI STA 功能测试 32 3.2 WIFI AP 功能测试 35 3.3 USB WIFI 驱动编译 39 前 言…

scikit-learn线性模型之线性回归

scikit-learn线性模型之线性回归线性回归参考文献线性回归 有监督学习中主要解决两个问题&#xff0c;一个是分类&#xff0c;另一个是回归。 在回归问题中&#xff0c;我们需要利用我们已知的特征 x1,x2,...,xpx_1,x_2,...,x_px1​,x2​,...,xp​ 去预测我们的目标变量 yyy 。…

隐私计算一体机,金融大数据规模商用的催化剂

一股隐私计算的浪潮正席卷金融行业。 银行通过隐私计算引入外部不动产数据&#xff0c;与行内贷款企业的时点贷款余额、注册资本等数据联合建立企业贷中预警监测模型&#xff0c;提升银行风险监测业务能力&#xff1b;银行利用联邦学习与互联网公司的客户特征数据完成联合建模…

Linux:使用telnet命令提示:Connection refused

我是 ABin-阿斌&#xff1a;写一生代码&#xff0c;创一世佳话&#xff0c;筑一览芳华。如果小伙伴们觉得不错就一键三连吧~ 下一篇&#xff1a;Linux安装telnet命令教程 文章目录一、分析没有xinetd服务&#xff1a;二、讲解&#xff1a; 什么是 telnet 命令具体语法具体参数三…

Node.js--》如何在Node.js中操作MySQL

目录 数据库 MySQL的安装与配置 SQL管理数据库 WHERE子句 AND和OR ORDER BY子句 COUNT(*)函数 在Express项目中操作MySQL 数据库 数据库(database)是用来组织、存储和管理数据的仓库。当今世界是一个充满着数据的互联网世界&#xff0c;充斥着大量的数据。数据的来源有…

算法拾遗二十三之暴力递归到动态规划一

算法拾遗二十三之暴力递归到动态规划一题目一优化Code&#xff08;空间换时间&#xff09;优化二题目二优化一&#xff08;缓存法&#xff09;优化三&#xff08;严格表优化&#xff09;题目一 假设有排成一行的N个位置&#xff0c;记为1~N&#xff0c;N 一定大于或等于 2 开始…

Softing与Portainer合作,为工业物联网提供灵活高效的机器连接管理解决方案

Softing工业自动化成为了Portainer的增值经销商。Portainer.io是一个用于管理容器软件应用的平台&#xff0c;而Softing连接产品与其相结合可以使用户更轻松地管理工业物联网解决方案。 &#xff08;左边&#xff1a;Thomas Hilz&#xff0c;Softing工业自动化常务董事&#xf…

创建odoo15项目

Odoo 提供了一种机制来帮助建立一个新模块 python 启动项目名称 scaffold 模块名称 模块创建的文件夹如下两种方式&#xff1a; 1&#xff09;可新建manage.py文件来启动脚手架 import os import sysLIB_PATH os.path.join(os.path.split(os.path.realpath(__file__))[0], .…

【谷粒商城基础篇】基础篇总结

谷粒商城笔记合集 分布式基础篇分布式高级篇高可用集群篇简介&环境搭建项目简介与分布式概念&#xff08;第一、二章&#xff09;基础环境搭建&#xff08;第三章&#xff09;整合SpringCloud整合SpringCloud、SpringCloud alibaba&#xff08;第四、五章&#xff09;前端知…

【kafka-ui】支持kafka with raft的可视化集群管理工具

前言 在早期使用kafka的时候一般使用Kafka Tool或者kafka eagle&#xff0c;前者为桌面软件&#xff0c;后者为浏览器软件。总体来说体验一般&#xff0c;但是还比较够用。 但是从kafka3.3.1开始&#xff0c;已经正式抛弃zookeeper使用自己的仲裁器了&#xff0c;但是上述两种…

什么是网站备案?如何查询网站是否备案?

网站备案是指根据国家法律法规需要网站的开办者向国家有关部门申请的备案.具体分为ICP备案和公安备案。 ICP备案 《互联网信息服务管理办法》指出&#xff0c;互联网信息服务分为经营性和非经营性两类。 国家对经营性互联网信息服务实行许可制度&#xff1b;对非经营…

实验室小分子PEG衍生物之Azido-PEG11-Azide/amine/NHS/COOH 叠氮-十一聚乙二醇-叠氮 1392284-57-9

Azido-PEG11-Azide叠氮-十一聚乙二醇-叠氮 中文名称&#xff1a;叠氮-聚乙二醇(十一甘醇)-叠氮&#xff1b;叠氮-十一聚乙二醇-叠氮 英文名称&#xff1a;Azido-PEG11-Azide 分子式&#xff1a;C24H48N6O11 分子量&#xff1a;596.67 CAS&#xff1a;1392284-57-9 外观&#x…

elasticsearch基础(一)

一、初识elasticsearch 1. 了解ES 1.1 什么是elasticsearch elasticsearch是一款非常强大的开源搜索引擎&#xff0c;可以帮助我们从海量数据中快速找到需要的内容。 elasticsearch结合kibana、Logstash、Beats&#xff0c;也就是elastic stack&#xff08;ELK&#xff09;。…

apply,call,bind的作用与区别

1.作用 都可以用来改变this,并立即执行函数 首先来看一个构造函数 function User(name) {this.name name;}let lisi new User(李四)console.log(lisi)// {"name": "李四"}使用call和apply改变this 第一个参数传递改变this指针的这个对象 function Us…