Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    86372839

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

0x00 前言在之前文章《渗透基础——从lsass.exe进程导出凭据》 介紹了本地導出憑據的方法,而在滲透測試中,經常遇到的情況是需要遠程導出憑據,本文將要介紹遠程導出憑據的思路和方法,記錄細節。

0x01 簡介本文將要介紹以下內容:

思路

實現方法

lsassy介紹

0x02 思路在遠程導出憑據時,需要考慮以下幾點:

(1)需要實現遠程命令執行,關於遠程命令執行,可以參考之前的文章《在远程系统上执行程序的技术整理》

(2)由於保護措施的限制,不同環境需要不同的導出方法

(3)遠程導出lsass進程的dump文件後,通常會選擇將dump文件複製到本地,解析得到口令hash,而有的時候lsass進程的dump文件很大,所以需要考慮傳輸文件的效率

(4)對於多個系統,重複勞動太多,效率不高

綜合以上幾點,我們需要一個方便快捷的方法:支持多種導出方法,能夠直接解析出口令hash,操作自動化以提高效率。

這裡可以使用開源工具Lsassy,地址為:https://github.com/Hackndo/lsassy

0x03 lsassy介紹1.安裝使用安裝命令:

pipinstalllsassy測試命令:

lsassy-uAdministrator-pPassword1192.168.1.1在輸出上,使用termcolor添加了顏色顯示,在默認Windows cmd下無法正常顯示顏色,會導致顯示格式不友好,存在一些亂碼。

為了解決Windows下格式亂碼的問題,可以修改Python \lib\site-packages\lsassy\logger.py,代碼如下:

importlogging

importos

importsys

classLsassyFormatter(logging.Formatter):

def__init__(self):

logging.Formatter.__init__(self,'%(bullet)s%(threadName)s%(message)s',None)

ifos.name=='nt':

self.BLUE,self.WHITE,self.YELLOW,self.RED,self.NC='','','','',''

else:

self.BLUE='\033[1;34m'

self.WHITE='\033[1;37m'

self.YELLOW='\033[1;33m'

self.RED='\033[1;31m'

self.GREEN='\033[1;32m'

self.NC='\033[0m'

defformat(self,record):

ifrecord.levelno==logging.INFO:

record.bullet='[*]{}'.format(self.NC)

elifrecord.levelno==logging.DEBUG:

record.bullet='[*]{}'.format(self.NC)

elifrecord.levelno==logging.WARNING:

record.bullet='[!]{}'.format(self.NC)

elifrecord.levelno==logging.ERROR:

record.bullet='[x]{}'.format(self.NC)

else:

record.bullet='[+]{}'.format(self.NC)

ifrecord.exc_infoandlogging.getLogger().getEffectiveLevel()!=logging.DEBUG:

record.exc_info=None

returnlogging.Formatter.format(self,record)

defhighlight(msg):

returnmsg

definit(quiet=False):

handler=logging.StreamHandler(sys.stdout)

handler.setFormatter(LsassyFormatter())

logging.getLogger().addHandler(handler)

logging.getLogger().setLevel(logging.INFO)

logging.addLevelName(25,'SUCCESS')

setattr(logging,'success',lambdamessage,*args:logging.getLogger()._log(25,message,args))

logging.getLogger().disabled=quiet2.打包成exe這裡可以使用pyinstaller,主程序代碼為https://github.com/Hackndo/lsassy/blob/master/lsassy/console.py

打包成單獨exe的命令:

pyinstaller-Fconsole.py生成console.exe後,在執行時會報錯提示缺少Module

根據輸出提示修改打包命令,添加引用Module:

pyinstaller-Fconsole.py--hidden-importunicrypto.backends.pure.DES--hidden-importunicrypto.backends.pure.TDES--hidden-importunicrypto.backends.pure.AES--hidden-importunicrypto.backends.pure.RC4此時雖然能夠正常啟動console.exe,但是無法運行導出功能。

調試方法:添加參數-vv,能夠看到lsassy.dumpmethod.comsvcs找不到

添加所有依賴包,得到完整的打包命令:

pyinstaller-Fconsole.py--hidden-importunicrypto.backends.pure.DES--hidden-importunicrypto.backends.pure.TDES--hidden-importunicrypto.backends.pure.AES--hidden-importunicrypto.backends.pure.RC4--hidden-importlsassy.dumpmethod.comsvcs--hidden-importlsassy.dumpmethod.comsvcs_stealth--hidden-importls assy.dumpmethod.dllinject--hidden-importlsassy.dumpmethod.dumpert--hidden-importlsassy.dumpmethod.dumpertdll--hidden-importlsassy.dumpmethod.edrsandblast--hidden-importlsassy.dumpmethod.mirrordump--hidden-importlsassy.dumpmethod.mirrordump_embedded--hidden-importlsassy.dumpmethod.nanodump--hidden- importlsassy.dumpmethod.ppldump--hidden-importlsassy.dumpmethod.ppldump_embedded--hidden-importlsassy.dumpmethod.procdump--hidden-importlsassy.dumpmethod.procdump_embedded--hidden-importlsassy.dumpmethod.rdrleakdiag--hidden-importlsassy.dumpmethod.wer--hidden-importlsassy.exec.mmc--hidden-importls assy.exec.smb--hidden-importlsassy.exec.smb_stealth--hidden-importlsassy.exec.task--hidden-importlsassy.exec.wmi--hidden-importlsassy.output.grep_output--hidden-importlsassy.output.json_output--hidden-importlsassy.output.pretty_output--hidden-importlsassy.output.table_output此時生成的console.exe可以正常使用。

