RCE
RCE函数
eval、preg_replace + /e模式、assertJavascript:evalVbscript: Execute、EvalPython:exec
<?php include($_SERVER['DOCUMENT_ROOT'].'/btslab/header.php'); ?> <br/><b>Ping:</b>Please Enter Domain Name or IP Address: <br/><br/> <form action="cmd.php" method="get"> <input type="text" name="host" value=""/> <br/><br/><input type="submit" name="Go" value="Go"/> </form> <br/> <?php if(isset($_GET['host'])) { if(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { $result=shell_exec("ping ".$_GET['host']); } else { $result=shell_exec("ping -c 4 ".$_GET['host']); } echo "<b>Result:</b></br><pre>".$result."</pre>"; } ?> <?php include($_SERVER['DOCUMENT_ROOT'].'/btslab/footer.php'); ?>
防御
防御 1. 尽量少用执行命令的函数或者直接禁用 2. 参数值尽量使用引号包括 3. 在使用动态函数之前,确保使用的函数是指定的函数之一 4. 在进入执行命令的函数/方法之前,对参数进行过滤,对敏感字符进行转义 5. 能使用脚本解决的工作,不要调用其他程序处理。尽量少用执行命令的函数,并在disable_functions中禁用 6. 对于可控点是程序参数的情况下,使用escapeshellcmd函数进行过滤,对于可控点是程序参数值的情况下,使用escapeshellarg函数进行过滤 7. 参数的值尽量使用引号包裹,并在拼接前调用addslashes进行转义 而针对由特定第三方组件引发的漏洞,我们要做的就是及时打补丁,修改安装时的默认配置