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

news2024/11/14 20:45:46

目录

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.coloradmin.cn/o/1933977.html

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

相关文章

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

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

机器学习西瓜书笔记(二)

机器学习西瓜书笔记二 第二章(chapter 2) 模型评估与选择 (参考机器学习西瓜书)第一节(section 1)经验误差与过拟合第二节(section 2)评估方法留出法交叉验证法自助法调参与最终模型第三节(section 3)性能度量错误率与精度查准率与查全率ROC与AUC代价敏感错误率与代价…

软件测试之白盒测试与黑盒测试详解

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、软件测试基本分类 一般地&#xff0c;我们将软件测试活动分为以下几类&#xff1a;黑盒测试…

【BUG】已解决:IndexError: list index out of range

已解决&#xff1a;IndexError: list index out of range 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城市开发者社区主…

NFS存储、API资源对象StorageClass、Ceph存储-搭建ceph集群和Ceph存储-在k8s里使用ceph(2024-07-16)

一、NFS存储 注意&#xff1a;在做本章节示例时&#xff0c;需要拿单独一台机器来部署NFS&#xff0c;具体步骤略。NFS作为常用的网络文件系统&#xff0c;在多机之间共享文件的场景下用途广泛&#xff0c;毕竟NFS配置方 便&#xff0c;而且稳定可靠。NFS同样也有一些缺点&…

TaD+RAG-缓解大模型“幻觉”的组合新疗法

TaD&#xff1a;任务感知解码技术&#xff08;Task-aware Decoding&#xff0c;简称TaD&#xff09;&#xff0c;京东联合清华大学针对大语言模型幻觉问题提出的一项技术&#xff0c;成果收录于IJCAI2024。 RAG&#xff1a;检索增强生成技术&#xff08;Retrieval-augmented G…

《昇思25天学习打卡营第25天|第14天》

今天是打卡的第十四天&#xff0c;今天学习的是应用实践中的热门LLM及其他AI应用的K近邻算法实现红酒分类篇。这一片主要介绍使用MindSpore在部分wine数据集上进行KNN实验&#xff0c;对实验的步骤的介绍&#xff1a;K近邻算法原理介绍&#xff08;分类问题、回归问题和距离的定…

电商库存API设计与实现详解

库存管理在电商运营中非常重要&#xff0c;因为这影响到电商交易是否能够顺利进行。很多从线下零售发展到电商渠道的朋友了解到了电商库存接口能够高效管理库存&#xff0c;但不知道自己想要应用的场景是否仅通过电商库存接口就能实现&#xff0c;那不妨先了解一下电商库存接口…

最新开源的PDF版面分析工具 PDF-Extract-Kit

最近有一个新开源的版面分析的模型&#xff0c;做PDF版面分析效果非常好。而且对公式的解析效果比较好。虽然现在star数量不高&#xff0c;但是绝对会涨起来的。我们调研对比过很多开源的工具&#xff0c;效果都强差人意&#xff0c;这个是我看到的最满意的一个。甚至要比我们生…

牛客TOP101:判断链表中是否有环

文章目录 1. 题目描述2. 解题思路3. 代码思路 1. 题目描述 2. 解题思路 快慢指针&#xff0c;原理就是快指针一次走两步&#xff0c;慢指针一次走一步&#xff0c;快指针会先进入到环中进行循环&#xff0c;慢指针后进行。以相对来看&#xff0c;快指针是比慢指针多走一步&…

构建自定义bootos

1 构建自定义bootos BootOS (也称 ramos ),是一个基于内存的操作系统,系统启动后全部加载到内存中运行,不依赖磁盘存储设备,因此可以对硬件层级进行一系列的操作。主要分为两部分内核和文件系统。 1.1 构建vmlinuz内核文件 1.1.1 从现有系统获取 从系统iso镜像获…

使用Python Turtle绘制圣诞树和装饰

简介(❤ ω ❤) 在这篇文章中&#xff0c;我们将探索如何使用Python的Turtle模块来绘制一个充满节日气氛的圣诞树&#xff0c;以及一些可爱的装饰品。Turtle是一个受Logo语言启发的图形库&#xff0c;非常适合初学者学习编程和创建图形。 码农不是吗喽&#xff08;大学生版&…

VulnHub:CK00

靶场搭建 靶机下载地址&#xff1a;CK: 00 ~ VulnHub 下载后&#xff0c;在vmware中打开靶机。 修改网络配置为NAT 处理器修改为2 启动靶机 靶机ip扫描不到的解决办法 靶机开机时一直按shift或者esc直到进入GRUB界面。 按e进入编辑模式&#xff0c;找到ro&#xff0c;修…

Linux(CentOS7)离线安装Redis6

版本 CentOS-7、redis-6 1、下载redis离线包 下载地址&#xff1a;http://download.redis.io/releases/ 2、选择安装包 redis-6.2.5.tar.gz 3、上传安装包至服务器 cd /usr/local/redis #进入目录&#xff0c;没有redis目录则自行创建 tar -zxvf redis-6.2.5.tar.gz #…

拓扑排序(练习题)

文章目录 拓扑排序[P1113 杂务](https://www.luogu.com.cn/problem/P1113)题目描述输入格式输出格式代码&#xff08;BFS&#xff09; [P4017 最大食物链计数](https://www.luogu.com.cn/problem/P4017)题目描述输入格式输出格式代码&#xff08;BFS&#xff09;代码&#xff0…

Python实战MySQL之数据库操作全流程详解

概要 MySQL是一种广泛使用的关系型数据库管理系统,Python可以通过多种方式与MySQL进行交互。本文将详细介绍如何使用Python操作MySQL数据库,包括安装必要的库、连接数据库、执行基本的CRUD(创建、读取、更新、删除)操作,并包含具体的示例代码,帮助全面掌握这一过程。 准…

基于天地图使用Leaflet.js进行WebGIS开发实战

目录 前言 一、天地图的key 1、创建应用 2、调用限制策略 注&#xff1a; &#xff08;1&#xff09;日服务调用超量会暂时拒绝访问&#xff0c;次日自动开启&#xff1b; &#xff08;2&#xff09;如果服务调用过程中存在数据爬取或者下载行为&#xff0c;服务调用会被自…

UE4-系统默认天空球的使用

当我们在调整平行光的时候&#xff0c;会发现场景中的光照改变了&#xff0c;但是太阳的位置并没有改变&#xff0c;此时就需要用到系统默认的天空球中的&#xff1a; 但是只有在选中是由平行光的改变而改变的情况下才会发生改变&#xff0c;如果没有选择或者选择其他的光源&am…

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

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

MySQL(6)内置函数,复合查询.

目录 1.内置函数; 2.复合查询; 1.内置函数: 1.1 日期函数: 时分秒: 时间戳: 基本日期上加日期: 基本日期减去日期: 日期相差天数: &#x1f330; 创建一张表&#xff0c;记录生日: 创建一个留言表: 显示所有留言信息&#xff0c;发布日期只显示日期&#xff0c;不用显示时间: …