3.支持的導出方法(1)comsvcs

使用C:\windows\system32\comsvcs.dll的導出函數MiniDump()獲得lsass進程的dump文件。

細節可參考之前的文章《MiniDumpWriteDump via COM+ Services DLL》 的利用測試。

可直接使用。

(2)comsvcs_stealth

方法類似comsvcs,區別是先將C:\windows\system32\comsvcs.dll複製到c:\windows\temp並重命名,使用新的dll獲得lsass進程的dump文件。

可直接使用。

(3)dllinject

通過dll注入的方式實現

APC注入的方法可參考《通过APC实现Dll注入——绕过Sysmon监控》 。

需要加入參數: -O loader_path=loader.exe,dll_path=inject.dll

(4)dumpert

技術細節:https://github.com/outflanknl/Dumpert

通過API MiniDumpWriteDump()獲得lsass進程的dump文件。

需要加入參數: -O dumpert_path=dumpert.exe

(5)dumpertdll

方法同上,區別是使用dll文件作為參數。

需要加入參數: -O dumpertdll_path=dumpert.dll

(6)edrsandblast

技術細節:https://github.com/wavestone-cdt/EDRSandblast

利用帶有簽名的驅動程序獲得lsass進程的dump文件

需要加入參數: -O edrsandblast_path=EDRSandBlast.exe,RTCore64_path=RTCore64.sys,ntoskrnl_path=NtoskrnlOffsets.csv

(7)mirrordump

技術細節:https://github.com/CCob/MirrorDump

實現流程:

加載一個LSA SSP插件

在插件中洩露lsass.exe的進程句柄

通過API MiniDumpWriteDump()獲得lsass進程的dump文件

需要加入參數: -O mirrordump_path=Mirrordump.exe

(8)mirrordump_embedded

方法同上,不需要Mirrordump.exe作為參數。

需要注意的是mirrordump無法自動清除已註冊的LSA SSP插件,使用該方法後會留下以下痕跡:

LSA SSP插件保存在C:\Windows\System32,名稱為八位隨機字符,後綴名為dll

lsass進程中殘留未卸載的dll

痕跡如下圖

d2d17af8a1c234df1169a5c7b5cc891.png

清除痕蹟的方法:先卸載lsass進程中加載的dll,再刪除dll文件。

關於枚舉和清除LSA SSP插件的細節可參考之前的文章《Mimikatz中SSP的使用》 。

可直接使用。

(9)nanodump

技術細節:https://github.com/helpsystems/nanodump

優點是支持多種方式洩露lsass進程句柄。

需要加入參數: -O nanodump_path=nanodump.exe

(10)ppldump

技術細節:https://github.com/itm4n/PPLdump

支持Win10和Server2019

能夠繞過PPL(Protected Process Light)對lsass進程的保護。

相關細節:

https://itm4n.github.io/lsass-runasppl/

https://blog.scrt.ch/2021/04/22/bypassing-lsa-protection-in-userland/

需要加入參數: -O ppldump_path=PPLdump.exe

(11)ppldump_embedded

方法同上,不需要PPLdump.exe作為參數。

可直接使用。

(12)procdump

通過procdump.exe獲得lsass進程的dump文件。

需要加入參數: -O procdump_path=procdump.exe

(13)procdump_embedded

方法同上,不需要procdump.exe作為參數。

可直接使用。

(14)rdrleakdiag

目標系統需要在c:\windows\system32\下存在文件rdrleakdiag.exe

默認存在的系統:

Windows 10,10.0.15063.0

Windows 8.1,6.3.9600.17415

Windows 8,6.2.9200.16384

Windows7,6.1.7600.16385

Windows Vista,6.0.6001.18000

只能執行一次,再次執行需要重新啟動操作系統。

可直接使用。

(15)wer

技術細節:https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Out-Minidump.ps1

通過Powershell調用API MiniDumpWriteDump()獲得lsass進程的dmp文件。

可直接使用。

0x04 小結本文介紹了遠程從lsass.exe進程導出憑據的思路,逐個介紹Lsassy使用的導出方法,分析技術細節。