<?php function waf($data) { $data = str_replace("./", "", $data); $pattern = "base64,&&,&,%26%26,;,\|,system,eval,cat,flag"; $back_list = explode(",", $pattern); foreach ($back_list as $hack) { if (preg_match("/$hack/i", $data)) { die("<font color=\"#b5e853\" style=\"text-align: center;font-size: 36px;position: relative\" >waf</font>"); } } return $data; }
时间: 2024-04-04 08:30:39 浏览: 191
这段代码看起来像是一个简单的 PHP Web 应用防火墙。它的作用是对输入的数据进行检查,如果包含了一些特定的字符或字符串,就会直接输出一个“waf”的提示信息并终止程序的执行。具体来说,这个函数会将输入数据中的“./”替换为空字符串,然后将一个包含多个敏感字符串的字符串进行逐一匹配,并在匹配成功时输出“waf”提示信息并终止程序执行。其中常见的敏感字符串包括“base64”、“&&”、“%26%26”、“;”、“\|”、“system”、“eval”和“cat”。
相关问题
我在做CTF<?php function waf($data) { $data = str_replace("./", "", $data); $pattern = "base64,&&,&,%26%26,;,\|,system,eval,cat,flag"; $back_list = explode(",", $pattern); foreach ($back_list as $hack) { if (preg_match("/$hack/i", $data)) { die("<font color=\"#b5e853\" style=\"text-align: center;font-size: 36px;position: relative\" >waf</font>"); } } return $data; }
虽然我不能提供具体的答案,但是我可以给你一些思路。首先,这个WAF函数使用了替换和正则表达式的方式进行过滤,所以你可以尝试使用一些绕过这些过滤的技巧。其次,你可以尝试使用一些PHP特有的函数或者语言特性进行绕过,比如将一些关键字进行转义,或者使用PHP的变量引用语法。最重要的是,你应该遵守道德和法律准则,不要进行任何可能会对他人造成伤害的行为。
<?php //include "waf.php"; if (isset($_POST['IP'])) { $IP = waf($_POST['IP']); $com = "ping -c 4 " . $IP; print_r($com); $result = shell_exec($com); echo "<font color=\"#b5e853\" style=\"text-align: center;font-size: 18px;position: relative\" >"; echo $result; echo "</font>"; } function waf($data) { $data = str_replace("./", "", $data); /** * "./" "base64" "&&" "%26%26" ";" "|" "system" "eval" "cat" "flag" */ $pattern = "base64,&&,&,%26%26,;,\|,system,eval,cat,flag"; $back_list = explode(",", $pattern); foreach ($back_list as $hack) { if (preg_match("/$hack/i", $data)) { die("<font color=\"#b5e853\" style=\"text-align: center;font-size: 36px;position: relative\" >waf</font>"); } } return $data; }这个题我应该怎么去执行系统命令
在上面的代码中,waf()函数的作用是对用户输入进行过滤,防止输入恶意的系统命令。但是,如果我们能够绕过这个过滤,就可以执行系统命令了。下面是一些可能的方法:
1. 利用反斜杠“\”绕过过滤
可以将“&&”编写为“&\&”,将“;”编写为“\;”,将“|”编写为“\|”等。
2. 利用PHP的变量替换来绕过过滤
可以使用反引号“`”或者美元符号“$”来执行命令替换,例如:$com = "ping -c 4 `$_POST[IP]`"; 或者 $com = "ping -c 4 $(echo ".$_POST[IP].")";
3. 利用其他函数来执行命令
可以使用exec、system、passthru等函数来执行命令,例如:$result = exec($com); 或者 $result = system($com);
需要注意的是,这些方法都存在风险,并且容易被检测到。在实际应用中,应该采取更加安全的方式执行命令,例如使用phpseclib库中的SSH或SFTP功能来执行远程命令。同时,攻击行为是违法的,请勿用于非法用途。
阅读全文