《黑客命令行攻防实战详解》书籍学习记录
2016 年左右的时候读过这本书,当时太浮躁了没有读完。最近在学习内网安全,CMD 命令属于基本功了,所以就打算重新来阅读这本书,尝试读完并做一份摘要笔记。
书籍简介
作者: 至诚文化
出版社: 中国铁道
出版年: 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 命令的功能及单一:图形方式显示文件夹的结构。
- 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 可用字节
这本书上这里也没有提供啥高级命令,有点失望…
- 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 命令。
- 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
- 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 命令用户删除目录。
- md 命令
# 创建 work 文件夹
λ md C:\test\old\work
- 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 行输入状态,用户可进一步设置调整、连接及断开远程主机。
- 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>
- 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$ 特定权限连接
- 建立 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 那种老版本的操作系统才可以
- 建立 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 在链路上
===========================================================================
永久路由:
无