搜索

查看: 3074|回复: 11

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

[复制链接]
发表于 2023-5-4 17:04:23 | 显示全部楼层 |阅读模式
Editor 2023-5-4 17:04:23 3074 11 看全部
目录
  • 前言
  • intval()
  • strpos()
  • sha1
  • 数组比较
  • 强类型
  • array_push()
  • 结语
    前言
    上篇文章给大家带来了PHP中最基本的特性,不知道大家学习的怎样了,回顾上文,我们讲了MD5强弱碰撞以及正则匹配的绕过,总体来看还是很简单的,下面给大家带来新的PHP特性讲解,会稍微比上一篇难一些。

    intval()
    上一篇在最后时简单介绍了一下这个函数,我们看看官方是怎样定义的:

    202322108343403.jpg

    202322108343403.jpg


    简单来说就是让输入的数字变成整数,下面我们举个例子:
    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,从而实现了绕过,还有另一种绕过方法:

    202322108343404.jpg

    202322108343404.jpg


    当base为0时,intval会自动进行进制转换,我们可以传入1145的十六进制形式来绕过。

    strpos()

    202322108343405.jpg

    202322108343405.jpg


    根据手册可以看到,该函数以及与其类似的函数,作用都是匹配第一个或者最后一个字符,根据该函数特性,题目会经常围绕它作为一个限制头部的点,比如上面那题可能会增加限制:
    if(!strpos($num, "0")){
            die("no no no!");
    因为八进制开头通常为0,检测到的话就不能通过进制转换来绕过了。

    sha1

    202322108343406.jpg

    202322108343406.jpg


    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()

    202322108343407.jpg

    202322108343407.jpg


    可以理解为向数组尾部插入参数,我们看看是如何考察的:

    可以看到题目先向数组里插入随机数,in_array()是搜索数组中是否存在指定的值,根据它的语法:

    202322108343408.jpg

    202322108343408.jpg


    type会判断类型是否匹配,这就是我们利用的点,因为数组里数据为int型,根据PHP特性比较后字符串会转成int型,也就是说我们传入1.php也是没有问题的,后面有个写入文件操作,正好可以设置一句话木马连接后门,或者进行命令执行:
    get:  n=1.php
    post: content=
    结语
    今天这篇文章可能有的地方不是很好理解,但总体来说还是很简单的,PHP特性很多以至于只能挑出一些著名的来说,更多关于CTF PHP特性函数的资料请关注知鸟论坛其它相关文章!
  • 知鸟论坛永久地址发布页:www.zn60.me
    回复

    使用道具 举报

    发表于 2023-6-28 20:17:17 | 显示全部楼层
    贺老师 2023-6-28 20:17:17 看全部
    感谢楼主的无私分享!要想知鸟论坛好 就靠你我他
    知鸟论坛永久地址发布页:www.zn60.me
    回复

    使用道具 举报

    发表于 2023-6-28 23:01:12 | 显示全部楼层
    dxf17 2023-6-28 23:01:12 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛
    知鸟论坛永久地址发布页:www.zn60.me
    回复

    使用道具 举报

    发表于 2023-6-29 04:49:05 | 显示全部楼层
    123456825 2023-6-29 04:49:05 看全部
    既然你诚信诚意的推荐了,那我就勉为其难的看看吧!知鸟论坛不走平凡路。
    知鸟论坛永久地址发布页:www.zn60.me
    回复

    使用道具 举报

    发表于 2023-6-29 13:43:14 | 显示全部楼层
    无人岛屿颈 2023-6-29 13:43:14 看全部
    楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
    知鸟论坛永久地址发布页:www.zn60.me
    回复

    使用道具 举报

    发表于 2023-6-29 21:35:58 | 显示全部楼层
    尘埃416 2023-6-29 21:35:58 看全部
    这东西我收了!谢谢楼主!知鸟论坛真好!
    知鸟论坛永久地址发布页:www.zn60.me
    回复

    使用道具 举报

    发表于 2023-6-30 00:05:35 | 显示全部楼层
    xinting_6ym 2023-6-30 00:05:35 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    知鸟论坛永久地址发布页:www.zn60.me
    回复

    使用道具 举报

    发表于 2023-6-30 02:58:15 | 显示全部楼层
    胡37 2023-6-30 02:58:15 看全部
    这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
    知鸟论坛永久地址发布页:www.zn60.me
    回复

    使用道具 举报

    发表于 2023-6-30 06:39:45 | 显示全部楼层
    贰十岁装成熟装s 2023-6-30 06:39:45 看全部
    这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
    知鸟论坛永久地址发布页:www.zn60.me
    回复

    使用道具 举报

    发表于 2023-6-30 08:30:38 | 显示全部楼层
    丁侦球 2023-6-30 08:30:38 看全部
    这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
    知鸟论坛永久地址发布页:www.zn60.me
    回复

    使用道具 举报

    • 您可能感兴趣
    点击右侧快捷回复 【请勿灌水】
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    RSS订阅| SiteMap| 小黑屋| 赞兔论坛
    联系邮箱E-mail:zniao@foxmail.com
    快速回复 返回顶部 返回列表