2016 年左右的时候读过这本书,当时太浮躁了没有读完。最近在学习内网安全,CMD 命令属于基本功了,所以就打算重新来阅读这本书,尝试读完并做一份摘要笔记。

书籍简介

img

作者: 至诚文化
出版社: 中国铁道
出版年: 2011-9
页数: 309
定价: 45.00元
ISBN: 9787113130497

第 1 章 黑客!黑客!

感觉有点水,这一章直接略过,可能当初没有入门的时候看这个会比较激动,物是人非事事休,欲语泪先流。

第 2 章 系统管理命令

2.1 命令行基础

认识 Windows 的命令行

Linux 基本上都是使用 shell 进行系统交互的,因为 Windows 的图形化界面比较强大,导致很多人就不怎么重视 CMD 命令行操作,实际上命令行操作的效率是很高的,在实战中黑客接触最多的还是命令行、

从 Windows Vista SP1 开始,Windows 开始内置更强大的 Windows Powershell 本书第 6 章也会去详细介绍。

DOSkey 常用快捷键:

  • Delete: 删除广告后的字符
  • Home\End: 移动光标到命令行的开头和结尾
  • Insert: 在插入和改写状态切换
  • ↑/↓: 调用最近输入过的命令

2.1.2 启动命令行窗口

Windows 2000 操作系统:C:\winnt\system\cmd.exe

Window XP +: C:\Windows\system32\cmd.exe

2.1.3 Windows 命令行的快捷操作

擅用 Tab 键进行补全,还有一些快捷键,不过国光感觉并没有必要记住这些快捷键,这里就不再赘述。

2.2 关机命令

关机命令,使用场景不多,但是还是要记住:

# 调用图形界面关机
λ shutdown -i

# 注销计算机
λ shutdown -l

# 关闭计算机
λ shutdown -s

# 重启计算机
λ shutdown -r

# 取消关机操作
λ shutdown -a

# 3 秒后关机 并提示 -c 输出的信息
λ shutdown -s -t 3 -c "温度过高 关机避免爆炸"

# 在指定时间关机 并 倒计时 10 秒
λ at 12:45 shutdown -s -t 10

配合 net use 进行远程关机也是可以的:

# 建立 IPC$ 连接
λ net use \\192.168.8.5 "P@ssw0rd" /user:administrator

# 查看连接情况
λ net use

# 远程关机
λ shutdown -s -m \\192.168.8.5

2.3 文件管理命令

2.3.1 dir 与 tree 命令

查看磁盘里的文件及文件夹,可以使用 dir 和 tree 命令完成,其中 dir 命令提供了各种完善的查询功能。而 tree 命令的功能及单一:图形方式显示文件夹的结构。

  1. dir 命令说明

查看 Desktop 文件夹的内容,按照从大到小的顺序排列显示:

C:\Users\testuser>dir Desktop/o-s
 驱动器 C 中的卷没有标签。
 卷的序列号是 4C7D-77FC

C:\Users\testuser\Desktop 的目录

2020/06/02  21:56                30 t.txt
2020/06/02  21:54                 9 test.txt
2020/06/02  15:21    <DIR>          MobaXterm_Portable_v20.2
2020/06/02  21:56    <DIR>          ..
2020/06/02  21:56    <DIR>          .
               2 个文件             39 字节
               3 个目录 32,518,381,568 可用字节

这本书上这里也没有提供啥高级命令,有点失望…

  1. tree 命令说明

/f 显示所有文件夹照片那个的文件名称,这个看上去比较实用:

C:\Users\testuser\Desktop>tree
文件夹 PATH 列表
卷序列号为 00000200 4C7D:77FC
C:.
└─MobaXterm_Portable_v20.2

C:\Users\testuser\Desktop>tree /f
文件夹 PATH 列表
卷序列号为 00000200 4C7D:77FC
C:.
│  t.txt
│  test.txt
│
└─MobaXterm_Portable_v20.2
        CygUtils.plugin
        MobaXterm backup.zip
        MobaXterm.ini
        MobaXterm_Personal_20.2.exe

2.3.2 attrib 命令

用于修改文件夹及文件的属性。文件的属性主要有:存档、只读、隐藏和系统。

λ attrib /?
显示或更改文件属性。

ATTRIB [+R | -R] [+A | -A ] [+S | -S] [+H | -H] [+I | -I]
       [drive:][path][filename] [/S [/D] [/L]]
  + 设置属性。
  - 清除属性。
  R 只读文件属性。
  A 存档文件属性。
  S 系统文件属性。
  H 隐藏文件属性。
  I 无内容索引文件属性。
  [drive:][path][filename]
      指定 attrib 要处理的文件。
  /S 处理当前文件夹及其所有子文件夹中的匹配文件。
  /D 也处理文件夹。
  /L 处理符号链接和符号链接目标的属性。

国光感觉只有隐藏文件功能可能比较实用,下面就单独演示一下吧:

# 查看当前目录下信息
C:\Users\testuser\Desktop>dir
 驱动器 C 中的卷没有标签。
 卷的序列号是 4C7D-77FC

C:\Users\testuser\Desktop 的目录

2020/06/02  21:56    <DIR>          .
2020/06/02  21:56    <DIR>          ..
2020/06/02  15:21    <DIR>          MobaXterm_Portable_v20.2
2020/06/02  21:56                30 t.txt
2020/06/02  21:54                 9 test.txt
               2 个文件             39 字节
               3 个目录 32,518,381,568 可用字节

# 查看该目录下的文件属性
C:\Users\testuser\Desktop>attrib
A  SH        C:\Users\testuser\Desktop\desktop.ini
A            C:\Users\testuser\Desktop\t.txt
A            C:\Users\testuser\Desktop\test.txt

# 将 t.txt 给隐藏起来 并 查看
C:\Users\testuser\Desktop>attrib +H t.txt

# 此时 dir 命令就无法查看了
C:\Users\testuser\Desktop>dir
 驱动器 C 中的卷没有标签。
 卷的序列号是 4C7D-77FC

C:\Users\testuser\Desktop 的目录

