ctfshow-web入门-php特性(web127-web131)

目录

1、web127

2、web128

3、web129

4、web130

5、web131


1、web127

代码审计:

$ctf_show = md5($flag);

将 $flag 变量进行 MD5 哈希运算,并将结果赋值给 $ctf_show。 

$url = $_SERVER['QUERY_STRING'];

获取当前请求的查询字符串(query string),查询字符串是 URL 中位于问号 (?) 之后的部分,通常包含一个或多个参数和值。 

之后对查询字符串采用正则匹配过滤掉了一些符号,符合要求则会将 $_GET 数组中的键值对作为变量导入到当前的符号表中。换句话说,extract($_GET); 会将 URL 查询参数中的每个键值对转换成同名的变量。

最后要求 $ctf_show==='ilove36d' 就会输出 flag。

由于下划线被过滤掉了,我们采用非法字符参数名转换绕过,payload:

?ctf show=ilove36d

原本空格、点都是非法的,中括号也是可行的,但是中括号和点被过滤了,因此这里使用空格。 

2、web128

代码审计:

check($str) 函数检查字符串 $str 是否包含数字或字母,如果包含,返回 false,否则返回 true。

也就是说传入的 f1 不能包含大小写字母和数字。

var_dump(call_user_func(call_user_func($f1,$f2)));

call_user_func 函数:用于调用指定的回调函数,并可以传递参数给该回调函数,第一个参数是被调用的回调函数,其余参数是回调函数的参数。

这里还进行了嵌套:

(1)内层 call_user_func($f1, $f2)

首先调用 $f1 函数,并传递参数 $f2,结果是 $f1($f2) 的返回值。

(2)外层 call_user_func(...)

外层 call_user_func 接收内层调用的返回值作为它的第一个参数,要正确执行,内层返回值应该是一个函数名或可调用的回调,外层 call_user_func 将再次调用这个返回的回调函数,不传递任何额外的参数。

最后,var_dump 将打印出外层 call_user_func 的返回值。

新知识:gettext 函数

php 扩展目录下如果有 php_gettext.dll,就可以用 _() 来代替 gettext() 函数,_() 就是 gettext() 的别名,常常被用来简化代码。

gettext 函数用于在 PHP 应用程序中实现国际化(i18n)和本地化(l10n),说白了就是根据当前语言环境输出翻译后的字符串。

我们测一下 phpinfo,payload:

?f1=_&f2=phpinfo

那么我们如何输出 $flag 呢?

使用 get_defined_vars() 函数,该函数会返回由所有已定义变量所组成的数组,其中肯定就包括了 $flag,payload:

?f1=_&f2=get_defined_vars

拿到 flag:ctfshow{d7ac7aa1-12c0-4813-8671-786cc26a35d1}

3、web129

stripos 函数:查找字符串在另一字符串中第一次出现的位置(不区分大小写)。

用法:stripos(string,find,start)

参数描述
string必需。规定被搜索的字符串。
find必需。规定要查找的字符。
start可选。规定开始搜索的位置。

 代码审计:

如果变量 $f 包含子字符串 'ctfshow',并且位置大于 0,

就会调用 readfile 函数读取文件内容并输出。

看了一下提示,不太清楚这里这个 ctfshow 目录是猜出来的?payload:

?f=/ctfshow/../../../../var/www/html/flag.php

然后又试了一下,穿一层其实就到了根目录:

?f=/ctfshow/../var/www/html/flag.php

查看源码: 

拿到 flag:ctfshow{eeabef32-301f-4abe-a668-69e458e8ef80}

此外还参考了师傅们的其他方法:

(1)利用 filter 伪协议支持多种编码方式,而无效的编码方式就被忽略掉了

payload:

?f=php://filter/convert.iconv.utf8.utf16|ctfshow/resource=flag.php

(2)远程文件包含

错误示范:

这里我直接将文件命名为 ctfshow.php

内容如下,先测一下 phpinfo:

包含解析成功

试了下命令执行:

返回 0,可能位置没对(还试了 /var/www/html/flag.php 也没有成功)

再试一下一句话木马:

执行成功

看了下当前确实是在 html 下,但是无法查看上一层目录的文件

后面才发现,我这里调用的就是我自己服务器上的木马,回显的内容也是我服务器里面的东西,并没有搞到题目环境里面去。

应该将一句话木马写为 txt 后缀:

包含进去了但是调用不成功

还是说不是这样来的,不太会这个,知道怎么来的师傅可以讲解一下,谢谢。

4、web130

晃眼一看是不能匹配到 'ctfshow',仔细一看:+? 这部分是一个非贪婪模式的匹配,匹配任意单个字符(除了换行符),+ 表示匹配前面的字符一次或多次,? 表示尽可能少地匹配字符,避免匹配过多。换句话说只是要求 ctfshow 前面不能有字符。

