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

就会自动下载交换文件

 文件内的内容就包含后端源代码

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

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

相关文章

C语言之扫雷游戏实现篇

目录 主函数test.c 菜单函数 选择循环 扫雷游戏实现分析 整体思路 问题1 问题2 问题3 问题4 游戏函数&#xff08;函数调用&#xff09; 创建游戏盘数组mine 创建游戏盘数组show 初始化游戏盘数组InitBoard 展示游戏盘DisplayBoard 游戏盘置雷SetMine 游戏…

[JavaWeb]【十一】web后端开发-SpringBootWeb案例(登录)

目录 一、登录功能 1.1 思路 1.2 LoginController 1.3 EmpService 1.4 EmpServiceImpl 1.5 EmpMapper 1.6 启动服务-测试 1.7 前后端联调 二、登录校验&#xff08;重点&#xff09; 2.1 问题 2.2 问题分析 2.3 登录校验​编辑 2.4 会话技术 2.4.1 会话技术 2.4.2 …

【InsCode】InsCode打造的JavaSE与Linux命令互融的伪Linux文件系统小项目

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 &#x1f4d6;所属专栏&#xff1a;Ja…

通过C实现sqlite3操作,导入电子词典

#include <stdio.h> #include <string.h> #include <stdlib.h> #include <sqlite3.h> int main(int argc, const char *argv[]) {//创建并打开一个数据库sqlite3 *db NULL;if(sqlite3_open("./dict.db",&db) ! SQLITE_OK){printf("…

Unity之 Vector3 的详细介绍以及方法的介绍

文章目录 总的介绍小试牛刀相关的描述的参数看个小例子 总的介绍 当涉及到Unity中的Vector3类时&#xff0c;以下是一些常用的方法和操作&#xff1a; magnitude 方法&#xff1a;返回向量的长度。 float length vector.magnitude;sqrMagnitude 方法&#xff1a;返回向量的平…

MySQL详细安装与配置

免安装版的Mysql MySQL关是一种关系数据库管理系统&#xff0c;所使用的 SQL 语言是用于访问数据库的最常用的 标准化语言&#xff0c;其特点为体积小、速度快、总体拥有成本低&#xff0c;尤其是开放源码这一特点&#xff0c;在 Web 应用方面 MySQL 是最好的 RDBMS(Relation…

Vue3+Pinia+Koa+Three.js 全栈电商项目总结复盘

前言 前几天一个朋友去义乌旅游&#xff0c;带回来很多小商品&#xff0c;就是一整个物美价廉&#xff0c;但是为什么线下购物和网购有的时候差别这么大&#xff08;网购经常要退换货啊&#x1f62d;&#x1f62d;&#x1f62d;&#xff09;&#xff0c;为此我萌生了一个想法&…

【Java 高阶】一文精通 Spring MVC - 转换器(五)

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…

LVS DR模式搭建

目录 一、DR模式概述 一、与NET模式的区别 二、操作命令图 三、搭建流程 一、首先配置三台虚拟机并配置环境&#xff08;关闭防火墙&#xff0c;宽容模式&#xff09; 二、ping通百度 三、在115.3的&#xff08;lvs&#xff09;虚拟机上安装 ipvsadm 四、调整ARP参数 五…

outlook等客户端报错:-ERR Login fail. Please using weixin token to login

使用outlook配置腾讯邮箱后&#xff0c;无法收取邮件&#xff0c;点击接收/发送所有文件夹&#xff0c; 提示报错&#xff1a; 任务“testqq.com - 正在接收”报告了错误(0x800CCC92):“电子邮件服务器拒绝您登录。请在“帐户设置”中验证此帐户的用户名及密码。 响应服务器:…

安装Node(脚手架)

目录 一&#xff0c;安装node&#xff08;脚手架&#xff09;1.1&#xff0c; 配置vue.config.js1.2&#xff0c; vue-cli3x的目录介绍1.3&#xff0c; package.json 最后 一&#xff0c;安装node&#xff08;脚手架&#xff09; 从官网直接下载安装即可&#xff0c;自带npm包管…

内网安全:WMI协议与SMB协议横向移动

目录 网络拓扑图 网络环境说明 WMI协议 SMB协议 域内信息收集 WMI协议 - 横向移动 利用方式一&#xff1a;wmic命令 利用方式一&#xff1a;cscript 利用方式一&#xff1a;impacket SMB协议 - 横向移动 利用方式一&#xff1a;psexec 利用方式二&#xff1a;psexe…