2020/06/02  21:56    <DIR>          .
2020/06/02  21:56    <DIR>          ..
2020/06/02  15:21    <DIR>          MobaXterm_Portable_v20.2
2020/06/02  21:54                 9 test.txt
               1 个文件              9 字节
               3 个目录 32,518,381,568 可用字节

# 但是 attrib 依然可以正常发现
C:\Users\testuser\Desktop>attrib
A  SH        C:\Users\testuser\Desktop\desktop.ini
A   H        C:\Users\testuser\Desktop\t.txt
A            C:\Users\testuser\Desktop\test.txt

# 取消文件隐藏属性 并 查看
C:\Users\testuser\Desktop>attrib -H t.txt

C:\Users\testuser\Desktop>dir
 驱动器 C 中的卷没有标签。
 卷的序列号是 4C7D-77FC

C:\Users\testuser\Desktop 的目录

2020/06/02  21:56    <DIR>          .
2020/06/02  21:56    <DIR>          ..
2020/06/02  15:21    <DIR>          MobaXterm_Portable_v20.2
2020/06/02  21:56                30 t.txt
2020/06/02  21:54                 9 test.txt
               2 个文件             39 字节
               3 个目录 32,518,381,568 可用字节

隐藏文件夹的话需要使用 /S 与 /D 命令

C:\Users\testuser\Desktop>attrib +H MobaXterm_Portable_v20.2 /S /D

C:\Users\testuser\Desktop>dir
 驱动器 C 中的卷没有标签。
 卷的序列号是 4C7D-77FC

 C:\Users\testuser\Desktop 的目录

2020/06/02  21:56    <DIR>          .
2020/06/02  21:56    <DIR>          ..
2020/06/02  21:56                30 t.txt
2020/06/02  21:54                 9 test.txt
               2 个文件             39 字节
               2 个目录 32,518,381,568 可用字节

2.3.3 copy 与 move 命令

copy 复制文件;move 移动文件,使用频率都比较高。

copy 命令不能复制子目录及目录下的文件,如果要复制包含子目录的目录,需要使用 xcopy 命令。

  1. copy 命令
# 日常操作
λ copy c:\test\old\readme.txt c:\test\new

# 将 old 文件夹中的所有文件 复制到 new 文件夹内
λ copy c:\test\old\ c:\test\new

# 复制所有以 k 字母开头的文件到 new 文件夹内
λ copy c:\test\old\k*.* c:\test\new
  1. move 命令
# 日常操作
λ move c:\test\old\readme.txt c:\test\new

# a 重命名为 b
λ move a b

2.3.4 xcopy 命令

由于 copy 命令不能复制子目录及子目录下的文件,而且可用的参数较少,因此实战中常常使用更高级的 xcopy 命令:

# old 目录下全部文件复制到 new 目录下 包括子目录和隐藏文件
λ xcopy c:\test\old\readme.txt c:\test\new /E /H

不复制文件名带有 key 及 note 字符的文件,首先在 c:\test 目录下建一个名为 un 的文本文档,内容为:

key
note

然后使用如下命令完成需求操作:

λ xcopy c:\test\old\readme.txt c:\test\new /exclude:c:\test\un.txt

2.3.5 rename 命令

重命名文件的命令,通常还可以简写为 ren

# a 重命名为 b
λ rename a b

好吧,书上居然只给了这样一个案例,有点失望,继续看下去吧,看看会不会看到有帮助的命令。

2.3.6 del 命令

删除文件命令,也比较常用。

# 删除 old 目录下所有文件及子文件夹里的文件
λ del /F /S C:\test\old

在删除每一个文件夹之前,系统都会弹出提示信息,只要输入 y 确认即可。

2.4 目录管理命令

2.4.1 cd 命令

cd 命令用于显示当前的目录名及切换目录。

一般得这样操作:

C:\Users\testuser>cd ../
C:\Users>cd testuser
C:\Users\testuser>Z:
Z:\>cd test
Z:\test>

得先手动到当前盘,才可以再进行操作,但是其中使用 /D 参数可以直接切换驱动器,正常从当前盘跳转到其他盘:

C:\Users\testuser>cd /D Z:\test
Z:\test>

2.4.2 md 与 rd 命令

md/mkdir 命令用于创建目录,而 rd/rmdir 命令用户删除目录。

  1. md 命令
# 创建 work 文件夹
λ md C:\test\old\work
  1. rd 命令
# 移除 old 目录 且包括所有子目录及文件
λ rd /S C:\test\old

输入 y 确认删除操作

2.4.3 subst 命令

subst 命令的功能是将一个目录映射为虚拟的驱动器,用户可以像访问驱动器那样访问该目录。

# 将 C:\Users 映射为 E 盘
λ subst E: C:\Users

# 将 C 盘映射为 F 盘
λ subst F: C:\

不知道这样操作的意义是啥,可以输入 subst 目录查询磁盘映射信息:

# 查询所有磁盘映射信息
C:\Users\testuser>subst
E:\: => C:\Users
F:\: => C:\

# 删除磁盘映射
C:\Users\testuser>subst E: /d
C:\Users\testuser>subst F: /d
C:\Users\testuser>subst
C:\Users\testuser>

2.5 磁盘管理命令

磁盘管理命令黑客基本上不会使用,除非删除跑路的黑客会用,一般系统安装的大佬可能会用到,这一节国光就不闲的蛋疼演示了,直接跳过本章节吧。

2.6 进程管理命令

无论是黑客还是系统安全人员,都应熟练掌握进程管理命令。在 Windows 系统中,常用的进程管理命令主要有 tasklist 和 taskkill 两个命令。

2.6.1 tasklist 命令

tasllist 命令用于查询进程列表,该命令即可用于本机也可用于远程计算机。

默认显示的结果包括:映像名称、PID、会话名称、会话、内存使用

λ tasklist

映像名称                       PID 会话名              会话        内存使用
========================= ======== ================ =========== ============
System Idle Process              0 Services                   0         24 K
System                           4 Services                   0        368 K
smss.exe                       252 Services                   0      1,080 K
csrss.exe                      348 Services                   0      6,044 K
wininit.exe                    384 Services                   0      5,080 K
services.exe                   492 Services                   0     10,408 K
lsass.exe                      508 Services                   0     12,424 K
lsm.exe                        516 Services                   0      6,148 K
...

