域渗透前置基础知识

​ 在介绍具体的域渗透之前,有些基础知识是必须要先说的。首先Windows自带的cmd命令先过一遍,可以找个ntcmds.chm来学习下,这个在windows 2003上面是自带的,也可以网上下载。2008和2012又新增了一些命令,具体可以去微软的网站上在线看Command-Line Reference

​ 在学习域渗透之前,至少应该对以下命令使用熟练:cd,dir,copy,xcopy,del,move,echo,mkdir,rmdir,type,ping,ipconfig。后面再讲到新的命令时会再做讲解。

0x01 ipc链接

​ 内网渗透里面不管域还是工作组最先需要介绍的就是ipc连接,这个是内网渗透必修科目,后面绝大多数操作都要基于ipc连接。关于ipc的详细介绍,可以参考安焦的这篇文章:一份详尽的IPC$入侵资料
​ 安焦的这篇文章是从普通的workgroup形式来举例的,而在域中,ipc连接的形式有一些差别。
正常ipc登录的命令是net use \\server\ipc$ “password” /user:username
​ 在域里面使用net use建立连接时,user后面的参数需要添加机器名或者域名,分别对应使用本地账户或者域账户登录
​ 比如使用域账户登录时net use \\server “password” /user:domain\username
​ 注意user后面变成了domain\username,表示使用domain域的账户登录
​ 另外ipc连接时,可以省去后面的\ipc$,除非是要映射指定磁盘需要指定盘符加$,如E$

0x02 访问文件

​ 建立ipc连接以后,就可以访问目标机器的文件(上传、下载),也可以在目标机器上运行命令。上传和下载文件直接通过copy命令就可以,不过路径换成UNC路径。何为UNC路径?简单来讲以\\开头的路径就是UNC路径,比如\\192.168.1.2\c$\boot.ini。如果要从本地当前目录上传1.bat到192.168.1.2机器C盘根目录下,那么命令就是copy 1.bat \\192.168.1.2\C$\, 反之就是下载。dir、copy、xcopy、move、type的参数都可以使用UNC路径。

0x03 运行命令

​ 如果要在目标机器上运行命令,最基础的方法有3种:1、使用计划任务,2、psexec,3、wmi远程执行

计划任务

​ 有两种方法启动计划任务,at和schtasks
​ at是最基本的方法,来个例子看下具体流程
nNejU_basics-of-active-directory-hacking-1.png

​ 建立ipc连接
net use \\192.168.1.5 Passw0rd! /user:admin
​ 复制add.bat到目标C盘wmpub目录, add.bat里面的内容是net user Twi1ight Passw0rd! /add 即添加Twi1ight用户
copy add.bat \\192.168.1.5\c$\wmpub
​ 查看目标当前时间,得到当前时间是21:50:52
net time \\192.168.1.5
​ 告诉目标在21:52的时候运行c:\wmpub\add.bat
at \\192.168.1.5 21:52 c:\wmpub\add.bat
​ 查看目标的计划任务列表
at \\192.168.1.5
​ 等到21:52时在目标上查看用户,已经成功添加账号

​ 来回顾下整个流程,我们需要得到目标的当前时间,然后再添加一个计划时间比当前时间晚几分钟的任务。这就意味着我们需要等待直到时间到了才能执行,无法立即就执行。而且万一时间输错了,比当前时间要早,那就要等到第二天才会去执行了,这时候又得重新建立一个任务,删掉错误时间的那个,至于怎么删除留待读者实践吧。这种处理方式同时也导致不便于写程序来自动处理。

​ 另一种方法是schtasks,这是升级版的at命令

Note: 默认在win7中文版上运行schtasks会爆无法加载列资源错误,这是编码原因导致,默认是936编码(GBK),用chcp 437命令换成美国编码就可以了。

​ 继续用之前的例子,假设已经建立好ipc链接,同时已经复制了add.bat过去。下面是具体流程

mVudD_basics-of-active-directory-hacking-2.png

