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://xiahunao.cn/news/3248730.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

js继承之构造函数继承

最近在看js红宝书&#xff0c;学到了继承这一章节&#xff0c;看到了下图这段代码根据自己理解不明白为什么两次实例的colors值不一样 又是自己画图又是查找资料看别人如何理解的&#xff0c;今天才按自己的理解搞明白为啥。可能我的理解也是有偏差错误的&#xff0c;希望佬可以…

爬虫(一)——爬取快手无水印视频

前言 最近对爬虫比较感兴趣&#xff0c;于是浅浅学习了一些关于爬虫的知识。爬虫可以实现很多功能&#xff0c;非常有意思&#xff0c;在这里也分享给大家。由于爬虫能实现的功能太多&#xff0c;而且具体的实现方式也有所不同&#xff0c;所以这里开辟了一个新的系列——爬虫…

“卓越级”!火山引擎边缘云持续推动行业标准与生态建设,获多项权威认可

7月18日&#xff0c;由中国通信标准化协会主办的第四届云边协同大会暨首届分布式算力论坛在北京成功召开&#xff0c;大会聚焦算力多元泛在化发展趋势及“人工智能”前沿探索&#xff0c;围绕行业技术标准、行业前沿实践、行业发展规划等主题方向发布了诸多成果、标杆、计划等。…

ts报错|| Warning: Failed prop type:xxx but its value is `undefined`

场景 分析 可选链(?.) 可选链操作符允许你安全地访问对象的嵌套属性&#xff0c;即使其中间的一个属性可能不存在也不会抛出错误。如果globalAlertDetail是一个对象并且它有isShow属性&#xff0c;那么globalAlertDetail?.isShow会返回该属性的值。如果globalAlertDetail不…

Python机器学习、深度学习技术提升气象、海洋、水文领域实践技术

Python是功能强大、免费、开源&#xff0c;实现面向对象的编程语言&#xff0c;能够在不同操作系统和平台使用&#xff0c;简洁的语法和解释性语言使其成为理想的脚本语言。除了标准库&#xff0c;还有丰富的第三方库&#xff0c;Python在数据处理、科学计算、数学建模、数据挖…

如何使用AI辅助开发

自从踏上AI辅助开发这条不归路&#xff0c;就回不了头&#xff0c;只能勇往直前&#xff01;就算是简单的智能提示、补充代码、自动多语言补全等功能&#xff0c;就已经让你离不开它&#xff0c;更何况强大的代码生成成功。如果还没有开始使用AI辅助开发&#xff0c;那么赶快为…

C++复习的长文指南

C复习的长文指南 一、入门语法知识1.预备1.1 main函数1.2 注释1.3 变量1.3 常量1.4 关键字1.5 标识符明明规则 2. 数据类型2.1 整型2.1.1 sizeof关键字 2.2 实型&#xff08;浮点型&#xff09;2.3 字符型2.4 转义字符2.5 字符串型2.6 布尔类型bool2.7 数据的输入 3. 运算符3.1…

windows 11 PC查询连接过的wlan密码

1:管理员打开cmd 2:输入netsh wlan show profiles 3:netsh wlan show profiles Shw2024-5G keyclear 密码关键内容&#xff1a;12345678

函数返回右值的一点学习研究

https://zhuanlan.zhihu.com/p/511371573?utm_mediumsocial&utm_oi939219201949429760 下面情况下不会调用&#xff1a; DPoint3d fun1() {return DPoint3d{1,2,3}; // 默认构造 }int main() {DPoint3d&& a fun1();a.y 20;int i 0;i; } 下面情况下&#xff0c…

Stable Diffusion:质量高画风清新细节丰富的二次元大模型二次元插图

今天和大家分享一个基于Pony模型训练的二次元模型&#xff1a;二次元插图。关于该模型有4个不同的分支版本。 1.5版本&#xff1a;loar模型&#xff0c;推荐底模型niji-动漫二次元4.5。 xl版本&#xff1a;SDXL模型版本 mix版本&#xff1a;光影减弱&#xff0c;减少SDXL版本…