同样也是可以查看远程计算机的进程的,使用 /S /U /P 参数即可:

λ tasklist /S 192.168.8.5 /U administrator /P P@ssw0rd

映像名称                       PID 会话名              会话        内存使用
========================= ======== ================ =========== ============
System Idle Process              0                            0         24 K
System                           4                            0        368 K
smss.exe                       252                            0      1,072 K
csrss.exe                      344                            0      5,132 K
wininit.exe                    392                            0      4,840 K
csrss.exe                      412                            1     14,208 K
winlogon.exe                   464                            1      5,688 K
services.exe                   500                            0     11,336 K
lsass.exe                      516                            0     12,356 K
lsm.exe                        524                            0      4,200 K
svchost.exe                    700                            0      7,728 K
...

加载远程计算机进程的命令会有延迟,如果要查看哪些进程调用了 ntdll.dll 模块,可以使用 /M 参数:

λ tasklist /M ntdll.dll

映像名称                       PID 模块
========================= ======== ============================================
taskhost.exe                  1612 ntdll.dll
dwm.exe                       1124 ntdll.dll
explorer.exe                  2428 ntdll.dll
prl_cc.exe                    3000 ntdll.dll
MobaXterm_Personal_20.2.e     2368 ntdll.dll
MoTTY.exe                     2396 ntdll.dll
cygtermd.exe                  2148 ntdll.dll
conhost.exe                   2672 ntdll.dll
conin.exe                     1448 ntdll.dll
winpty-agent.exe               296 ntdll.dll
conhost.exe                   1512 ntdll.dll
cmd.exe                       1844 ntdll.dll
XWin_MobaX.exe                2212 ntdll.dll
tasklist.exe                  2388 ntdll.dll

2.6.2 taskkill 命令

tasklill 命令的作用是终止正在运行的进程。看用法说明理论上也是支持远程计算机的。

TASKKILL [/S system [/U username [/P [password]]]]
         { [/FI filter] [/PID processid | /IM imagename] } [/T] [/F]

描述:
    使用该工具按照进程 ID (PID) 或映像名称终止任务。

参数列表:
    /S    system           指定要连接的远程系统。
    /U    [domain\]user    指定应该在哪个用户上下文执行这个命令。
    /P    [password]       为提供的用户上下文指定密码。如果忽略,提示
                           输入。
    /FI   filter           应用筛选器以选择一组任务。
                           允许使用 "*"。例如,映像名称 eq acme*
    /PID  processid        指定要终止的进程的 PID。
                           使用 TaskList 取得 PID。
    /IM   imagename        指定要终止的进程的映像名称。通配符 '*'可用来
                           指定所有任务或映像名称。
    /T                     终止指定的进程和由它启用的子进程。
    /F                     指定强制终止进程。

下面分别来简单测试一下本地和远程的效果:

# 查询文件管理器的进程 PID 为 2482
λ tasklist |find "explorer"
explorer.exe                  2428 Console                    2     41,992 K

# 强制杀掉文件管理器进程
taskkill /F /PID 2428
成功: 已终止 PID 为 2428 的进程

# 查询远程计算机的 文件管理器的进程
λ tasklist /S 192.168.8.5 /U administrator /P P@ssw0rd |findstr explorer
explorer.exe                  2152                            1     26,288 K

# 杀掉远程计算机的桌面进程
λ taskkill /F /PID 2152 /S 192.168.8.5 /U administrator /P P@ssw0rd
成功: 已终止 PID 为 2152 的进程

2.7 服务器管理命令

Windows 许多功能都是以服务的形式存在,例如 Themes 服务为用户提供主题管理…

用户可以通过服务管理命令 sc 对各个服务进行管理。

# 查询本机所有类型的服务
λ sc query
λ sc query type= all

# 查询某个服务的详细描述
λ sc qdescription W32Time
[SC] QueryServiceConfig2 成功

SERVICE_NAME: W32Time
描述:  维护在网络上的所有客户端和服务器的时间和日期同步。如果此服务被停止,时间和日期的同步将不可用。如果此服务被禁用,任何明确依赖它的服务都将不能启动。

