CISCN2020-easytrick

本文详细介绍了CISCN2020-easytrick的解题过程,涉及Web安全中的PHP代码审计。文章通过五个步骤展示了如何构造payload来绕过if条件。同时,作者总结了PHP中的弱类型比较问题以及单精度浮点数在计算中可能出现的精度损失问题,提醒读者在进行安全审计时注意这些细节。
摘要由CSDN通过智能技术生成

0x01、Web

1.CISCN2020-easytrick

第一步:代码审计

<?php
class trick{			//类:trick
    public $trick1;		//公有属性:$trick1
    public $trick2;		//公有属性:$trick2
    public function __destruct(){	//公有析构方法:当所在类的实例化对象销毁前,自动被调用
        $this->trick1 = (string)$this->trick1;	//把属性$trick1转化为字符型数据
        if(strlen($this->trick1) > 5 || strlen($this->trick2) > 5){	//判断属性$trick1和$trick2的长度是否为大于5
            die("你太长了");										 //若大于,则退出程序,并且返回:“你太长了”
        }
        if($this->trick1 !== $this->trick2 && md5($this->trick1) === md5($this->trick2) && $this->trick1 != $this->trick2){
            echo file_get_contents("/flag");		//若同时满足以上的三个条件,则打印出根目录下的flag
        }
    }
}
highlight_file(__FILE__);							//高亮显示当前页面源码
unserialize($_GET['trick']);						//以GET形式读取trick参数传递的值,并且反序列化

第二步:整理思路

想要打印flag-->就需要满足两个if条件-->想要执行析构方法-->需要存在当前类的实例化对象,那么才会在该脚本结束时候,自动取销毁对象

第三步:想办法绕过第一个if条件

if(strlen($this->trick1) > 5 || strlen($this->trick2) > 5){			//判断属性$trick1和$trick2的长度是否为大于5
            die("你太长了");										 //若大于,则退出程序,并且返回:“你太长了”
}
很明显,想要绕过这个if条件,只要求两个属性的值长度小等于5即可。

第四步:想办法满足第二个if条件

if($
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qwsn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值