PolyShell:一款適用於Bash、Batch、PowerShell的polyglot
摘要:以輸出注入的方式使用該腳本與腳本直接運行的使用方式有一些不同,當以單獨腳本的方式運行時,一旦一種語言已經處理完成,那麼Payload將會立即退出執行。如果不以循環方式運行的話,Payload將會關閉當前終端窗口,並在一個未知窗口中繼續輸入執行。
工具介紹
PolyShell是一款功能強大的polyglot腳本,它可以同時適用於Bash、Windows Bash和PowerShell。
這種特性使得PolyShell成了一滲透測試中一款非常有用的模板,因爲它能夠再無需目標特定的Payload的情況下在大多數目標系統中執行。除此之外,PolyShell還可以使用類似 USB Rubby Ducky 和 MalDuino 這樣的設備並通過輸入注入來進行傳遞和發送。
工具下載
廣大研究人員可以使用下列命令將該項目的源碼克隆至本地:
git clone https://github.com/llamasoft/polyshell.git
如何使用
作爲單獨腳本使用:
1、拷貝/重命名腳本,配置正確的文件擴展名,例如.sh、.bat或.ps1; 2、以Batch文件或PowerShell文件的運行方式來運行腳本;
使用命令注入的方式使用腳本:
1、在目標設備上打開終端窗口; 2、運行Payload; 3、按下Ctrl-C,然後運行“exit”命令;
以輸出注入的方式使用該腳本與腳本直接運行的使用方式有一些不同,當以單獨腳本的方式運行時,一旦一種語言已經處理完成,那麼Payload將會立即退出執行。如果是通過輸入注入的方式運行的話,Payload將會以讀取循環的方式運行。如果不以循環方式運行的話,Payload將會關閉當前終端窗口,並在一個未知窗口中繼續輸入執行。組合鍵Ctrl-C可以讓腳本退出讀取循環,並確保在運行的過程中不會產生任何意外情況。
除此之外,如果直接將腳本代碼粘貼到終端中運行的話,可能會出現運行失敗的情況。當腳本到達讀取循環之處,某些終端會將剩下的粘貼文本當作讀取循環的輸入數據來處理,這就非常好了,但有的終端可能會在讀取循環退出時繼續執行腳本,這就不合適了。
腳本工作機制
當我們嘗試運行指定代碼語言的命令時,該工具會嘗試對命令進行解析,分析因素包括參數引用、重定向和註釋等等。大家可以參考下列這行代碼:
echo \" <<'BATCH_SCRIPT' >/dev/null ">NUL "\" \`" <#"
每一種語言都可以識別echo命令,但不同語言會以不同的方式來解析後續的命令。比如說:
echo \" <<'BATCH_SCRIPT' >/dev/null ">NUL "\" \`" <#" Bash [-----] [---] Batch [-----------------------------] [-] [---] PS [-----------------------------] [-]
工具運行截圖