# 启动服务
λ sc start dhcp
SERVICE_NAME: dhcp
        TYPE               : 20  WIN32_SHARE_PROCESS
        STATE              : 2  START_PENDING
                                (NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x7d0
        PID                : 804
        FLAGS              :
# 停止服务
λ sc stop dhcp
SERVICE_NAME: dhcp
        TYPE               : 20  WIN32_SHARE_PROCESS
        STATE              : 3  STOP_PENDING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x1
        WAIT_HINT          : 0x0

sc 命令还可以创建服务,用于方便管理。需要注意的是,只有针对服务编写的程序才能成功创建服务,而非服务程序创建服务后,一旦启动就会出现类似 ”错误1053: 服务没有及时响应启动或控制请求“的错误提示。对于非服务类程序,如果一定要创建系统服务的话,可以借助 Windows 2003 Resource Kits 工具包提供的 instrv.exe 和 srvany.exe 关于这两个程序的适用方法,建议有兴趣的读者查找相关的技术资料。 挖个坑,感觉这个可能有用,得后面考虑单独研究看看。

例如要把本机 F:\log.exe 程序创建成服务,服务名为 wlog,该服务使用默认的启动方式,并且不需要依赖于其他服务运行,则执行:

λ sc create wlog binpath= F:\log.exe

[SC] CreateService 成功

如果用户需要删除某项服务,可以通过 sc delete 命令来完成:

λ sc delete wlog

[SC] DeleteService 成功

2.8 账户及组管理命令

Windows 账户及组的管理分别通过 net user 命令和 net localgroup 命令来完成。

2.8.1 net user 命令

net user 命令可以完成新增、删除、激活、停用账户等操作,以及修改密码、列举所有用户的账户等。

此命令的语法是:

NET USER
[username [password | *] [options]] [/DOMAIN]
         username {password | *} /ADD [options] [/DOMAIN]
         username [/DELETE] [/DOMAIN]
         username [/TIMES:{times | ALL}]

参数说明:

username: # 要操作的用户账户名
password: # 为账户设置或更改的密码。输入 * 将显示交互提示信息
/DOMAIN:  # 在计算机主域的域控制器上执行操作
/ADD:     # 增加
/DELETE:  # 删除

options:                 # 命令行选项,可用的语法如下所示:
- /active:{no|yes}:      # 启用或禁用账户
- /comment:"Text":       # 提供关于用户账户的描述性注释
- /countrycode:NNN:      # 使用操作系统国家地区代码 值 0 表示默认的国家地区代码
  - /expires:{{MM/DD/YYYY|never}}:  # 设置账户过期的时期
  - /fullname:"Name":      # 指定用户的全名而不是用户名
  - /homedir:Path:         # 为用户的主目录设置路径
  - /passwordchg:{yes/no}: # 指定用户是否可以更改其密码,默认是 yes
  - /passwordreq:{yes/no}: # 指定用户账户是否必须具有密码。默认是 yes
  - /profilepatth:[Path]:  # 为用户登录配置文件设置路径,该路径指向注册表配置文件
  - /scriptpath:Path:      # 为用户登录脚本设置路径。Path 不能是绝对路径
  - /times:{...}:          # 允许用户使用该计算机的此时,这里太冷门了,用到再补充

2.8.2 net localgroup 命令

Windows 的账户权限管咯是通过组来实现的,例如要赋予某账户权限,只需将其添加到 Administrators 组即可。

此命令的语法是:

NET LOCALGROUP
[groupname [/COMMENT:"text"]] [/DOMAIN]
              groupname {/ADD [/COMMENT:"text"] | /DELETE}  [/DOMAIN]
              groupname name [...] {/ADD | /DELETE} [/DOMAIN]

参数说明:

groupname: # 要查看、添加、删除的组名
/COMMENT:"Text" # 为组添加描述信息
/DOMAIN: # 在计算机主域的域控制器上执行操作
name # 要添加或删除的用户名
/ADD # 将组名或用户名添加到本地组中
/DELETE # 从本地组中删除组名或用户名

书中给的案例太简单了,下面是国光贴一个自己常用的命令合集:

# 查看所有用户
λ net user

# 新增用户为 test 密码为 123456
λ net user test 123456 /add

# 查看用户 tes t的相关信息
λ net user test

# 修改 test 的密码为 123
λ net user test 123

# 交互式修改 test 用户密码
λ net user test *

# 查看所有用户分组
λ net localgroup

# 查看 administrators 用户组的详情
λ net localgroup administrators

# 将 test 用户添加到 administrators 管理员组(提权)
λ net localgroup administrators test /add

# 将 test 用户移除管理员组
λ net localgroup administators test /del

# 禁用test用户
λ net user test /active:no

# 启动test用户
λ net user test /active:yes

# 删除test用户
λ net user test /del

# 添加一个 upload 用户组 并附上描述信息
λ net localgroup upload /add /comment:"网站数据上传专用"

另外发现有 /DOMAIN 的选项,这个选项是直接将操作提交到域上面的,当服务器以高权限的管理员身份登录的时候,添加 /DOMAIN 参数即可对域用户和组直接进行操作:

服务器信息如下:

此时使用域管理员登录该服务器之后,whoami 的信息如下:

λ whoami
sqlsec\administrator

如果以本机管理员登录的话,whoami 信息如下:

λ whoami
ms1\administrator

下面是和域相关的操作演示:

# 查看所在域的用户列表
λ net user /domain
这项请求将在域 sqlsec.com 的域控制器处理。


\\dc1.sqlsec.com 的用户帐户

-------------------------------------------------------------------------------
Administrator            Guest                    krbtgt
krbtgt_63505             sec                      testuser
命令成功完成。

# 获取域用户的详细信息
λ net user testuser /domain
这项请求将在域 sqlsec.com 的域控制器处理。

用户名                 testuser
全名
注释
用户的注释
国家/地区代码          000 (系统默认值)
帐户启用               Yes
帐户到期               从不

上次设置密码           2020/6/1 22:52:06
密码到期               2020/7/13 22:52:06
密码可更改             2020/6/2 22:52:06
需要密码               Yes
用户可以更改密码       Yes

允许的工作站           All
登录脚本
用户配置文件
主目录
上次登录               2020/6/3 10:12:38

可允许的登录小时数     All

本地组成员
全局组成员             *Domain Users
命令成功完成。

# 在域中添加用户
λ net user test P@ssw0rd /add /domain
这项请求将在域 sqlsec.com 的域控制器处理。

命令成功完成。

# 将域用户添加到域管理员组
λ net localgroup administrators test /add /domain
这项请求将在域 sqlsec.com 的域控制器处理。

命令成功完成。

# 再次查看刚刚添加的用户信息
λ net user test /domain
这项请求将在域 sqlsec.com 的域控制器处理。

用户名                 test
全名
注释
用户的注释
国家/地区代码          000 (系统默认值)
帐户启用               Yes
帐户到期               从不

上次设置密码           2020/6/3 10:33:04
密码到期               2020/7/15 10:33:04
密码可更改             2020/6/4 10:33:04
需要密码               Yes
用户可以更改密码       Yes

允许的工作站           All
登录脚本
用户配置文件
主目录
上次登录               从不

可允许的登录小时数     All

本地组成员             *Administrators
全局组成员             *Domain Users
命令成功完成。

# 查看所在域的别名
C:\> net localgroup /domain
这项请求将在域 sqlsec.com 的域控制器处理。


\\dc1.sqlsec.com 的别名

-------------------------------------------------------------------------------
*Account Operators
*Administrators
*Allowed RODC Password Replication Group
*Backup Operators
*Cert Publishers
*Certificate Service DCOM Access
*Cryptographic Operators
*Denied RODC Password Replication Group
*Distributed COM Users
*DnsAdmins
*Event Log Readers
*Guests
*IIS_IUSRS
*Incoming Forest Trust Builders
*Network Configuration Operators
*Performance Log Users
*Performance Monitor Users
*Pre-Windows 2000 Compatible Access
*Print Operators
*RAS and IAS Servers
*Remote Desktop Users
*Replicator
*Server Operators
*Terminal Server License Servers
*Users
*Windows Authorization Access Group
命令成功完成。


# 查看所在域的用户组
λ net group /domain
这项请求将在域 sqlsec.com 的域控制器处理。


\\dc1.sqlsec.com 的组帐户

-------------------------------------------------------------------------------
*DnsUpdateProxy
*Domain Admins
*Domain Computers
*Domain Controllers
*Domain Guests
*Domain Users
*Enterprise Admins
*Enterprise Read-only Domain Controllers
*Group Policy Creator Owners
*Read-only Domain Controllers
*Schema Admins
命令成功完成。

# 查看域管理员组的情况
λ net group "domain admins" /domain
这项请求将在域 sqlsec.com 的域控制器处理。

组名     Domain Admins
注释     指定的域管理员

成员

-------------------------------------------------------------------------------
Administrator
命令成功完成。

# 获取域内置 administrators 组
λ net localgroup administrators /domain
这项请求将在域 sqlsec.com 的域控制器处理。

别名     administrators
注释     管理员对计算机/域有不受限制的完全访问权

成员

-------------------------------------------------------------------------------
Administrator
Domain Admins
Enterprise Admins
sec
命令成功完成。

# 获得域中企业管理员列表
λ net group "enterprise admins" /domain
这项请求将在域 sqlsec.com 的域控制器处理。

组名     Enterprise Admins
注释     企业的指定系统管理员

成员

-------------------------------------------------------------------------------
Administrator
命令成功完成。

# 获取域控列表
λ net group "domain controllers" /domain
这项请求将在域 sqlsec.com 的域控制器处理。

组名     Domain Controllers
注释     域中所有域控制器

成员

-------------------------------------------------------------------------------
DC1$
命令成功完成。

# 获得所有域成员计算机列表
C:\> net group "domain computers" /domain
这项请求将在域 sqlsec.com 的域控制器处理。

组名     Domain Computers
注释     加入到域中的所有工作站和服务器

成员

-------------------------------------------------------------------------------
08SERVER4$               MS1$                     SERVER2003$
WINSEVEN1$
命令成功完成。

# 获得域密码策略
λ net accounts /domain
这项请求将在域 sqlsec.com 的域控制器处理。

强制用户在时间到期之后多久必须注销?:     从不
密码最短使用期限():                    1
密码最长使用期限():                    42
密码长度最小值:                          7
保持的密码历史记录长度:                  24
锁定阈值:                                从不
锁定持续时间():                        30
锁定观测窗口():                        30
计算机角色:                              PRIMARY
命令成功完成。

# 查询域列表
C:\> net view /domain
Domain

-------------------------------------------------------------------------------
SQLSEC
命令成功完成。

# 查看指定域中的计算机列表
λ net view /domain:sqlsec
服务器名称            注解

-------------------------------------------------------------------------------
\\DC1
\\DC2
\\SERVER2003
命令成功完成。

# 查看域信任信息
λ nltest /domain_trusts
域信任的列表:
    0: SQLSEC sqlsec.com (NT 5) (Forest Tree Root) (Primary Domain) (Native)
此命令成功完成

# 查询机器属于哪个域
C:\> net config Workstation
计算机名                     \\MS1
计算机全名                   ms1.sqlsec.com
用户名                       Administrator

工作站正运行于
        NetBT_Tcpip_{D524100D-747B-4C11-9BA6-2914E50C8DBB} (001C42ABF14D)

软件版本                     Windows Server 2008 R2 Enterpri

工作站域                     SQLSEC
工作站域 DNS 名称            sqlsec.com
登录域                       MS1

COM 打开超时 ()            0
COM 发送计数 (字节)          16
COM 发送超时 (毫秒)          250
命令成功完成。

这里命令有点多,这里就不再补充了,后面有机会再补充。

第 3 章 远程连接及管理命令

大多数情况下,黑客无法直接接触目标主机,而需要通过远程连接管理目标主机,在所有远程管理方式中,系统内置的远程连接、远程管理,不需要安装服务器、客户端,且不会查杀,本章还是比较实用的。

3.1 远程管理及文件传输

3.1.1 Telnet 命令

Telnet 是系统集成的远程登录服务。用户只要熟练掌握 Telnet 命令就可以登录开启该项服务的主机,并让远程主机执行命令提示窗口中输入的各项指令,从而完成远程管理和维护工作。

在实际的网络环境中,Telnet 除了广泛用于管理远程主机,也应用于远程管理路由器等。

Telnet 包括命令模式和行输入两种运行模式,其中命令模式在命令中包含完整的登录参数,可直接登录远程主机;而行输入模式切换至 Telnet 行输入状态,用户可进一步设置调整、连接及断开远程主机。

  1. Telnet 命令模式

命令格式:

telnet [-a][-e escape char][-f log file][-l user][-t term][host [port]]

参数说明:

-a      # 企图自动登录。除了用当前已登陆的用户名以外,与 -l 选项相同。
-e      # 跳过字符来进入 telnet 客户端提示。
-f      # 客户端登录的文件名
-l      # 指定远程系统上登录用的用户名。
# 要求远程系统支持 TELNET ENVIRON 选项。
-t      # 指定终端类型。支持的终端类型仅是: vt100, vt52, ansi 和 vtnt。
host    # 指定要连接的远程计算机的主机名或 IP 地址。
port    # 指定端口号或服务名。

操作演示:

λ telnet -l administrator 10.20.25.24 23

欢迎使用 Microsoft Telnet Client

Escape 字符为 ']'

# 这里按下 回车 直接跳过
你将要把你的密码信息发送到 Internet 区域内的一台远程计算机上。这可能不安全。是否仍要发送(是/否): 回车

# 输入密码
Welcome to Microsoft Telnet Service

password:

# 连接成功 可以正常输入命令
*===============================================================
Microsoft Telnet Server.
*===============================================================
C:\Users\Administrator>net user

\\IMAC7B6A 的用户帐户

-------------------------------------------------------------------------------
Administrator            Guest                    sec
命令成功完成。


C:\Users\Administrator>
  1. Telnet 行输入模式

在命令行下直接输入 telnet 命令,就可以直接进入行输入模式,该模式支持以下参数:

c    - close                    # 关闭当前连接
d    - display                  # 显示操作参数
o    - open hostname [port]     # 连接到主机(默认端口 23)。
q    - quit                     # 退出 telnet
set  - set                      # 设置选项(键入 'set ?' 获得列表)
sen  - send                     # 将字符串发送到服务器
st   - status                   # 打印状态信息
u    - unset                    # 解除设置选项(键入 'set ?' 获得列表)
?/h  - help                     # 打印帮助信息

Telnet 使用明文传输,登录账户密码及命令使用过程均可以被嗅探侦测,建议使用 SSH 替代 Telnet 命令

3.1.2 FTP 命令

FTP(File Transfer Protocol)是文件传输协议的简称。对于黑客而言,通过 telnet 或 ssh 连接远程主机后,使用 FTP 命令即可控制远程电脑下载指定的木马。

命令格式:

FTP [-v] [-d] [-i] [-n] [-g] [-s:filename] [-a] [-A] [-x:sendbuffer] [-r:recvbuffer] [-b:asyncbuffers] [-w:windowsize] [host]

参数说明:

-v              # 禁止显示远程服务器响应。
-n              # 禁止在初始连接时自动登录。
-i              # 关闭多文件传输过程中的交互式提示。
-d              # 启用调试。
-g              # 禁用文件名通配(请参阅 GLOB 命令)。
-s:filename     # 指定包含 FTP 命令的文本文件;命令在 FTP 启动后自动运行。
-a              # 在绑字数据连接时使用所有本地接口。
-A              # 匿名登录。
-x:send sockbuf # 覆盖默认的 SO_SNDBUF 大小 8192。
-r:recv sockbuf # 覆盖默认的 SO_RCVBUF 大小 8192。
-b:async count  # 覆盖默认的异步计数 3
-w:windowsize   # 覆盖默认的传输缓冲区大小 65535。
host            # 指定主机名称或要连接到的远程主机的 IP 地址。

注意:
- mget 和 mput 命令将 y/n/q 视为 yes/no/quit。
- 使用 Ctrl-C 中止命令。

以上参数用户建立 FTP 连接,连接创建并进入 FTP 交互模式后,就可以使用以下子命令管理、传输文件和文件夹(子命令数量较多,下面仅做简单介绍):

!              # 退出 FTP 交互模式
?              # 显示帮助信息
append         # 将本地文件上传至服务器端,并与指定的文件合并
ascii          # 将传送模式转换为 ascii 模式
bell           # 文件传送完毕,响一下机箱喇叭
bye/quit       # 结束当前连接并退出 FTP 交互
cd             # 更改服务器端的当前目录
close          # 关闭当前连接,返回 FTP 交互模式
debug          # 切换至调试模式。若连接了打印机,可打印所执行的命令
delete/mdelete # 删除服务端的文件
dir/mdir/ls/pwd# 显示服务端的文件及子目录列表
glod           # 通配符开关。执行一次为关,再执行一次为开
hash           # 打印哈希字串
lcd            # 切换本机当前目录。若无参数,则显示当前目录
literal        # 将参数逐字发送至服务器端
mget           # 将服务器端文件下载至本机
mkdir          # 在服务端当前目录创建子目录
mput/put/send  # 将文件上传至服务器端
open           # 连接指定的 FTP 服务器
status         # 显示当前的连接状态

一些公开给公众使用的 FTP 服务器支持匿名登录,用户名为 anonymous,密码为自己的邮箱(邮箱可以是虚拟的)

3.1.3 IPC$ 远程连接

IPC 是 Intelnet Process Connection 的缩写,它是 Windows 主机之间相互通信的管道。名称后面附加 $,表示该管道不是呈现给普通用户,只隐藏在操作系统中。默认状态下,该管道使用 139、445端口侦听其他电脑发出的连接请求。

利用 IPC$,系统管理员可以方便地管理没有开启任何共享文档的远程主机,但是 IPC$ 同样会被入侵者利用,如远程添加账户、修改账户权限及非法访问用户的数据文件。

根据l连接权限的不同,IPC$ 可以分为 IPC$ 空连接和 IPC$ 特定权限连接两种:

  • 建立 IPC$ 空连接的条件相对较宽,只需目标主机没有取消默认的 IPC$ 管道,并且 Server 服务处于运行状态即可。
  • IPC$ 特定权限连接是在 IPC$ 空连接的基础上附加可用的账户和密码。换而言之,只有事先获得目标主机的账户与密码,才能建立 IPC$ 特定权限连接
  1. 建立 IPC$ 空连接
λ net use \\目标IP地址\ipc$ "" /user:""

IPC$ 空连接无法进行任何管理操作,如传输文件、执行程序,但是,它可以提供少量主机信息,如获得共享文件夹列表,具有编程基础的黑客还可以通过脚本获得目标主机的用户账户列表,这样可以大大降低暴力密码破解的难度。

连接成功后,可以使用:

λ net use

查看 IPC$ 的连接状态:

λ net use
会记录新的网络连接。


状态       本地        远程                      网络

-------------------------------------------------------------------------------
             Y:        \\Mac\下载                Parallels Shared Folders
             Z:        \\Mac\Home                Parallels Shared Folders
已断开连接             \\10.211.55.9\ipc$        Microsoft Windows Network
命令成功完成。

也可以使用如下命令,手动删除 IPC$ 连接:

λ net use \\10.211.55.9\ipc$ /del

\\10.211.55.9\ipc$ 已经删除。

取用户账户列表,这里有待实验,记得得 Windows 2003 那种老版本的操作系统才可以

  1. 建立 IPC$ 特定权限连接
λ net user \\目标IP地址\ipc$ "密码" /user:"用户名"

案例演示:

# 建立 IPC$ 特权连接
λ net use \\10.211.55.9\ipc$ "P@ssw0rd" /user:"administrator"
命令成功完成。


# 查看连接状态
λ net use
会记录新的网络连接。


状态       本地        远程                      网络

-------------------------------------------------------------------------------
             Y:        \\Mac\下载                Parallels Shared Folders
             Z:        \\Mac\Home                Parallels Shared Folders
OK                     \\10.211.55.9\ipc$        Microsoft Windows Network
命令成功完成。

# 复制文件到对方服务器的 C 盘下
λ cat hacker.txt
Hacked By 国光

λ copy hacker.txt \\10.211.55.9\c$\
已复制         1 个文件。

此时已经就直接拷贝过去了:

3.2 连接测试命令

假如目标主机处于关机状态或者入站数据包被防火墙过滤的话,我们这个时候就得需要掌握一些连接测试的命令,在入侵前做一些必要的试探,然后后面的渗透少走一些弯路。

3.2.1 连接测试命令 ping

命令格式:

ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS] [-r count] [-s count] [[-j host-list] | [-k host-list]] [-w timeout] [-R] [-S srcaddr] [-4] [-6] target_name

