powershell-thm

powershell是.net写的,在powershell里可以执行.NET函数。

cmdlet:powershell命令

powershell命令格式通常是 动词-名词 的形式,常见动词如下:

  • Get
  • Start
  • Stop 
  • Read
  • Write
  • New
  • Out

Get-Help显示有关cmdlet 的信息,Get-Help Command-Name获取特定命令的帮助,在后面添加-examples展示示例。

Get-Help Get-Command -Examples


1.cmdlet可以使用通配符*

Get-Command New-* :查看 动词 new 的 所有cmdlet

2.与其他 shell 相比,一个主要区别是 Powershell 将对象传递给下一个cmdlet,而不是将文本或字符串传递给管道之后的命令。与面向对象框架中的每个对象一样,对象将包含方法和属性。

Pipeline( |) 用于将输出从一个cmdlet传递 到另一个 cmdlet

Get-Command | Get-Member -MemberType Method

3.从之前的cmdlet创建对象

操作对象的一种方法是从cmdlet的输出中提取属性并创建新对象。这是使用Select-Object cmdlet 完成的

Get-ChildItem | Select-Object -Property Mode, Name

在PowerShell中,Get-ChildItem cmdlet用于获取指定目录中的子项(文件和文件夹)。而Select-Object cmdlet用于选择对象的属性并将其显示出来。

通过将Get-ChildItem的输出管道传递给Select-Object,我们可以选择要显示的子项的属性。在这个例子中,我们选择了Mode和Name属性。

Mode属性表示子项的访问模式,它描述了文件或文件夹的权限和特性。例如,d表示目录(文件夹),-表示文件。

Name属性表示子项的名称,即文件或文件夹的名称。

通过执行Get-ChildItem | Select-Object -Property Mode, Name命令,我们将获取指定目录中的子项,并只显示每个子项的访问模式和名称。这样可以使结果更加简洁,并且只关注我们感兴趣的属性信息。

其中-operator是以下运算符的列表:

  • -contains:如果属性值中的任何一项与指定值完全匹配
  • -EQ:如果属性值与指定值相同
  • -GT:如果属性值大于指定值

4.过滤对象

检索输出对象时,需要选择与非常特定的值匹配的对象。Where-Object用基于属性值的过滤器来执行此操作。

Verb-Noun | Where-Object -Property PropertyName -operator Value //一般格式

Get-Service | Where-Object -Property Status -eq Stopped :检索已经停止的进程

5.排序对象

使用Verb-Noun | Sort-Object来排序


示例:

1.搜索一个名为test.txt的文件,不知道路径:

Get-ChildItem -Path C:\ -Include *test.txt* -File -Recurse -ErrorAction SilentlyContinue

Get-ChildItem:获取指定目录的文件
-File 只返回文件为不是文件夹
-Recurse 递归查找
-ErrorAction SilentlyContinue 出错时仍然查找,比如遇上access denied不继续运行的时候。

2.系统上安装cmdlet的数量

Get-Command | Where-Object { $_.CommandType -eq “Cmdlet” } | Measure-Object //$_表示当前正在处理的对象

3.查找一个文件的hash值:
Get-FileHash -Path “C:\Program Files\interesting-file.txt.txt” -Algorithm MD5 :-Algorithm 选项指定了要使用的哈希算法

4.获取当前工作目录:
Get-Location

5.查看是否存在某个文件:
Test-Path -Path “C:\Users\Administrator\Documents\Passwords\filename.txt”

6.对某个文件进行base64解密:


枚举:

1.拿到一个window操作系统的shell,可以通过powershell查看一下下面的信息,用于提权或者横向移动或者持久化。

  • 用户
  • 基本网络信息
  • 文件权限
  • 注册表权限
  • 计划任务和运行任务
  • 不安全的文件

1.用户:查看本机存在多少个用户
Get-LocalUser

2.查看sid是哪个用户的
Get-LocalUser -SID “S-1-5-21-1394777289-3961777894-1791813945-501”

3.查看多少个用户的密码所需值设置为false
Get-LocalUser | Where-Object -Property PasswordRequired -Match false

4.查看存在的本地组
Get-LocalGroup | measure

5.查看ip信息
Get-NetIPAddress

6.查看正在监听的端口
GEt-NetTCPConnection | Where-Object -Property State -Match Listen | measure

7.查看监听端口的远程地址
GEt-NetTCPConnection | Where-Object -Property State -Match Listen

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注