[职场] MARKETINGSPECIALIST是什么 #笔记#微信#知识分享

MARKETINGSPECIALIST是什么 MARKETINGSPECIALIST&#xff0c;即市场营销专员&#xff0c;他们需要具备一定的专业知识和技能&#xff0c;以适应快速变化的市场环境。接下来&#xff0c;我们将详细探讨这个职位的工作内容、必备技能以及发展前景。 一、MARKETINGSPECIALIST是什么…

Postfix搭建安装教程:解决配置难题攻略!

Postfix搭建安装教程的详解&#xff01;如何优化邮件服务器性能&#xff1f; Postfix是一款广泛使用的电子邮件服务器软件&#xff0c;以其高效、可靠和安全性而闻名。许多企业和个人站点都选择Postfix来处理邮件传输任务。AokSend将提供一个详尽的Postfix搭建安装教程。 Pos…

我在高职教STM32——串口通信(1)

大家好&#xff0c;我是老耿&#xff0c;高职青椒一枚&#xff0c;一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次&#xff0c;同行应该都懂的&#xff0c;老师在课堂上教学几乎是没什么成就感的。正是如此&#xff0c;才有了借助头条平台寻求认同感和成就感…

水利行业的智慧转型之路:分析智慧水利的核心要素与优势,展望其在提升水资源利用效率、保障水安全方面的广阔前景

目录 引言 一、智慧水利的核心要素 1. 物联网技术 2. 大数据与云计算 3. 人工智能与机器学习 4. 移动互联网与GIS技术 5. 标准化与信息安全 二、智慧水利的优势 1. 提高水资源利用效率 2. 增强水灾害防御能力 3. 提升水环境治理水平 4. 促进水利服务智能化 三、展望…

5.6 软件工程-运维

运维 - 系统转换 运维 - 系统维护 运维 - 系统评价 真题

深入理解JVM内存管理:从区域划分到优化策略

JVM内存区域划分有哪些&#xff1f; 堆内存&#xff1a;分为新生代和老年代 新生代&#xff1a;临时对象&#xff0c;所有对象最开始都是年轻代&#xff0c;使用完会被回收或转入老年代 老年代&#xff1a;长期存在的对象 进入老年代的情况&#xff1a; 1.新生代垃圾回收超…

python ATM实现

代码要求&#xff1a; 详细代码&#xff1a; money 50000000 name input("输入您的姓名 &#xff1a;")#查询功能 def search(show_header):if show_header:print("--------查询余额--------")print(f"{name}&#xff0c;您好&#xff0c;您的余额…

模板方法原理与C++实现

定义 定义一个操作中的算法骨架&#xff08;稳定的&#xff09;&#xff0c;而将一些步骤的实现延迟到子类中&#xff08;变化的&#xff09;。模板方法使得子类可以复用一个算法的结构&#xff0c;而只改变&#xff08;重写&#xff09;这个算法的特定步骤。 C实现 class L…

为ppt中的文字配色

文字的颜色来源于ppt不可删去的图像的颜色 从各类搜索网站中搜索ppt如何配色&#xff0c;有如下几点&#xff1a; 1.可以使用对比色&#xff0c;表示强调。 2.可以使用近似色&#xff0c;使得和谐统一。 3.最好一张ppt中&#xff0c;使用的颜色不超过三种主要颜色。 但我想强调…

【细如狗】记录一次使用MySQL的Binlog进行数据回滚的完整流程

文章目录 1 事情起因2 解决思路3 利用binlog进行数据回滚3.1 确认是否启用Binlog日志3.2 确认是否有binlog文件3.3 找到误操作的时间范围3.4 登录MySQL服务器查找binlog文件3.4.1 查询binlog文件路径3.4.2 找到binlog文件3.4.3 确认误操作被存储在哪一份binlog文件中 3.5 查看二…