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!!!
 
<?php
 
    include "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()函数都使用数组绕过,还有就是针对字符串操作的函数

三、传参允许是空值,并实现绕过

<?php
 
include("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

<?php
 
include("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.mfbz.cn/a/86175.html

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

相关文章

RabbitMq的使用

最近处理访客记录所以&#xff0c;来学习下rabbitMQ。之前同事已经写好了&#xff0c;这里只需要进行消费&#xff0c;后续会逐渐完善。 0.介绍 0.1交换机&#xff08;Exchanges&#xff09; rabbitmq中生产者发送的消息都是发送到交换机&#xff0c;再由交换机推入队列。所…

百度云BOS云存储的图片如何在访问时,同时进行格式转换、缩放等处理

前言 之前做了一个图片格式转换和压缩的服务&#xff0c;结果太占内存。后来查到在访问图片链接时&#xff0c;支持进行图片压缩和格式转换&#xff0c;本来想着先格式转换、压缩图片再上传到BOS&#xff0c;现在变成了上传后&#xff0c;访问时进行压缩和格式转换。想了想&am…

无人机航管应答机 ping200XR

产品概述 ping200XR是一个完整的系统&#xff0c;旨在满足航管应答器和自动相关监视广播(ADS-B)的要求&#xff0c;在管制空域操作无人航空系统(UAS)。该系统完全可配置为模式A&#xff0c;模式C&#xff0c;模式S转发器和扩展ADS-B发射机的任何组合。ping200XR包括一个精度超…

AutoDev 1.1.3 登场,个性化 AI 辅助:私有化大模型、自主设计 prompt、定义独特规则...

在过去的半个月里&#xff0c;我们为开源辅助编程工具 AutoDev 添加了更强大的自定义能力&#xff0c;现在你可以&#xff1a; 使用自己部署的开源大模型自己配置 Intellij IDEA 中的行为自定义开发过程中的规范 当然了&#xff0c;如果您自身拥有开发能力的话&#xff0c;建议…

MinIO线上扩容实战

硬件投入肯定是随着业务的增长而增长&#xff0c;这就要求中间件平台必须提供水平伸缩机制&#xff0c;MinIO对象存储服务也不例外&#xff0c;本文就详细介绍MinIO的扩容。 Minio支持通过增加新的Server Pool来扩容老的集群。每个Server Pool都是一个相对独立的故障域&#x…

uniapp微信小程序点击右上角菜单分享功能权限配置

个人项目地址&#xff1a; SubTopH前端开发个人站 &#xff08;自己开发的前端功能和UI组件&#xff0c;一些有趣的小功能&#xff0c;感兴趣的伙伴可以访问&#xff0c;欢迎提出更好的想法&#xff0c;私信沟通&#xff0c;网站属于静态页面&#xff09; SubTopH前端开发个人站…

IPv4,IPv6,TCP,路由

主要回顾一下TCP&#xff0f;IP的传输过程&#xff0c;在这个过程中&#xff0c;做了什么事情 ip : 网际协议,IP协议能让世界上任意两台计算机之间进行通信。 IP协议的三大功能&#xff1a; 寻址和路由传递服务&#xff1a;不可靠&#xff08;尽最大努力交付传输数据包&…

Kali 分析和管理网络

查看网络 ifconfig 命令 ┌──(root㉿kali)-[~] # eth0:有线网卡 └─# ifconfig eth0: flags4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.56.128 netmask 255.255.255.0 broadcast 192.168.56.255inet6 fe80::20c:29ff:feb3:7991 prefixlen 64 …

C++信息学奥赛1131:基因相关性

这段代码的功能是比较两个字符串的相似度&#xff0c;并根据给定的阈值判断是否相似。 解析注释后的代码如下&#xff1a; #include <iostream> #include <string> using namespace std;int main() {double bf; // 定义双精度浮点数变量bf&#xff0c;用于存储阈…

LED驱动型IC芯片的原理介绍

一、LED驱动器是什么 LED驱动器&#xff08;LED Driver&#xff09;&#xff0c;是指驱动LED发光或LED模块组件正常工作的电源调整电子器件。由于LED PN结的导通特性决定&#xff0c;它能适应的电源电压和电流变动范围十分狭窄&#xff0c;稍许偏离就可能无法点亮LED或者发光效…

10种最流行的3D模型文件格式及转换方法

3D 文件格式用于存储有关 3D 模型的信息。 你可能听说过一些最流行的格式&#xff0c;包括 STL、OBJ、FBX 和 DAE。 它们广泛应用于从视频游戏动画到工业增材制造的各种应用中。 在本文中&#xff0c;我们将考虑为什么有这么多不同的格式&#xff0c;探讨 3D 文件格式存储的四…

Code Lab - 2

pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.10.2cu102.html pip install torch-sparse -f https://pytorch-geometric.com/whl/torch-1.10.2cu102.html pip install torch-geometric pip install ogb 1. PyG Datasets PyG有两个类&#xff0c;用…

学Python静不下来,看了一堆资料还是很迷茫是为什么

一、前言 最近发现&#xff0c;身边很多的小伙伴学Python都会遇到一个问题&#xff0c;就是资料也看了很多&#xff0c;也花了很多时间去学习但还是很迷茫&#xff0c;时间长了又发现之前学的知识点很多都忘了&#xff0c;都萌生出了想半路放弃的想法。 让我们看看蚂蚁金服的大…

IDEA:Error running,Command line is too long. 解决方法

报错如下&#xff1a; Error running SendSmsUtil. Command line is too long. Shorten the command line via JAR manifest or via a classpath file and rerun.原因是启动命令过长。 解决方法&#xff1a; 1、打开Edit Configurations 2、点击Modify options设置&#x…

关于android studio 几个简单的问题说明

自信是成功的第一步。——爱迪生 1. android studio 如何运行不同项目是否要更换不同的sdk 和 gradle 2.编译Gradle总是错误为什么 3.如何清理android studio 的缓存 4. 关于android Studio中的build 下面的rebuild project

Kafka基本使用

查看Kafka的进程是否在运行 #命令行终端中运行如下命令 ps -ef | grep kafkafind / -iname kafka-server-start.shcd /usr/local/kafka/bin/#启动kafka ./kafka-server-start.sh -daemon /usr/local/kafka/config/server.propertiesKafka默认使用9092端口提供服务&#xf…

使用opencv-python在图片上显示中文

测试图像如下&#xff1a; 核心代码如下&#xff1a; import cv2 import numpy as np from PIL import Image, ImageDraw, ImageFontdef cv2ImgAddText(img, text, left, top, textColor(0, 255, 0), textSize20):if (isinstance(img, np.ndarray)): #判断是否OpenCV图片类型…

javaScript:七夕特辑-对象的认识与应用(包含日期对象及相关案例)

目录 一.前言 二.认识对象 在js中声明对象的方法 1.直接使用{}声明对象 2.使用构造函数创建对象 获取属性的值 执行对象方法 解释 三.对象的应用 代码 效果图 ​编辑 四.日期对象 1.Date 日期对象 2. getFullYear() 获取当前年份 3.getMonth() 获取当前日期对象…

记一次由于整型参数错误导致的任意文件上传

当时误打误撞发现的&#xff0c;觉得挺奇葩的&#xff0c;记录下 一个正常的图片上传的点&#xff0c;文件类型白名单 但是比较巧的是当时刚对上面的id进行过注入测试&#xff0c;有一些遗留的测试 payload 没删&#xff0c;然后在测试上传的时候就发现.php的后缀可以上传了&a…

初识 JVM 01

JVM JRE JDK的关系 JVM 的内存机构 程序计数器 java指令的执行流程&#xff1a; 1 右侧的java源代码编译为左侧的java字节码&#xff08;右侧第一个方块对应左侧第一个方块&#xff09; 2 字节码 经过解释器 变为机器码 3 机器码就可以被cpu来执行 程序计数器的作用就…