参数说明:

-t             # 持续 Ping 指定的主机,用户使用【Ctrl+C】组合键停止。
-a             # 将地址解析成主机名。
-n count       # 要发送的回显请求数。
-l size        # 发送缓冲区大小。
-f             # 在数据包中设置“不分段”标志(仅适用于 IPv4)。
-i TTL         # 生存时间。
-v TOS         # 服务类型(仅适用于 IPv4。该设置已不赞成使用,且对 IP 标头中的服务字段类型没有任何影响)。
-r count       # 记录计数跃点的路由(仅适用于 IPv4)。
-s count       # 计数跃点的时间戳(仅适用于 IPv4)。
-j host-list   # 与主机列表一起的松散源路由(仅适用于 IPv4)。
-k host-list   # 与主机列表一起的严格源路由(仅适用于 IPv4)。
-w timeout     # 等待每次回复的超时时间(毫秒)。
-R             # 同样使用路由标头测试反向路由(仅适用于 IPv6)。
-S srcaddr     # 要使用的源地址。
-4             # 强制使用 IPv4。
-6             # 强制使用 IPv6。

国光感觉 ping 命令中的 -a 在渗透测试中还是有点用处的,因为可以直接显示解析出目标的主机名,下面测试两个案例试试看:

λ ping -a 10.211.55.8

