在测试绕过WAF执行远程代码之前,首先构造一个简单的、易受攻击的远程代码执行脚本,内容如图:
第6行是一个比较明显的命令执行代码,第行尝试拦截system、exec或passthru等函数(PHP中有许多其他函数可以执行系统命令,这三个是最常见的)。
这个脚本部署在CloudflareWAF和ModSecurity+OWASPCRS之后。对于第一个测试,尝试读取passwd的内容;
/cfwaf.php?code=system("cat/etc/passwd");
可以看到,被CloudFlare拦截了,我们可以尝试使用未初始化变量的方式绕过,比如:
cat/etc$u/passwd
CloudflareWAF已被绕过,但是由于脚本检查敏感函数,所以被脚本拦截,那么如何绕过脚本的函数检测呢?我们看看关于字符串的PHP文档: