域渗透前置知识
在介绍具体的域渗透之前,有些基础知识是必须要先说的。首先Windows自带的cmd命令先过一遍,可以找个ntcmds.chm来学习下,这个在windows 2003上面是自带的,也可以网上下载。2008和2012又新增了一些命令,具体可以去微软的网站上在线看https://technet.microsoft.com/zh-cn/library/cc772390(v=ws.10).aspx
在继续学习域渗透之前,至少应该对以下命令使用熟练:cd,dir,copy,xcopy,del,move,echo,mkdir,rmdir,type,ping,ipconfig。后面再讲到新的命令时会再做讲解。
0x01 ipc链接
内网渗透里面不管域还是工作组最先需要介绍的就是ipc连接,这个是内网渗透必修科目,后面绝大多数操作都要基于ipc连接。关于ipc的详细介绍,可以参考这篇文章:http://www.xfocus.net/articles/200303/493.html
安焦的这篇文章是从普通的workgroup形式来举例的,而在域中,ipc连接的形式有一些差别。
正常ipc登录的命令是net use\\server \ipc$ “password” /user:username
在域里面使用net use建立连接时,user后面的参数需要添加机器名或者域名,分别对应使用本地账户或者域账户登录
比如使用域账户登录时net user \\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是最基本的方法,来个例子看下具体流程
net use \\192.168.1.5 Passw0rd! /user:admin 建立ipc连接
copy add.bat \\192.168.1.5\c$\wmpub 复制add.bat到目标C盘wmpub目录
add.bat里面的内容是net userTwi1ight Passw0rd! /add 添加Twi1ight用户
net time \\192.168.1.5 查看目标当前时间,得到当前时间是21:50:52
at \\192.168.1.5 21:52 c:\wmpub\add.bat 告诉目标在21:52的时候运行c:\wmpub\add.bat
at \\192.168.1.5 查看目标的计划任务列表
等到21:52时在目标上查看用户,已经成功添加账号
来回顾下整个流程,我们需要得到目标的当前时间,然后再添加一个计划时间比当前时间晚几分钟的任务。这就意味着我们需要等待直到时间到了才能执行,无法立即就执行。而且万一时间输错了,比当前时间要早,那就要等到第二天才会去执行了,这时候又得重新建立一个任务,删掉错误时间的那个,至于怎么删除留待读者实践吧。这种处理方式同时也导致不便于写程序来自动处理。
另一种方法是schtasks,这是升级版的at命令
默认在win7中文版上运行schtasks会爆无法加载列资源错误,这是编码原因导致,默认是936编码(GBK),用chcp 437命令换成美国编码就可以了。
继续用之前的例子,假设已经建立好ipc链接,同时已经复制了add.bat过去。下面是具体流程
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
这是用at在远程2008机器上添加一个任务,执行ipconfig命令,执行完后在win10上用at远程查询不到任务信息了。
然后在2008机器的本地来看at和schtasks的结果:
at命令本地也查不到信息,但是schtasks却能看到任务信息,如果用详细模式,就能看到更具体的信息。
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权限。
借用之前的例子,假设已经复制好add.bat到192.168.1.2,使用psexec运行的命令是:
psexec \\192.168.1.2c:\wmpub\add.bat
psexec的基本的原理是通过管道在远程机器上创建一个服务psexec,然后通过这个服务运行命令,运行完后删除服务。这个在windows的日志中有详细的记录:
另外psexec在少数情况下会出现服务没删除成功的bug,所以一般来讲不太推荐在渗透时使用psexec。
-
wmiexec
这个是我之前写过的一个工具,专门用来替代psexec的,这个帖子有详细的介绍和使用说明“利用WMI代替psexec——WMIEXEC.vbs”https://www.t00ls.net/thread-21167-1-1.html,这里就不再赘述。
0x03 Hash知识
windows的密码是经过hash后存储的,本地存在sam,system注册表中,域里面存在ntds.dit中。密码hash有两种格式,LM hash和NT hash。从vista以后的系统本地和域都不再存储LM hash,取而代之的是一串AAD3开头的hash串。另外由于LM hash算法的局限性,当密码超过14位时,即使在2003或XP上,LM hash也为空,此时抓hash抓到的也是AAD3开头的。
LMhash可以用在线网站秒破http://www.objectif-securite.ch/en/ophcrack.php
NThash就只能用暴力破解了,基本上所有破解工具都支持该算法。破不出来也没太大关系,现在也出了很多工具支持直接使用nthash连接远程机器执行命令。
除了这两种hash,在域环境中还存在另外一种域登录缓存mscash,这个后面会讲到。