Windows系统的操作虽然以图形界面为主,但掌握一些运行和cmd命令往往能使工作更加简洁高效,现将平日操作及内网渗透过程中常用到的命令总结如下。
一、运行命令
cmd # 打开cmd shell
\\xxx # 连接ip为xxx的网络共享
control # 控制面版
mstsc # 远程桌面连接
services.msc # 本地服务设置
taskmsg # 任务管理器
eventvwr.msc # 事件(日志)查看器
regedit # 注册表
notepad # 打开记事本
ncpa.cpl # 打开网络连接
nslookup # 域名服务查询
firewall.cpl # Windows防火墙
explorer # 文件资源管理器
gpedit.msc # 组策略编辑
diskmgmt.msc # 打开磁盘管理器
fsmgmt.msc # 共享文件夹管理器
compmgmt.msc # 计算机管理器
二、cmd命令
大多数运行命令都可以放在cmd中执行,反之cmd命令在运行中执行时要用cmd /k <command>
,不然命令执行后cmd窗口会立即关闭。
(命令后加/?
即为帮助文档,具体使用方法无需死记硬背,参考帮助文档即可)
ping # 利用ICMP协议查看网络连接状态
ipconfig # 显示当前ip配置
cd # 目录切换,仅限当前磁盘目录
D: # 切换磁盘目录到D盘
dir # 显示目录内容,不包括隐藏文件
# 可通过通配符找文件,如: dir window*
dir /a # 显示目录中所有内容,包括用attrib隐藏的文件
dir /s /b /l # /s递归显示所有子目录及内容,/b简要显示内容及路径,/l显示小写字母
# 结合 | findstr 可对文件内容进行搜索
dir /r # 显示目录中文件备用数据流
del/erase # 删除文件
rmdir # 删除文件夹
find # 查找字符串,如:find "xxx"
whoami # 查询当前登录的用户名
# 工作组用户显示:计算机名\用户名
# 域内用户显示:域名\用户名
hostname # 查看计算机名(注意与用户名区分开)
type <filename> # 显示文本文件内容
cls # 清屏
set # 查看所有系统环境变量值
set <VAR> # 查看指定的系统环境变量值
# 等同于echo %<VAR>%
systeminfo # 查看系统详细信息,包括处理器、内存、BIOS、网卡等
netstat # 显示当前服务,常与-ano参数以及find命令一同使用,如:netstat -ano | find "445"
# 可用于发现主机
arp -a # 显示ARP缓存中IP-MAC转换列表,与netstat命令相同,都可用于发现主机
route print -4 # 打印IPv4路由表
ftp # 交互使用ftp服务
query user # 等同于quser,查看用户的登录状态
net user # 查看所有计算机用户,net user username,查看用户的详细信息
net view \\<host_ip> # 查看host主机的共享文件(看不到$默认共享)
net use # 查看已经建立的网络共享连接
net use \\<host_ip>\<path> [password] /user:[domain\]<usernamer> # 用账号密码连接host的共享文件,常用如IPC$、C$
net use z: \\<host_ip>\<path> [password] /user:[domain\]<usernamer> # 将远程主机的共享文件映射到本地主机z盘
net user <username> [password] {/add | /delete} # 新建用户并配置密码,删除用户
net user <username> /active:yes # 启用用户(Win7之后系统默认没有启用Administrator、Guest等用户)
net localgroup # 查看本地用户组
net localgroup <groupname> <username> {/add | /delete} # 将用户添加到指定分组(或从指定分组删除)
net localgroup administrators # 查看本地administrators组中的用户,可以看到隐藏的$用户
sc query <service> # 查看已启动服务的状态,注意<service>必须用服务名称,不能用服务的显示名称
# 如查看远程桌面服务状态,服务名称要用"termservice",不能用"Remote Desktop Services"
# 如果不加<service>,则为查看所有已启动服务的状态,这里显示的是服务名称
sc start/stop/delete <service> # 启动/关闭/删除服务,<service>必须用服务名称
sc qc <service> # 查看服务的配置信息,<service>必须用服务名称
sc GetDisplayName <service_keyname> # 通过服务的名称获取其显示名称
sc GetKeyName <service_displayname> # 通过服务的显示名称获取服务名称
net start # 查看已启动服务的显示名称
# 注意与"sc query"命令显示的服务名称区分开
net start/stop <service> # 启动/关闭服务,这里的<service>用服务名称或服务的显示名称都可以
# 启动/关闭windows的文件共享服务:net start/stop server(重启后仍会恢复共享服务,要想彻底停止共享只能修改注册表)
net share # 查看系统共享
net share C$ /del # 删除C$系统默认共享(重启后仍默认共享$会恢复,要想彻底停止共享只能修改注册表)
# C$、D$等此类默认共享只能用Administrator用户访问
net share myShare=C:\Users\... # 新建用户共享(重启后用户个人的共享修改不会恢复)
tasklist # 列出当前运行的进程
tasklist /svc # 列出当前运行的进程及其对应的服务
tasklist /m <module> # 列出当前使用所给 exe/dll 名称的所有任务
# 不指定模块名称则显示所有加载的模块
taskkill # 杀死进程
taskkill /pid <pid1> /pid <pid2> /f /t # 一次性强制删除多个进程及其启动的子进程
taskkill /im <name> # 指定要终止的进程名称,可以与通配符*一起使用
tracert # 将数据包从计算机传递到目标位置的一组IP路由器,以及每个跃点所需的时间(即跟踪数据报传送路径),测试网络连通性问题
> >> # 重定向输出,如:echo nul > xxx,新建xxx文件
< << # 重定向输入,如:cmd < file,使cmd命令从file读入
net accounts # 查看当前主机密码策略
diskpart # 磁盘操作命令,用help可以看到更多指令信息(不能用来查询磁盘序列号)
cacls <filename> # 查看文件的访问控制列表(ACL)
cacls <filename> /G user:perm # 赋予指定用户的perm访问权限,perm可以是R(读取)、W(写入)、C(更改)、F(完全控制)
certutil -hashfile C:\temp.exe MD5 # 计算文件HASH值,用来校验下载文件十分方便
# 支持MD2/MD4/MD5/SHA1/SHA256/SHA384/SHA512
wmic computersystem get Name,Domain # 查看主机名及加入的域
wmic diskdrive get serialnumber,mediatype,model # 查看硬盘类型及序列号
# WMIC(Windows Management Instrumentation Command-line)是在Windows 2003之后默认配置在windows上的的命令行管理工具,可以通过交互和非交互两种方式运行
wmic bios get serialnumber # 查看主机序列号
注:
1.关于查询磁盘序列号的命令
cmd中输入一句指令wmic diskdrive get serialnumber,mediatype,model
就可以搞定,百度上查阅资料基本都是按照diskpart->list disk->select disk 0->detail disk
进行查询,实际上这样查到的磁盘ID是磁盘的GUID分区表标识符或者MBR签名,并不是磁盘序列号。然而这还没有完,win10系统上显示的序列号是正确的,而win7上就变成了每4位HEX字符经过little endian的字符串,比如12345678就会变成34127856,所以要把输出结果再进行一次little endian变换才是真正的磁盘序列号,xp上要把serialnumber
变成signature
才可以查看。对,说了这么多查询序列号还不如用类似diskinfo的第三方软件来的方便。。。
2.关于查询磁盘分区格式的命令
cmd中输入指令diskpart->list disk
,在GPT那一列有*则是GPT分区格式,没有则是MBR分区格式。
(2020.07更新)
1.cmd注册表操作
常用注册表操作reg add/delete/save/query/import/export
,应用如下:
① 获取用户hash
reg save HKLM\SAM sam.hive
reg save HKLM\SYSTEM system.hive
reg save HKLM\SECURITY security.hive
生成hive数据库文件,可以用cain查看,system.hive
和security.hive
中可能会有明文密钥,sam.hive
中保存了hash值。
② 远程桌面配置
# 打开远程桌面
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
# 开启RDP远程桌面服务
net start TermService
# 关闭远程桌面
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 1 /f
# 查看远程桌面端口(十六进制)
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber
# 修改远程桌面端口
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 38389 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp" /v PortNumber /t REG_DWORD /d 38389 /f
# 禁用不允许空密码远程访问
reg add "HKLM\SYSTEM\ControlSet001\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
# /v:要添加的注册表键的名称
# /t:要添加的注册表类型
# /f:覆盖不提醒
# /d:添加的值
③ 关闭系统默认共享
# 注意:以下命令需要重启后生效
# 关闭硬盘各分区(C$/D$/...)共享
reg add "HKLM\SYSTEM\CurrentControlSet\Services\lanmanServer\Parameters" /v AutoShareServer /t REG_DWORD /d 0 /f
# 关闭admin$共享
reg add "HKLM\SYSTEM\CurrentControlSet\Services\lanmanServer\Parameters" /v AutoShareWks /t REG_DWORD /d 0 /f
# 关闭IPC$共享
# IPC$共享关闭后用net share仍能看到,但是不允许匿名空连接,只能使用密码连接
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v restrictanonymous /t REG_DWORD /d 1 /f
# 关闭共享服务
net stop server
④ 开启内存保存明文密码
# server 2012/windows 8之后版本的系统默认不会在内存中保存明文密码
# 可以通过以下命令修改,修改之后需要用户重新登录生效
reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest" /v UseLogonCredential /t REG_DWORD /d 1 /f
⑤ 删除注册表键
# 删除UseLogonCredential键
reg delete "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest" /v UseLogonCredential /f
⑥ 导入/导出注册表
reg import c:\config.reg
reg export HKLM\SYSTEM c:\config.reg
2.cmd查看域信息
注意区分:
- 有
/domain
的命令是请求DC处理执行的,所以必须是域内主机才能执行此类命令,返回的是DC的查询结果,针对域,与在DC上查询是一样的; - 没有
/domain
的命令是在本机执行的,返回的是本机的查询结果,针对本机,与DC上查询的结果是不同的。
net view # 查看当前域中在线主机
net view /domain # 查看当前加入的域
net view /domain:<domain_name> # 查看domain_name域中的计算机
net config workstation # 查看本机加入的域 (Workstation domain) 和当前登录域 (Logon domain)
net accounts /domain # 查看域内密码策略
wmic computersystem get Name,Domain # 查看主机名及当前加入的域
#---------以下命令只能以域成员身份执行---------#
net group /domain # 查看域内所有全局组
net group "Domain Admins" /domain # 查看所有域管理员
net group "Domain Controllers" /domain # 查看所有域控主机
net group "Domain Users" /domain # 查看域内所有用户
net group "Domain Computers" /domain # 查看域内所有主机
net localgroup administrators /domain # 查看DC的本地管理员组
net time /domain # 查看域的当前时间
# 一般由主域控担任时间同步服务器,可以用来初步判断主域控
#---------以下命令只能在DC上执行---------#
netdom query fsmo # 查看FSMO角色,可用来查看架构主控
dsquery computer # 查看目录中的计算机
dsquery subnet # 查看目录中的子网
dsquery group # 查看目录中的组
dsquery ou # 查看目录中的组织单位
dsquery site # 查看目录中的站点
dsquery server # 查看目录中的AD DC/LDS实例
dsquery server –forest –hasfsmo schema # 查看目录中的架构主控
dsquery user # 查看目录中的用户
dsquery * # 查看目录中的所有对象