php 系列题目,包含查看后端源代码
一、弱类型比较问题
原则:
1.字符串和数字比较,字符串回被转换成数字。
"admin" ==0(true)
admin被转换成数字,由于admin是字符串,转换失败,变成0
int(admin)=0,所以比较结果是ture
2.混合字符串转换成数字,看字符串的第一个
“1admin” == 1 ‘’2admin“ == 2
3.字符串开头以xex开头,x代表数字。会被转换成科学计数法
1e9 => 1x10^9
例题一
GIVE ME THE MONEY!!!<?phpinclude "flag.php";highlight_file(__FILE__);if (isset($_GET['money'])) {$money=$_GET['money'];if(strlen($money)<=4&&$money>time()&&!is_array($money)){echo $flag;}else echo "Wrong Answer!";}else echo "Wrong Answer!";?>
使用到第三个原则,输入参数为四个字节,含有字母e分隔的字符串,设置数值比较大,就可以大过time()时间戳
例题二,经典的0e绕过MD5
<!DOCTYPE html>
<!--html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<?php$flag="ctf{YOU_4re_DO1ng_GREAT!}";if (isset($_GET['a'])&&isset($_GET['b'])) {$a=$_GET['a'];$b=$_GET['b'];if($a==$b) {echo "<center>Wrong Answer!</center>";}else {if(md5($a)==md5($b)) {echo "<center>".$flag."</center>"; }else echo "<center>Wrong Answer!</center>";}}else echo "NONONO";
?>
</body>
</html-->
题目要求输入的两个参数a、b满足条件1:a!=b同时满足条件条件2:MD5(a)==MD5(b)
MD5加密的特点是,输入的明文不同,输出的结果必然不同
为了同时实现条件1和条件2,这种极端环境下就要用到弱类型比较问题的三个原则
分析MD5加密,它输出的格式是16进制格式的(输出的元素只有0-9和a-f)
在a-f范围内有个特殊的字符e存在 ,所以用到三原则中的第三个原则
等号比较的两边有xex格式的,都当作科学计数法形式来比较
输入两个0e开头不相同的字符串,就可以同时满足两个条件
二、数组类型参数绕过
- 许多函数的参数输入并非数组
- 强行输入数组会返回特殊结果
传入参数为数组类型,函数返回结果为NULL
例题

