我想要一个 grep,其中包含以下每个组中的一个或多个。
“包括,包括一次,执行”
和
“$_GET, $_POST”
因此,该文件必须具有来自两个组的一个或多个。(检查整个目录的 php 文件)
我正在尝试扫描一些 PHP 文件中的漏洞,但我真的很讨厌 grep :(
我建议从简单的命令开始,例如:
grep --color=auto -ER '\$_POST|\$_GET' .
或者
grep --color=auto -ER 'include(_once)+|exec\(|require(_once)+' .
上述命令将为输出中找到的模式着色。注意正则表达式(通过 -E 启用)和递归搜索(通过 -R)。正则表达式的特殊字符通过退格符转义(即 $ char 和 exec 的左括号)
要查看找到的事件的上下文,请使用 grep 的 -C num参数来查看找到的行周围的num行:
grep --color=auto -C 2 -ER '\$_POST|\$_GET' .
如果要在找到的模式出现的行之前或之后输出不同数量的行,也可以使用 -A(fter) 和 -B(efore)。您也可以使用 -n 参数来获取找到的事件的行号。如果您想更花哨,可以将 find 命令与 xargs 和 grep 结合使用,或者使用通过管道连接的多个 grep 命令,但在网络上的教程中有更好的解释。
grep -l
只会列出匹配的文件;然后,您可以将其输出通过管道传输到另一个 grep:
grep -l -e "$_POST" -e "$_GET" * | grep -e "include" -e "include_once" -e "exec"