1
2
3
4
5
schtasks /create /s 192.168.1.2 /u administrator/p Passw0rd! /ru "SYSTEM" /tn adduser /sc DAILY /tr c:\wmpub\add.bat/F
schtasks /run /s 192.168.1.2 /u administrator /pPassw0rd! /tn adduser /i
schtasks /delete /s 192.168.1.2 /u administrator/p Passw0rd! /tn adduser /f

​ 第一条命令是创建计划任务,/s指定远程机器名或ip地址,/ru指定运行任务的用户权限,这里指定为最高的SYSTEM,/tn是任务名称,/sc是任务运行频率,这里指定为每天运行,并没什么实际意义,/tr指定运行的文件,/F表示如果指定的任务已经存在,则强制创建任务并抑制警告。
​ 第二条命令表示运行任务,其中/i表示立即运行,这就是schtasks比at好用的关键点,不需要和时间挂钩,可以立即执行任务。
​ 第三条命令顾名思义是删除任务

在条件允许的情况下,尽量使用schtasks,因为在某些条件下,at执行完任务后,任务信息没有删除,用at命令查不到任务信息,但是用schtasks却能看到任务信息,任务名是At加一个数字。
​ 具体例子,本地windows10,远程windows2008
HNcft_basics-of-active-directory-hacking-3.png

​ 这是用at在远程2008机器上添加一个任务,执行ipconfig命令,执行完后在win10上用at远程查询不到任务信息了。
​ 然后在2008机器的本地来看at和schtasks的结果:
tbNdw_basics-of-active-directory-hacking-4.png

Tips: 我测试windows7和windows2008无法用schtasks远程在windows2003上面建立任务,且windows10无法使用schtasks远程在windows2008上面建立任务。还有使用本地账号的情况下,schtasks在建立了ipc链接的基础上还是需要指定账号密码

psexec

​ psexec是pstools工具包中的一个工具,常用来远程执行命令。
​ psexec针对远程建立连接的认证方式有两种,一种先建立ipc连接,然后直接用psexec \\192.168.1.2 cmd命令开启一个半交互式的cmdshell,另一种是在psexec的参数中指定账号密码。
​ psexec的-s参数表示使用system权限。

KDxFC_basics-of-active-directory-hacking-5.png
jwDmn_basics-of-active-directory-hacking-6.png

​ 借用之前的例子,假设已经复制好add.bat到192.168.1.2,使用psexec运行的命令是:
psexec \\192.168.1.2 c:\wmpub\add.bat
​ psexec的基本的原理是通过管道在远程机器上创建一个服务psexec,然后通过这个服务运行命令,运行完后删除服务。这个在windows的日志中有详细的记录:
bnFge_basics-of-active-directory-hacking-7.png
Note: psexec在少数情况下会出现服务没删除成功的bug,所以一般来讲不太推荐在渗透时使用psexec。

wmiexec.vbs

​ wmiexec是我之前写过的一个工具,专门用来替代psexec的,这个帖子有详细的介绍和使用说明利用WMI代替psexec——WMIEXEC.vbs,这里就不再赘述。

下载地址:https://github.com/Twi1ight/AD-Pentest-Script

0x04 Hash知识

​ windows的密码是经过hash后存储的,本地存在hklm\samhklm\system注册表中,域里面存在域控制器的c:\windows\ntds\ntds.dit中。密码hash有两种格式,LM hash和NT hash。从vista以后的系统本地和域都不再存储LM hash,取而代之的是一串AAD3开头的hash串AAD3B435B51404EEAAD3B435B51404EE。另外由于LM hash算法的局限性,当密码超过14位时,即使在2003或XP上,LM hash也为空,此时抓hash抓到的也是AAD3开头的。

​ LMhash可以用在线网站秒破http://www.objectif-securite.ch/en/ophcrack.php

​ NThash就只能用暴力破解了,基本上所有破解工具都支持该算法。破不出来也没太大关系,现在也出了很多工具支持直接使用nthash连接远程机器执行命令。

​ 除了这两种hash,在域环境中还存在另外一种域登录缓存mscash (v2),这个后面会讲到。