ctf show web入门123

📅 2026/6/15 21:44:12
ctf show web入门123
这是一道典型的 PHP 代码审计与绕过题。核心目标是通过构造特殊的 POST 和 GET 请求绕过极其严格的正则表达式与长度限制最终执行代码并输出 $flag。本来是要通过echoflag来得到flag但是!isset(flag来得到flag但是!isset(flag来得到flag但是!isset(_GET[‘fl0g’]和if($fl0g“flag_give_me”)前后矛盾了最后不能够通过echoflag来解决本题但是还有一个eval()函数我们通过eval()函数来执行我们传入的flag来解决本题但是还有一个eval()函数我们通过eval()函数来执行我们传入的flag来解决本题但是还有一个eval()函数我们通过eval()函数来执行我们传入的c首先我们要满足if(isset($_POST[CTF_SHOW])isset($_POST[CTF_SHOW.COM])!isset($_GET[f10g]))要求CTF_SHOWCTF_SHOW.COM必须存在而fl0g必须不存在注意 PHP 在解析全局变量时会将非法字符如点号 .自动转换为下划线[ 会转换为并且一旦已经进行了一次“非法字符检查”后就不会再进行检查所以后面的.就保留了下来。(类似于双写绕过)在 PHP 中POST 传入 CTF_SHOW.COM1 会被解析为POST[′CTFSHOWCOM′]导致isset(_POST[CTF_SHOW_COM]导致 isset(P​OST[′CTFS​HOWC​OM′]导致isset(_POST[‘CTF_SHOW.COM’]) 失败。绕过方法使用 CTF[SHOW.COM1。PHP 在解析时遇到 [ 会将其转换为 _但随后会停止转换后面的字符。因此 CTF[SHOW.COM 会被解析为 CTF_SHOW.COM然后是正则表达式的限制和对$c参数长度的限制if(!preg_match(/\\\\|\/|\|\|\~|\|\!|\|\#|\%|\^|\*|\-|\|\|\{|\}|\|\|\,|\.|\;|\?/,$c)strlen($c)18)未被过滤的常用符号美圆符号 $、小括号 ()、方括号 []、大于小于号 、冒号、空格eval($c.;);if($fl0gflag_give_me){echo$flag;}当你传入 funecho $flag即 $c 的值为 echo $flag时eval() 实际执行的字符串是echo$flag;所以payload为CTF_SHOW1CTF[SHOW.COM1funecho $flag