ctfshow(91,96,97)--PHP特性

Web91

源代码:

show_source(__FILE__);
include('flag.php');
$a=$_GET['cmd'];
if(preg_match('/^php$/im', $a)){if(preg_match('/^php$/i', $a)){echo 'hacker';}else{echo $flag;}
}
else{echo 'nonononono';
}Notice: Undefined index: cmd in /var/www/html/index.php on line 15
nonononono

审计

GET传参cmd,保存到变量a.
preg_match()函数查询变量a中的php字符串。

preg_match(str $pattern,str $var)
第一个参数是字符串类型的搜索模式。
第二个参数是输入的字符串。
该函数的作用就是匹配输入的字符串中的目标字符,且只匹配一次,匹配成功一次后将不再向后继续匹配。
如果成功匹配,则返回1;匹配失败,则返回0.

分析本题中的函数:

preg_match('/^php$/im', $a)

^php$表示匹配以php开头且以php结尾的字符串,其实就是匹配字符串php。
后面的i和m是模式修饰符,i表示匹配不区分大小写,m表示将含有换行符字符串视为多行,每行分别匹配。

思路

payload如下:

?cmd=p%0aphp //%0a是ASCII编码的换行符

第一个匹配函数preg_match('/^php$/im', $a),是多行模式匹配,第一行的p没有成功匹配,就会去第二行匹配,在第二行成功匹配到php,返回值为1.
第二个匹配函数preg_match('/^php$/i', $a),不是多行匹配,在第一行没有匹配到php,返回值0.
因此我们成功执行到 echo $flag; ,得到flag.

Web96

源代码:

highlight_file(__FILE__);if(isset($_GET['u'])){if($_GET['u']=='flag.php'){die("no no no");}else{highlight_file($_GET['u']);}
} 

审计

GET传参u。
条件判断,如果u==‘flag.php’,结束程序执行。如果结果为false,显示u所指向的界面的源代码。

思路

flag显然在flag.php文件中,但是我们不能直接传参?u=flag.php
这里介绍一个网页目录的知识点:

假如网页根目录下有flag.php文件,查找文件使用 /flag.php 这里的 / 就是指根目录
同理, ./代表的是当前目录, …/ 代表的是上一级目录

这里的flag.php是在当前目录下,所以可以令:

?u=./flag.php

得到flag.

还有如下解法:

?u=/var/www/html/flag.php  //使用了flag.php的绝对路径查询。一般情况下我们访问的网页目录都是/var/www/html目录
?u=php://filter/read=convert.base64-encode/resource=flag.php //使用php伪协议读取

Web97

源代码:

include("flag.php");
highlight_file(__FILE__);
if (isset($_POST['a']) and isset($_POST['b'])) {if ($_POST['a'] != $_POST['b']){if (md5($_POST['a']) === md5($_POST['b']))echo $flag;}else{print 'Wrong.';}
} 

审计

POST 传参a,b
第一处条件判断:a != b ,返回值为true进入下一步。
第二次条件判断:md5($_POST['a']) === md5($_POST['b']),返回值为true,得到flag。

MD5是一种加密方式
由于MD5不能加密数组,如果输入数组,将会返回NULL

所以我们可以POST a,b为数组:

a[]=1&b[]=2

这样a!=b,但是在md5加密后的结果都为null,成功得到flag。

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

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

相关文章

揭开广告引擎的神秘面纱:如何在0.1秒内精准匹配用户需求?

目录 一、广告系统与广告引擎介绍 (一)广告系统与广告粗分 (二)广告引擎在广告系统中的重要性分析 二、广告引擎整体架构和工作过程 (一)一般概述 (二)核心功能架构图 三、标…

[论文阅读]A Survey of Embodied Learning for Object-Centric Robotic Manipulation

Abstract --以对象为中心的机器人操纵的Embodied learning是体现人工智能中一个快速发展且具有挑战性的领域。它对于推进下一代智能机器人至关重要,最近引起了人们的极大兴趣。与数据驱动的机器学习方法不同,具身学习侧重于通过与环境的物理交互和感知反…

NFTScan Site:以蓝标认证与高级项目管理功能赋能 NFT 项目

自 NFTScan Site 上线以来,它迅速成为 NFT 市场中的一支重要力量,凭借对各类 NFT 集合、市场以及 NFTfi 项目的认证获得了广泛认可。这个平台帮助许多项目提升了曝光度和可见性,为它们在竞争激烈的 NFT 市场中创造了更大的成功机会。 在最新更…

指数分布的原理和应用

本文介绍指数分布,及其推导原理。 Ref: 指数分布 开始之前,先看个概率密度函数的小问题: 问题描述:你于上午10点到达车站,车在10点到10:30 之间到达的时刻 X 的概率密度函数如图: 则使用分段积分&#xff0…

Javase——正则表达式

