PHP特性小总结

本文总结了PHP的一些常见特性,包括md5碰撞、数组处理、弱类型、进制转换在安全问题中的应用,以及extract()、sha1()、trim()等函数的绕过策略。通过实例展示了如何利用这些特性进行安全绕过。

内容不全,后续会持续更新此篇,大多题目来源于ctfshow

目录

最常见的

md5碰撞

数组

弱类型

十六进制/八进制/二进制

e/科学计数法

常用绕过姿势

其他

%0a

三个and连用/三个&

extract()

sha1()

trim()


最常见的

md5碰撞

没啥可说的了,直接看个例子

<?php
$md51 = md5('QNKCDZO');
$a = @$_GET['a'];
$md52 = @md5($a);
if(isset($a)){
if ($a != 'QNKCDZO' && $md51 == $md52) {
    echo "ctf{*****************}";
} else {
    echo "false!!!";
}}
else{echo "please input a";}
?>

直接payload,只要md5加密后为0e开头就可以

?a=240610708

数组

1.intval函数处理后会进行产生错误,空的array返回0,非空的array返回1

em:

include("flag.php");
highlight_file(__FILE__);
​
if(isset($_GET['num'])){
    $num = $_GET['num'];
    if(preg_match("/[0-9]/", $num)){
        die("no no no!");
    }
    if(intval($num)){
        echo $flag;
    }
} 

这里要让我们传入一个get参数num,并且num被禁用的数字,还要让我们为一个数字才会返回flag

这里就可以使用数组,intval处理一个数组对象时,会返回1

?num[]=1

2.md5处理,比较两个值不等,md5值相等时,可以使用数组

em:

include("flag.php");
highlight_file(__FILE__);
if (isset($_POST['a']) and isset($_POST['b'])) {
if ($_POST['a'] != $_POST['b'])
if (md5($_POST['a']) === md5($_POST['b']))
echo $flag;
else
print 'Wrong.';
}
?>

很明显要让a和b不相等,然后md5的值相等,得到flag

?a[]=1&b[]=2

弱类型

首先有三个“=”,然后会进行对比,然后php为弱类型语言

em:

if(isset($_GET['num'])){
    $num = $_GET['num'];
    if($num==="4476"){
        die("no no no!");
    }
    if(intval($num,0)===4476){
        echo $flag;
    }else{
        echo intval($num,0);
    }
}

题目意思就是让我们传入一个get参数num,不能等于4476,然后intval进行截取值要等于44

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值