php 字符串截取_网络安全WEB之PHP代码审计,攻防世界题目warmup
预备知识:
文件包含相关知识:include 'xxx', 所包含的xxx文件会当作PHP代码执行。
include 'xxx/../123.php'# PHP中默认和 include './xxx/../123.php' 等效
首先这是一个相对路径,相对于当前目录而言
在解析这段路径的时候,首先先检查每一个目录名是否正确,此外,由于 / 的存在,会将xxx当作一个目录,即使这个目录并不存在,而../表示返回上一层目录,所以就是,进入当前目录下的xxx目录再返回上一个目录,结果依然在当前目录,最后在当前目录下寻找123.php。
CMD下
# 寻找123.php..这个目录下的123.php# 在win下这样写直接报错,因为123.php..会被win10系统强制改为123.php# 那么php在找123.php..这个目录的时候,就找不到了include '123.php../123.php'# 寻找上一层目录下的123.php# 这行代码不会报错,即使123.php..这个目录不存在。include '123.php../../../123.php' 相当于 include './132.php../../../123.php'# 123.php..当作一个目录存在# 两个../向上返回两层目录,对于当前目录而言,相当于返回上一层目录,最后寻找123.php,
PHP函数说明:
- in_array ():in_array() 函数搜索数组中是否存在指定的值。
<?php $people = array("Bill", "Steve", "Mark", "David");if (in_array("Mark", $people)) { echo "匹配已找到"; }else { echo "匹配未找到"; }?>
2.mb_substr() : 用于截取字符串的长度。
<?php echo mb_substr("喵喵视角", 0, 2); // 输出:视角//0代表从第零个位置开始,2代表截取的长度为2?>
- mb_strpos():返回要查找的字符串在别一个字符串中首次出现的位置。
<?php $str = 'miaomiaoshijiao';echo mb_strpos($str,'shi');//返回值为8?>
好啦,准备工作欧克了,开始看题目吧:
打开题目是一个猥琐的笑脸
打开F12 ,查看一下元素:
发现
访问一下source.php:
代码部分
public static function checkFile(&$page) { $whitelist = ["source"=>"source.php","hint"=>"hint.php"]; if (! isset($page) || !is_string($page)) { echo "you can't see it"; return false; } if (in_array($page, $whitelist)) { return true; } $_page = mb_substr( //该代码表示截取$page中'?'前部分,若无则截取整个$page $page, 0, mb_strpos($page . '?', '?') ); if (in_array($_page, $whitelist)) { //若$page变量存在于$whitelist数组中 ,返回true return true; } $_page = urldecode($page); $_page = mb_substr( $_page, 0, mb_strpos($_page . '?', '?') ); if (in_array($_page, $whitelist)) { return true; } echo "you can't see it"; return false; }
我们主要看checkFile里的代码:可以看到,定义了白名单,我们访问白名单,发现了flag存在的文件。
然后这个就没用了。
- 第一个if语句对变量进行检验,要求$page为字符串,否则返回false
- 第二个if语句判断$page是否存在于$whitelist数组中,存在则返回true
- 第三个if语句判断截取后的$page是否存在于$whitelist数组中,截取$page中'?'前部分,存在则返回true
- 第四个if语句判断url解码并截取后的$page是否存在于$whitelist中,存在则返回true
若以上四个if语句均未返回值,则返回false
$page = hint.php?../../ffffllllaaaagggg
mb_substr()将截取 $page, 截取内容为 hint.php
$_page = hint.php ,$_page 出现在 whitelist 中, 然后 return true; 执行 include $_REQUEST['file'] 也就是 include 'hint.php?../../ffffllllaaaagggg'
构造:?file=hint.php?../../.../ffffllllaaaagggg (逐次往上一级目录跳转)//需要对?进行二次编码处理。
得到flag
总结:
- cd dasdas/../ 还是在当前目录
- windows下,由于目录不能出现特殊符号,所以对于本题的第三个if ,无法使用, 但是在Linux下,我们可以使用 file=hint.php?/../../../../etc/passwd
运行结果
菜鸡上路,多多关照,如有错误,欢迎指出。
php 字符串截取_网络安全WEB之PHP代码审计,攻防世界题目warmup相关推荐
- mysql 截取字符串部分值,Mysql字符串截取_获取指定字符串中的数据
搜索热词 前言:本人遇到一个需求,需要在MysqL的字段中截取一段字符串中的特定字符,类似于正则表达式的截取,苦于没有合适的方法,百度之后终于找到一个合适的方法:substring_index('ww ...
- js 字符串截取_【js】让你一次性搞清楚slice,substr,substring字符串截取函数
假设 str是个字符串变量,且设置值为"LittleAnn",字符长度是9 那么这三个函数使用方式: var 相同点: start为开始位置下标,end为结束位置下标 下标从0开始 ...
- c语言字符串截取_笔记 | 自学Python 05:数据类型之字符串
字符串,就是一个个字符组成的有序的序列,是字符的集合,在python中通常使用单引号.双引号和三引号引住的字符序列,由数字.字母.下划线组成. 从以下6个方面来了解: ①字符串是不可变的 上一期我们介 ...
- .net mysql字符串截取_【MySQL】字符串截取之SUBSTRING_INDEX和【MySQL】字符串四则运算...
substring_index(str,delim,count) str:要处理的字符串 delim:分隔符 count:计数 例子:str=www.google.com 1.count是正数,那么就 ...
- linux 字符串截取_第13篇:Linux防火墙的日志基本审计
整个Linux日志管理,大体上就分为三个管理区块:日志的采集以及分析.轮转 rsyslog是一个系统的守护进程,绝大部分和操作系统有关的日志,例如系统安全.认证,计划任务等等都由该进程完成. 还有一些 ...
- c语言字符串截取_一文搞懂 C 语言 #、##、__VA_ARGS__
1'#' 和 '##' 属于预处理标记.'#' 和 '##' 用于类似函数的宏定义中(或者简称为宏定义函数).2'__VA_ARGS__' 是 C99 引入的用于支持宏定义函数中使用可变参数. 操作符 ...
- mysql 截取括号内字符串_Mysql字符串截取_获取指定字符串中的数据
前言:本人遇到一个需求,需要在MySql的字段中截取一段字符串中的特定字符,类似于正则表达式的截取,苦于没有合适的方法,百度之后终于找到一个合适的方法:substring_index('www.sql ...
- python3字符串截取_从python3中的字符串中获取特定文本
只是使用 str.split() 和赋值给变量,还有一个默认的第二个参数可以帮助您处理唯一的total/free avail场景 def get_free_memory(ssh_obj, raw=Tr ...
- python控制语句字符串截取_菜鸟python---流程控制语句
用户交互:(输入/输出) input(提示语句!) -- 输入 msg = input("请输入您内容:") int("5") ---> 5 print( ...
最新文章
- 核磁共振影像数据处理-2-DWI实践:计算ADC (MD) map、Li‘s have a solution and plan.
- python矩阵相加_【python矩阵相加怎么做,这可是证明python功能的大好机会】- 环球网校...
- SharePoint服务器修改域和机器名
- Android开发面试题Service之startService和bindService之间的区别
- Redis----windows下的常用命令
- 列表转化成数组_30. 把数组排成最小的数
- WIN10专业版64位21H2正式版19044.1826
- 数据库如何增加表中字段
- 【图像处理】多光谱 波长波段划分 主要波段特性 植被遥感原理 典型植被指数
- 启用共享文件夹服务器,Windows Server 2008 启用公共文件夹共享
- npm -i 与npm install -s与-d的区别
- linux系统安装绿色版mysql
- 华为平板鸿蒙发布,华为新款平板与P50一同发布!有望搭载鸿蒙系统
- Linux中zsh插件,Zsh 常用插件
- Python:strip() 函数
- 安司密信服务器维护,安司密信好用吗?安司密信使用教程[多图]
- 人物介绍的排版【小白进】
- 怎么会有两个“原本”
- 关于计算机方面的知识小故事,「计算机小故事」-奇妙的HelloWorld任务
- 董事会审计委员会职能是什么?
热门文章
- android的应用入口点函数,android 没有main函数,怎么找到程序执行入口呢?以及activity主要生命周期的方法说明...
- 博图wincc连接数据块_西门子博途WINCC 可通过创建画面模板提高编程效率
- 5分绩点转4分_作为一名大学生,如何规划4年大学生活?学姐:建议从这5点做起...
- 20211108 微分跟踪器
- 再说javascript 的__proto__ 和prototype 属性
- sql limit 的用法
- Follow My Logic 1048 PKU
- luogu3233 世界树 (虚树)
- [POJ1155]TELE
- iOS编程——经过UUID和KeyChain来代替Mac地址实现iOS设备的唯一标示(OC版)