正在 Ping www.bt.com [10.211.55.8] 具有 32 字节的数据:
来自 10.211.55.8 的回复: 字节=32 时间<1ms TTL=64
...

λ ping -a 10.20.24.58

正在 Ping DESKTOP-8KNB607 [10.20.24.58] 具有 32 字节的数据:
来自 10.20.24.58 的回复: 字节=32 时间<1ms TTL=128
...

直接就获取到了局域网下目标 IP 地址的主机名了,大道至简,再也不用其他对应的扫描工具了。

学习 ping 命令的时候还涉及到一个 TTL 的概念,路由每转发数据包一次,均会将 TTL 的值减 1。当 TTL 的值减至 0 而未达到目标主机时,则返回「请求超时」类似的提示信息,除此之外如果响应时长超过了 -w 参数设置的毫秒数的时候,同样也会返回「请求超时」类似的提示信息。

3.2.2 跃点追踪命令 tracert

可以使用 tracert 命令来查询数据包进入网络后,经过哪些结点转发才抵达目标主机的情况。

命令格式:

tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] [-R] [-S srcaddr] [-4] [-6] target_name

参数说明:

-d                # 不将地址解析成主机名。
-h maximum_hops   # 搜索目标的最大跃点数。
-j host-list      # 与主机列表一起的松散源路由(仅适用于 IPv4)。
-w timeout        # 等待每个回复的超时时间(以毫秒为单位)。
-R                # 跟踪往返行程路径(仅适用于 IPv6)。
-S srcaddr        # 要使用的源地址(仅适用于 IPv6)。
-4                # 强制使用 IPv4。
-6                # 强制使用 IPv6。

