初期工作
介绍
YxtCMF在线学习系统是一个以thinkphp+bootstrap为框架进行开发的网络学习平台系统。
下载
百度搜索yxtcmf,有很多下载链接,这里就不贴过来了
搭建
将源码放在根目录下,访问有安装向导
(这里一开始用php5.4版本,后面注册用户的时候报错,换成7.0好了)
了解结构
├─admin 后台目录
├─application 应用目录
├─data 缓存目录
├─Expand 存放软件目录
├─plugins 存放插件目录
├─public WEB目录(对外访问目录)
├─themes 前端文件存放目录
├─ueditor ueditor编辑器目录
├─update 更新目录
├─uploads 上传文件目录
├─yxtedu 系统目录
这里特别说一下,我一般接触到前台用户和后台管理员都是分隔在不同表的,此处在同一表下。其实建在一张表中是没问题的,用户和权限分表设计,之后通过用户id进行表间的关联
漏洞
文件上传
前台注册用户后,可以上传头像,黑盒测试发现应该是会对后缀名进行禁用。
好家伙,发现是白名单,只让传这几个后缀,还是比较难利用的
目录遍历
通过seay发现多处直接使用readfile函数,经审计发现此处的$file可以利用
function downmoban(){
$name=htmlspecialchars($_GET['name']);
$dir= dirname(dirname(dirname(dirname(__FILE__))));
$file=$dir.'/Uploads/'.$name;
if(is_file($file)){
$length = filesize($file);
$showname = ltrim(strrchr($file,'/'),'/');
header("Content-Description: File Transfer");
header('Content-Length:' . $length);
if (preg_match('/MSIE/', $_SERVER['HTTP_USER_AGENT'])) {
header('Content-Disposition: attachment; filename="' . rawurlencode($showname) . '"');
} else {
header('Content-Disposition: attachment; filename="' . $showname . '"');
}
readfile($file);
exit;
} else {
exit('文件已被删除!');
}
}
$file由$name拼接而成,而name变量直接由get传参,且未经过任何处理
可以进行任意文件读取
代码写入
网站信息|添加url规则 处可以添加路由,代码本身逻辑没有问题
但是由于插入的代码未作任何过滤直接插入到数据库中,导致任意代码写入漏洞,危害性较大
此处跟进了特别多的函数和方法,就不全程跟进了
先获取到表名
再插入到数据库中
可以看到数据库只在if中进行了数组,包含exp,不为空,过滤非标量数据的判断,一句话代码还是可以写入到路由中
成功连接