输入参数为三个不同的数组
md5($v1)==md5($v2) =>null==null
strcmp()函数比较两字符串是否相同,相同返回0,不相同返回1
v3强行输入数组形式,函数返回值为null,加!变为ture
通常出现strcmp()函数都使用数组绕过,还有就是针对字符串操作的函数
三、传参允许是空值,并实现绕过
<?phpinclude("extract_flag.php");
extract($_GET);
if(isset($aurora))
{ $content=trim(file_get_contents($flag)); if($aurora==$content){echo $flag; }
else { echo'Oh.no'; } }?>
- extract函数 :讲传入的数组,转换为变量名和变量值的声明,例如输入的get参数是a=1&b=2经过该函数作用了,就多了两个变量$a=1,$b=2。作用类似于n个$_GET(a)语句
- file get contents():传入参数为文件名,函数将传入文件的内容读取出来
- trim():去除字符串首尾的空格
本题是在考验我们是否已经知道了服务器上的某个文件的内容,就是参数aurora值传已知文件的内容,$flag传文件名,就能得到flag
但是问题在于不知道某个文件的内容
解决办法是传空值绕过,传空值不是没传值isset()是可以满足的
aurora&flag
四、%00绕过
php底层的解析器是由c语言实现的,在c语言表达字符串的终结是'\0',在php中是‘%00’
某些函数不过没有对‘%00’进行特殊处理,就存在着可能绕过的空间
ereg就是这样的函数,当输入123%00到ereg函数中,遇到%00就认为字符串终结,不再判断直接符合条件,返回ture
<?phpinclude("strpos_flag.php");
if (isset ($_GET['password'])) {
if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE)
echo 'You password must be alphanumeric';
else if (strpos ($_GET['password'], '--') !== FALSE)
die('Flag: ' . $flag);
else
echo 'Invalid password';}?>
- strpos():实现字符串的字符查找是否存在
- ereg():正则表达式的匹配,
ereg("^[a-zA-Z0-9]+$",$_GET['password']只允许包含【】内的字符
获取后端源代码的方法
1.后端源码会以注释形式展示在前端源代码中

- 右键查看前端页面源代码
- 地址栏中后跟/.index.php~,会自动下载页面源码
2.由于电脑或vim编辑器非正常退出,会保留交换文件,后端源码就保存在交换文件中
例题:

题目提示说电脑会自动关机,电脑自动关机说明文本编辑器肯定会非正常退出,就会留下交换文件
在地址栏中后跟/.index.php.swp
就会自动下载交换文件
文件内的内容就包含后端源代码
相关文章:
php 系列题目,包含查看后端源代码
一、弱类型比较问题 原则: 1.字符串和数字比较,字符串回被转换成数字。 "admin" 0(true) admin被转换成数字,由于admin是字符串,转换失败,变成0 int(admin)0,所以比较结果是ture 2.混合字符串转…...
令牌桶C语言代码实现
令牌桶实例 令牌桶三要素 cps 每秒钟传输字节数 burst 令牌桶内最多能传输的字节数,token的最大值 token 令牌的个数 之前是一个令牌(token)对应一个字节,现在将一个token变为一个cps,cps是解码速率,每攒到一个令牌ÿ…...
Mybatis 建立依赖失败:报错Dependency ‘mysql:mysql-connector-java:8.0.28‘ not found
Mybatis 建立依赖失败:报错Dependency ‘mysql:mysql-connector-java:8.0.28’ not found 解决办法: 写完依赖代码,直接重构,下载依赖。 图片: 和 UUID(Universally Unique Identifier)都是用于生成唯一标识符的方法,但它们在实现和适用场景上存在一些区别。 雪花算法: 雪花算法是Twitter开发的一种分布式ID生成算法…...
docker之DockerFile与网络
目录 DockerFile 构建步骤 基础知识 指令 实战:构建自己的centos 第一步:编写dockerfile文件 第二步:构建镜像文件 docker网络 原理 功能 网络模式 host模式 container模式 none模式 bridge模式 DockerFile dockerfile 是用来…...
知识蒸馏开山之作(部分解读)—Distilling the Knowledge in a Neural Network
1、蒸馏温度T 正常的模型学习到的就是在正确的类别上得到最大的概率,但是不正确的分类上也会得到一些概率尽管有时这些概率很小,但是在这些不正确的分类中,有一些分类的可能性仍然是其他类别的很多倍。但是对这些非正确类别的预测概率也能反…...
centos 7 安装 docker-compose curl 设置代理
sudo curl -x “http://192.168.1.2:3128” 需要验证的代理 sudo curl -x “http://username:password192.168.1.2:3128” 1.下载 sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/lo…...
3D姿态相关的损失函数
loss_mpjpe: 计算预测3D关键点与真值之间的平均距离误差(MPJPE)。 loss_n_mpjpe: 计算去除尺度后预测3D关键点误差(N-MPJPE),评估结构误差。 loss_velocity: 计算3D关键点的速度/移动的误差,评估运动的平滑程度。 loss_limb_var: 计算肢体长度的方差,引导生成合理的肢体长度…...
ChatGPT取代人类仍然是空想?有没有一种可能是AI在迷惑人类
ChatGPT自从去年发布以来,就掀起了这些大语言模型将如何颠覆一切的激烈讨论,从为学生写作文、输出SEO文章,甚至取代谷歌成为世界上最受欢迎的搜索引擎,影响领域无所不包,甚至可能取代编剧、小说家和音乐家等从事创意工…...
基于swing的旅游管理系统java jsp旅行团信息mysql源代码
本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 基于swing的旅游管理系统 系统有1权限:管…...
Windows wsl2支持systemd
背景 很多Linux发行版都是使用systemd来管理程序进程,但是在WSL中默认是用init来管理进程的。 为了符合长久的使用习惯,且省去不必要的学习成本,就在WSL的发行版(我这里安装的是Ubuntu20.04)中支持systemd࿰…...
NLP - 如何解决ModuleNotFoundError: No module named ‘jieba‘的问题
错误描述 在JUPYTER中,使用结巴分词,出错: ModuleNotFoundError: No module named jieba解决方案 在 Anaconda Prompt 中,执行以下指令(可以解决): pip install jieba -i https://pypi.tuna…...
Windows10上VS2022单步调试FFmpeg 4.2源码
之前在 https://blog.csdn.net/fengbingchun/article/details/103735560 介绍过通过VS2017单步调试FFmpeg源码的方法,这里在Windows10上通过VS2022单步调试FFmpeg 4.2的方法:基于GitHub上ShiftMediaProject/FFmpeg项目,下面对编译过程进行说明…...
【tkinter 专栏】菜单组件
文章目录 前言本章内容导图1. Menu 菜单组件Menu 组件的基本使用制作二级下拉菜单为菜单添加快捷键2. Treeview 树形菜单组件Treeview 组件的基本使用菜单项的获取与编辑前言 本专栏将参考《Python GUI 设计 tkinter 从入门到实践》书籍(吉林大学出版社 ISBN: 9787569275001)…...
【LeetCode-经典面试150题-day10】
目录 242.有效的字母异位词 49.字母异位词分组 202.快乐数 219.存在重复元素Ⅱ 383.赎金信 205.同构字符串 290.单词规律 242.有效的字母异位词 题意: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和…...
Transformer在医学影像中的应用综述-分类
文章目录 COVID-19 Diagnosis黑盒模型可解释的模型 肿瘤分类黑盒模型可解释模型 视网膜疾病分类小结 总体结构 COVID-19 Diagnosis 黑盒模型 Point-of-Care Transformer(POCFormer):利用Linformer将自注意的空间和时间复杂度从二次型降低到线性型。POCFormer有200…...
微信小程序获取手机号登录,从免费到收费后,我的低成本替代方案(附完整代码)
微信小程序登录策略优化:从手机号收费到低成本用户体系设计 去年微信团队调整了小程序获取用户手机号的规则——从完全免费变为1000次调用后的按量计费。这对于日活超过1000的中小开发者来说,意味着每月可能新增数百至数千元的额外成本。但用户登录又是小…...
Granite TimeSeries FlowState R1 多步预测效果展示:长期趋势与不确定性量化
Granite TimeSeries FlowState R1 多步预测效果展示:长期趋势与不确定性量化 时间序列预测,听起来挺专业的,但说白了,就是根据过去的数据,猜猜未来会发生什么。比如,老板问你:“下个月咱们产品…...
Python实战:5分钟搞定睿尔曼机械臂与AGV底盘的Socket通信(附完整代码)
Python实战:5分钟搞定睿尔曼机械臂与AGV底盘的Socket通信(附完整代码) 在工业自动化领域,复合机器人正逐渐成为提升生产效率的关键设备。这类机器人通常由AGV(自动导引运输车)底盘和机械臂组成,…...
Qwen2-VL-2B-Instruct在Qt桌面应用中的集成:开发跨平台图像分析工具
Qwen2-VL-2B-Instruct在Qt桌面应用中的集成:开发跨平台图像分析工具 1. 引言 如果你是做桌面应用开发的,特别是用C和Qt的,最近可能也注意到了AI模型带来的新机会。很多开发者都在想,怎么把这些强大的AI能力,比如看图…...
Leaflet坐标系实战:从设置到动态切换的完整指南
1. Leaflet坐标系基础概念解析 第一次接触Leaflet坐标系时,我也被各种专业术语搞得晕头转向。简单来说,坐标系就是用来确定地图上每个点位置的规则系统。就像我们在地球上使用经纬度定位一样,数字地图也需要明确的坐标参考。 Leaflet默认支持…...
ANSYS接触分析实战:从法兰连接案例看MPC绑定与标准接触设置技巧
ANSYS接触分析实战:法兰连接中的MPC绑定与标准接触配置全解析 在机械工程领域,法兰连接作为管道系统中最常见的连接方式之一,其可靠性直接影响整个系统的安全运行。传统设计方法往往依赖经验公式和安全系数,难以准确预测复杂工况下…...
Qwen3-VL-4B Pro行业案例:法律合同截图关键条款提取与语义摘要生成
Qwen3-VL-4B Pro行业案例:法律合同截图关键条款提取与语义摘要生成 1. 项目核心能力与应用场景 想象一下,你是一名法务人员或商务经理,每天需要审阅大量来自邮件、聊天记录或扫描件的合同截图。这些截图里包含了付款条款、违约责任、保密协…...
OneMore图片编辑终极指南:无需外部工具裁剪旋转图像
OneMore图片编辑终极指南:无需外部工具裁剪旋转图像 【免费下载链接】OneMore A OneNote add-in with simple, yet powerful and useful features 项目地址: https://gitcode.com/gh_mirrors/on/OneMore OneMore是一款功能强大的OneNote插件,提供…...
PyTorch 3.0静态图分布式训练:如何用3行torch.compile + 2行DTensor替代自研调度器?一线大厂已全面切换
第一章:PyTorch 3.0静态图分布式训练概览 PyTorch 3.0 引入了原生静态图(Static Graph)支持,通过 TorchDynamo Inductor 后端实现高效图捕获与跨设备编译,为大规模分布式训练提供低开销、高一致性的执行基础。静态图模…...
一维卷积与RNN的融合策略:高效处理长序列数据的实战指南
1. 为什么需要融合一维卷积与RNN? 在处理长序列数据时,我们常常面临两个关键挑战:局部模式识别和长期依赖建模。一维卷积神经网络(CNN)擅长捕捉局部特征,比如音频信号中的音素或文本中的短语模式࿱…...