下面尝试使用 tracert 命令来追踪一下本机至 www.sqlsec.com 我的博客的路由路径:

C:\Users\Administrator>tracert www.sqlsec.com

通过最多 30 个跃点跟踪
到 www.sqlsec.com [121.196.37.183] 的路由:

  1     1 ms    <1 毫秒    *     10.20.124.1
  2     *       81 ms    81 ms  172.16.0.1
  3     2 ms     6 ms     2 ms  183.129.153.145
  4     1 ms     1 ms     1 ms  61.164.12.28
  5     *        *        2 ms  220.191.142.53
  6     4 ms     4 ms     4 ms  115.238.21.113
  7     *        *        *     请求超时。
  8     2 ms     1 ms     1 ms  103.41.142.201
  9     *        *        *     请求超时。
 10     *        *        *     请求超时。
 11     4 ms     4 ms     4 ms  121.196.37.183

跟踪完成。

3.2.2 网络连接状态 netstat

netstat 命令用于检测本机网络状态的命令,它可以显示本机的核心路由表、活动连接、开放端口机通信数据流量情况。

命令格式:

NETSTAT [-a] [-b] [-e] [-f] [-n] [-o] [-p proto] [-r] [-s] [-t] [interval]

参数说明:

-a             # 显示所有活动的连接和侦听端口。
-b             # 显示在创建每个连接或侦听端口时涉及的可执行程序。(需要高权限)
-e             # 显示以太网统计。此选项可以与 -s 选项结合使用。
-f             # 显示外部地址的完全限定域名(FQDN)。
-n             # 以数字形式显示地址和端口号。
-o             # 显示拥有的与每个连接关联的进程 ID。
-p proto  # 显示 proto 指定的协议的连接;proto 
                    # 如果与 -s 选项一起用来显示每个协议的统计,proto 可以是下列任何一个: 
                    # IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 或 UDPv6。
-r        # 显示路由表。
-s        # 显示每个协议的统计。
-t        # 显示当前连接卸载状态。
interval  # 重新显示选定的统计,各个显示间暂停的间隔秒数。按 CTRL+C 停止重新显示统计。

这些命令渗透测试中使用的蛮多,国光感觉 -r-ano-b 都是一些比较常见的命令:

λ netstat -bn