但是下面 stripos 函数又要求 'ctfshow' 不能出现开头,不过仔细一看,这里是强等于,会先比较类型,stripos 函数如果未发现字符串会返回 FALSE,但是这里是可以找到字符串 ctfshow 的,因此返回字符串第一次出现的位置,尽管 stripos 函数返回 0 ,但是与 FALSE 进行强比较时还是会返回 false,因为 0 表示整数值的零,FALSE 表示布尔值的假,数据类型不同,也就是说 if 语句还是不会成立,走的是输出 flag。

只有弱比较时才是相等的:

payload:

f=ctfshow

拿到 flag:ctfshow{9d0c4a57-e9a2-4d7f-9328-ec30e5508eef}

还可以使用数组绕过:

f[]=111

5、web131

这里既要求 ctfshow 前面不能有字符,但又要求得找到字符串 36Dctfshow。

利用 preg_match 的回溯绕过,回溯次数默认上限是 100 万。

先生成一百万个字符:

<?php// 设置生成字符串的长度
$length = 1000000;// 生成包含一百万个数字 "1" 的字符串
$onesString = str_repeat('1', $length);// 输出结果
echo $onesString;?>

 payload:

f=100万个字符加上36Dctfshow

拿到 flag:ctfshow{cc7a5bff-350e-4f22-863b-e604a2679ecf}

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

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

相关文章

开源防病毒工具--ClamAV

产品文档&#xff1a;简介 - ClamAV 文档 开源地址&#xff1a;Cisco-Talos/clamav&#xff1a;ClamAV - 文档在这里&#xff1a;https://docs.clamav.net (github.com) 一、引言 ClamAV&#xff08;Clam AntiVirus&#xff09;是一个开源的防病毒工具&#xff0c;广泛应用…

【算法专题】归并排序

目录 1. 排序数组 2. 交易逆序对的总数 3. 计算右侧小于当前元素的个数 4. 翻转对 总结 1. 排序数组 912. 排序数组 - 力扣&#xff08;LeetCode&#xff09; 今天我们使用归并排序来对数组进行排序&#xff0c;实际上&#xff0c;归并排序和快速排序是有一定相似之处的&a…

Android View的绘制流程

1.不管是View的添加&#xff0c;还是调用View的刷新方法invalidate()或者requestLayout()&#xff0c;绘制都是从ViewRootImpl的scheduleTraversals()方法开始 void scheduleTraversals() {if (!mTraversalScheduled) {mTraversalScheduled true;mTraversalBarrier mHandler…

Linux中nohup(no hang up)不挂起,用于在系统后台不挂断地运行命令,即使退出终端也不会影响程序的运行。

nohup的英文全称是 no hang up&#xff0c;即“不挂起”。这个命令在Linux或Unix系统中非常有用&#xff0c;主要用于在系统后台不挂断地运行命令&#xff0c;即使退出终端也不会影响程序的运行。默认情况下&#xff08;非重定向时&#xff09;&#xff0c;nohup会将输出写入一…

C++之类与对象(1)

目录 前言 1.类的定义 1.1类定义的格式 1.2访问限定符 1.3类域 1.3.1类定义一个作用域 1.3.2类成员在类的作用域中 1.3.3在类体外定义成员 2.实例化 2.1实例化概念 2.2对象大小 3.this指针 4.选择题补充练习 结束语 前言 Hello&#xff0c;友友们&#xff0c;好久…

Linux安装mysql(超详细版)

步骤1&#xff1a;新建一个文件夹&#xff0c;专放从网络下载的文件 [rootiZ2zeh6vyxsq620zifz8jaZ home]#mkdir soft #在根目录下创建也可以 步骤2&#xff1a;切换目录&#xff0c;进入soft文件中 [rootiZ2zeh6vyxsq620zifz8jaZ /]# cd home/ #若第一步文件建在根目…

牛客周赛 Round 51

目录 A.小红的同余 B.小红的三倍数 C.小红充电 D.小红的gcd E.小红走矩阵 F.小红的数组 这次周赛题目比较简单&#xff0c;算法题也基本上是板子题&#xff0c;出得很好(&#xff5e;&#xffe3;▽&#xffe3;)&#xff5e; A.小红的同余 思路&#xff1a;签到题&am…

Android Studio 不再支持windows 7

Android Studio 一打开就报错&#xff1a; 无法找到入口 无法定位程序输入点 CreateAppContainerProfle 于动态链接库USERENV.dII 上。 截图如下&#xff1a; 经调查&#xff0c;是因为系统版本不兼容。 我目前的电脑环境&#xff1a;windows 7,但是现在的Android Studio要…