正则表达式的相关使用 public static void main(String[] args) {//校验QQ号 System.out.println("3602222222".matches("[1-9][0-9]{4,}"));// 校验18位身份证号 System.out.println("11050220240830901X".matches("^([0-9]){7,18}…

安装中文版 Matlab R2022a

下载安装包 压缩包有点大,大概20G 百度网盘:下载链接 提取码:rmja 安装 解压后打开目录,右键以管理员身份运行 setup.exe 选择输入安装秘钥 输入秘钥: 50874-33247-14209-37962-45495-25133-28159-33348-18070-6088…

SICTF Round #4|MISC

1.派森 腐乳昂木 奥普瑞特儿 阴坡尔特 艾克斯奥尔 腐乳昂木 提克有第爱慕 阴坡尔特 ⭐ 弗拉格 等于 布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉 印刻 等于 左中括号右中括号 佛儿 唉 因 梯软者左括号 零,楞左括号弗拉格右…

保研考研机试攻略:python笔记(2)

🐨🐨🐨宝子们好呀,今天我们继续来学习N诺提供的python笔记,fighting!( •̀ ω •́ )✧ 对这个系列感兴趣的宝子欢迎关注保研考研机试攻略专栏哦 ~ 目录 🐨🐨🐨4进制转…

Hyper-V 安装 KylinOS V10【图文教程】

文章目录 下载 KylinOSHyper-V 安装 KylinOS新建虚拟机配置虚拟机启动虚拟机并配置下载 KylinOS KylinOS 没有直接提供下载地址,需要在页面上点试用,填写个人信息后,才能看到下载地址。 https://www.kylinos.cn/support/trial.html?trial=425887 试用地址:产品试用申请国…

LeetCode 0685.冗余连接 II:并查集(和I有何不同分析)——详细题解(附图)

【LetMeFly】685.冗余连接 II:并查集(和I有何不同分析)——详细题解(附图) 力扣题目链接:https://leetcode.cn/problems/redundant-connection-ii/ 在本问题中,有根树指满足以下条件的 有向 图。该树只有一个根节点&…

mysql查表相关练习

作业要求: 单表练习: 1 . 查询出部门编号为 D2019060011 的所有员工 2 . 所有财务总监的姓名、编号和部门编号。 3 . 找出奖金高于工资的员工。 4 . 找出奖金高于工资 40% 的员工。 5 找出部门编号为 D2019090011 中所有财务总监,和…

GHuNeRF: Generalizable Human NeRF from a Monocular Video

研究背景 研究问题:这篇文章要解决的问题是学习一个从单目视频中泛化的人类NeRF模型。尽管现有的泛化人类NeRF已经取得了令人印象深刻的成果,但它们需要多视图图像或视频,这在某些情况下可能不可用。此外,一些基于单目视频的人类…

Linux - grep的正则用法

新建u.txt,文本内容如图: 搜寻特定字符串 利用中括号[]搜寻集合字符 行首与行位字符^$ 任意一个字符.与重复字符*限定连续RE字符范围{} 总结:

项目模块十五:HttpResponse模块

一、模块设计思路 存储HTTP应答要素&#xff0c;提供简单接口 二、成员变量 int _status; // 应答状态码 unordered_map<string, string> _headers; // 报头字段 string _body; // 应答正文 bool _redirect_flag; // 是否重定向信息 stri…

从零开始的c++之旅——继承

1. 继承 1.继承概念及定义 继承是面向对象编程的三大特点之一&#xff0c;它使得我们可以在原有类特性的基础之上&#xff0c;增加方法 和属性&#xff0c;这样产生的新的类&#xff0c;称为派生类。 继承 呈现了⾯向对象程序设计的层次结构&#xff0c;以前我们接触的…

6.1、实验一:静态路由

源文件获取&#xff1a;6.1_实验一&#xff1a;静态路由.pkt: https://url02.ctfile.com/f/61945102-1420248902-c5a99e?p2707 (访问密码: 2707) 一、目的 理解路由表的概念 会使用基础命令 根据需求正确配置静态路由 二、准备实验 1.实验要求 让PC0、PC1、PC2三台电脑…

logback日志级别动态切换四种方案

生产环境中经常有需要动态修改日志级别。 现在就介绍几种方案 方案一&#xff1a;开启logback的自动扫描更新 配置如下 <?xml version"1.0" encoding"UTF-8"?> <configuration scan"true" scanPeriod"60 seconds" debug…

Qt字符编码

目前字符编码有以下几种&#xff1a; 1、UTF-8 UTF-8编码是Unicode字符集的一种编码方式(CEF)&#xff0c;其特点是使用变长字节数(即变长码元序列、变宽码元序列)来编码。一般是1到4个字节&#xff0c;当然&#xff0c;也可以更长。 2、UTF-16 UTF-16是Unicode字符编码五层次…

postman 获取登录接口中的返回token并设置为环境变量的方法 postman script

postman是一个比较方便的API开发调试工具&#xff0c; 我们在访问API时一般都需要设置一个token来对服务进行认证&#xff0c; 这个token一般都是通过登录接口来获取。 这个postman脚本放到登录接口的sctipt--> post-response里面即可将登陆接口中返回的token值设置到postma…

使用Django REST framework构建RESTful API

使用Django REST framework构建RESTful API Django REST framework简介 安装Django REST framework 创建Django项目 创建Django应用 配置Django项目 创建模型 迁移数据库 创建序列化器 创建视图 配置URL 配置全局URL 配置认证和权限 测试API 使用Postman测试API 分页 过滤和排序…