活动连接

  协议  本地地址          外部地址        状态
  TCP    127.0.0.1:1039         127.0.0.1:6000         ESTABLISHED
 [XWin_MobaX.exe]
  TCP    127.0.0.1:1040         127.0.0.1:6000         ESTABLISHED
 [XWin_MobaX.exe]
  TCP    127.0.0.1:1041         127.0.0.1:6000         ESTABLISHED
 [XWin_MobaX.exe]
  TCP    127.0.0.1:6000         127.0.0.1:1039         ESTABLISHED
 [XWin_MobaX.exe]
  TCP    127.0.0.1:6000         127.0.0.1:1040         ESTABLISHED
 [XWin_MobaX.exe]
  TCP    127.0.0.1:6000         127.0.0.1:1041         ESTABLISHED
 [XWin_MobaX.exe]

3.3 TCP/IP 设置命令

TCP/IP 命令 可以让攻击者在命令行模式查看或修改电脑的 TCP/IP 设置。

3.3.1 IP 配置命令 ipconfig

命令格式:

ipconfig [/allcompartments] [/? | /all | /renew [adapter] | /release [adapter] | /renew6 [adapter] | /release6 [adapter] | /flushdns | /displaydns | /registerdns | /showclassid adapter | /setclassid adapter [classid] | /showclassid6 adapter |/setclassid6 adapter [classid] ]

参数说明:

ipconfig           # 无参数运行时,显示所有连接的基本信息
/all               # 显示所有连接的完整配置信息
/renew [adapter]   # 重新获得动态 IP 地址,默认更新所有适配器
/release [adapter] # 释放指定适配器的 IPv4 地址
/release6 [adapter]# 释放指定适配器的 IPv6 地址
/flushdns          # 释放 DNS 缓存
/displaydns        # 显示 DNS 缓存内容
/registerdns       # 刷新现有的 DNS 租约,并再次向 DNS 服务器注册本机
/showclassid adapter # 显示指定连接的 DHCP ID 类别名称,如果是固定 IP 地址的连接,则无相关的内容显示
/setclassid adapter [classid] # 手动指定 DHCP ID 类别名称
/showclassid6 adapter # showclassid 对应的 IPV6 版本
/setclassid6 adapter [classid] # setclassid 对应的 IPV6 版本

3.3.2 路由表管理 route

route 命令用于显示及修改本地路由表,攻击者可以利用该命令轻易修改校园网、企业网内被入侵电脑的数据包流向,在不使用 ARP 欺骗的情况下,侦听到大量的明文传输,从而获取邮箱密码等重要资料。

命令格式:

ROUTE [-f] [-p] [-4|-6] command [destination] [MASK netmask] [gateway] [METRIC metric] [IF interface]

参数说明:

-f        # 清除所有网关项的路由表,需要高权限
-p        # 与 ADD 命令结合使用时,会将自定义的路由条目添加至注册表。
                    # 每次系统启动时,会从注册表重新读取自定义条目并添加至本机路由表。
                    # 没有此参数的话,自定义的路由条目将会在重启后遗失
-4        # 强制使用 IPv4
-6        # 强制使用 IPv6

command   
    print   # 打印路由
  add     # 添加路由
  delete  # 删除路由
  change  # 修改现有路由

destination  # 指定条目的目标地址(通常为一个区段)
MASK netmask # 指定此路由项的子网掩码值 如果未指定,其默认设置为 255.255.255.255。
gateway      # 指定网关,是指抵达目的地址的下一个跃点位置。
interface    # 指定路由的接口号码。
METRIC       # 指定跃点数,如果有多条路径到达相同的目的地址,则优先使用跃点数值低的条目。

常见的命令:

λ route ADD 157.0.0.0 MASK 255.0.0.0  157.55.80.1 METRIC 3 IF 2
           destination^     ^mask      ^gateway      metric^   Interface^

λ route CHANGE 157.0.0.0 MASK 255.0.0.0 157.55.80.5 METRIC 2 IF 2
λ route DELETE 157.0.0.0

由于国光手贱,一上来就尝试了 -f 清空路由表的操作,导致虚拟机无法上网:

λ ping baidu.com
Ping 请求找不到主机 baidu.com。请检查该名称,然后重试。

下面尝试使用 route 来恢复一下,首先来打印一些目标服务器的路由信息:

λ route -f
请求的操作需要提升。

C:\>route print
===========================================================================
接口列表
 11...00 1c 42 ce 81 11 ......Intel(R) PRO/1000 MT Network Connection
  1...........................Software Loopback Interface 1
 12...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter
===========================================================================

IPv4 路由表
===========================================================================
活动路由:
  无
永久路由:
  无

IPv6 路由表
===========================================================================
活动路由:
  无
永久路由:
  无

但是此时计算机是存在 IP 的:

λ ipconfig

Windows IP 配置


以太网适配器 本地连接:

   连接特定的 DNS 后缀 . . . . . . . : localdomain
   IPv6 地址 . . . . . . . . . . . . : fdb2:2c26:f4e4:0:4559:d0cf:efa0:b207
   本地链接 IPv6 地址. . . . . . . . : fe80::4559:d0cf:efa0:b207%11
   IPv4 地址 . . . . . . . . . . . . : 10.211.55.45
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . :

隧道适配器 isatap.localdomain:

   媒体状态  . . . . . . . . . . . . : 媒体已断开
   连接特定的 DNS 后缀 . . . . . . . : localdomain

实际上只要尝试添加一条路由配置规则就可以正常上网了:

λ route add 0.0.0.0 mask 0.0.0.0 10.211.55.1 metric 1 if 11
 操作完成!

其中 10.211.55.1 是网关的地址,10.211.55.45 是本机的 IP 地址,最后添加好的路由效果如下:

λ route print
===========================================================================
接口列表
 11...00 1c 42 ce 81 11 ......Intel(R) PRO/1000 MT Network Connection
  1...........................Software Loopback Interface 1
 12...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter
===========================================================================

IPv4 路由表
===========================================================================
活动路由:
网络目标        网络掩码          网关       接口   跃点数
          0.0.0.0          0.0.0.0      10.211.55.1     10.211.55.45     11
===========================================================================
永久路由:
  无

IPv6 路由表
===========================================================================
活动路由:
 如果跃点数网络目标      网关
 11    266 ::/0                     fe80::21c:42ff:fe00:18
 11     18 fdb2:2c26:f4e4::/64      在链路上
===========================================================================
永久路由:
  无

挖坑 未完待续 …