一开始拿到目标的站点,主站没找到可以利用的点
进行目标站点使用fofa进行c段查询,随机进行一个访问发现是tp的页面。
找到其后台站点 弱口令登陆成功(但是后台并没有什么功能点无法利用):
目录遍历
这个站点存在一些目录遍历文件
然后就开始疯狂翻文件,看看能不能找到一些有用配置文件信息--
不出意外没有翻到有用的信息,就在此时走投无路没有其他思路的时候,偶然看到了一个公众号发的一篇文章(链接贴在下方):
里面提到KindEditor这个cms存在一个目录遍历漏洞。
漏洞发生在file_manager_json.php,这个文件是用来浏览已经上传的文件的$php_path = dirname(__FILE__) . '/'; ________________________________ $root_path = $php_path . '../attached/'; ________________________________ if (empty($_GET['path'])) { $current_path = realpath($root_path) . '/'; $current_url = $root_url; $current_dir_path = ''; $moveup_dir_path = ''; }
如果不存在attached目录,realpath($root_path)就为空,$current_path就为/也就是系统根目录,那么浏览文件时就可以看到/etc,/tmp,/var等文件夹了。虽然后面有禁止../的防护,但从根目录开始浏览防护就形同虚设了。
回过头看看刚刚tp泄露的目录好像存在着kindeditor这个东西:
构造payload进行遍历,成功找到此站点的备份源码,下载好进行代码审计:
代码审计
class BaseController extends Controller {
public function __construct(){
parent::__construct();
foreach ($_REQUEST as $key => $value) {
$canshu .= $key.'='.$value.'&';
}
$canshu = trim($canshu,'&');
addlog(array('url'=>'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$canshu),'api-'.ACTION_NAME,'接口地址:');
addlog($_REQUEST,'api-'.ACTION_NAME,'接收参数:');
addlog($_FILES,'api-'.ACTION_NAME,'接收文件');
}
function addlog($arr,$name,$description){
error_log ($description.':'.date('Y-m-d H:i:s').'----'.var_export($arr,true).'
',3,"./log/".date('Y-m-d')."-".$name.".php");
}
这里addlog添加路由的log,error_log将错误信息保存到定义的路径文件中,然后log文件又是以php结尾的,那我们构造的payload访问该控制器方法时,加一个不存在的路径 就会将你输入的参数写入文件中,访问文件进行解析。
payload:
payload:/index.php/Api/<a>Base/a?search=<?php phpinfo(); ?>
本地进行测试访问 :
可以看到本地已经生成log文件了,访问此log文件:
成功getshell。
参考链接
https://mp.weixin.qq.com/s/msgPAuZo3u8MTQtBsjRC1g
BY:先知论坛
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论