24年Hvv准备,6大方向,33篇技战法

进去不少小伙伴后台留言说需要技战法&#xff0c;因此小编对市面上的技战法进行了收集和总结&#xff0c;并对收集来的技战法进行了分类&#xff0c;总共分了6大类&#xff0c;共计33篇&#xff1a; 有需要的小伙伴关注我&#xff0c;点击在看&#xff0c;并私信回复“技战法”…

基于Java的原创歌曲分享平台

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBootMyEclipse 工具&#xff1a;MyEclipse、B/S架构 系统展示 首页 用户注册界面 音乐分享…

【python】OpenCV—Coordinates Sorted Clockwise

文章目录 1、需求介绍2、算法实现3、完整代码 1、需求介绍 调用 opencv 库&#xff0c;绘制轮廓的矩形边框&#xff0c;坐标顺序为右下→左下→左上→右上&#xff0c;我们实现一下转化为熟悉的 左上→右上→右下→左下 形式 按照这样的顺序组织边界框坐标是执行透视转换或匹…

21天学通C++:第十三、十四章节

第十三章&#xff1a;类型转换运算符 类型转换是一种机制&#xff0c;让程序员能够暂时或永久性改变编译器对对象的解释。注意&#xff0c;这并不意味着程序员改变了对象本身&#xff0c;而只是改变了对对象的解释。可改变对象解释方式的运算符称为类型转换运算符。 为何需要…

数据库端口LookUp功能:从数据库中获取并添加数据到XML

本文将为大家介绍如何使用知行之桥EDI系统数据库端口的Lookup功能&#xff0c;从数据库中获取数据&#xff0c;并添加进输入的XML中。 使用场景&#xff1a;期待以输入xml中的值为判断条件从数据库中获取数据&#xff0c;并添加进输入xml中。 例如&#xff1a;接收到包含采购…

简述乐观锁和悲观锁——Java

悲观锁和乐观锁 悲观就是任何事都认为会往坏处发生&#xff0c;乐观就是认为任何事都会往好处发生。 打个比方&#xff0c;假如一个公司里只有一台打印机&#xff0c;如果多个人同时打印文件&#xff0c;可能出现混乱的问题&#xff0c;他的资料打印在了我的资料上&#xff0…

Yolov8网络结构学习

详解YOLOv8网络结构/环境搭建/数据集获取/训练/推理/验证/导出/部署 深入解析YOLOv8&#xff1a;网络结构与推理过程 YOLO? You Know! --YOLOV8详解 一&#xff1a;yolov8总体结构 1.Backbone:它采用了一系列卷积和 反卷积层只来提取特征&#xff0c;同时也使用了残差连接和…

网站开发:使用VScode安装yarn包和运行前端项目

一、首先打开PowerShell-管理员身份运行ISE 输入命令&#xff1a; set-ExecutionPolicy RemoteSigned 选择“全是”&#xff0c;表示允许在本地计算机上运行由本地用户创建的脚本&#xff0c;没有报错就行了 二、接着打开VScode集成终端 输入 npm install -g yarn 再次输入以…

小程序-3(页面导航+页面事件+生命周期+WXS)

目录 1.页面导航 声明式导航 导航到tabBar页面 导航到非tabBar页面 后退导航 编程式导航 后退导航 导航传参 声明式导航传参 编程式导航传参 在onload中接收导航参数 2.页面事件 下拉刷新 停止下拉刷新的效果 ​编辑 上拉触底 配置上拉触底距离 上拉触底的节…

js补环境系列之剖析:原型、原型对象、实例对象三者互相转化(不讲废话、全是干货)

【作者主页】&#xff1a;小鱼神1024 【擅长领域】&#xff1a;JS逆向、小程序逆向、AST还原、验证码突防、Python开发、浏览器插件开发、React前端开发、NestJS后端开发等等 思考下&#xff1a;js补环境中&#xff0c;什么场景会用到原型、原型对象、实例对象&#xff1f; 举…

谈谈大数据采集和常见问题

01 什么是数据采集 数据采集是大数据的基石&#xff0c;不论是现在的互联网公司&#xff0c;物联网公司或者传统的IT公司&#xff0c;每个业务流程环节都会产生大量的数据&#xff0c;同时用户操作的日志也会产生大量的数据&#xff0c;为了将这些结构化和非结构化的数据进行…

docker网络互联

最近学习docker的时候发现多了很多网卡&#xff0c;这些似乎都和docker有关&#xff0c;所以我便往下深入了解了一番&#xff1b; 一、docker网卡 docker 0是安装 docker 的时候生成的虚拟网桥&#xff0c;它在内核层连通了其他物理或者虚拟网卡&#xff0c;这就可以将所…