走进森林深处(三)

robots

 

前言

如果看过我的读者应该清楚,我写文章都是按照系列去写的。我希望这种系列类的文章能带给读者学习的连贯性,倘若看了我的文章继续学习还要再去翻阅其他作者的文章这便是一种得不偿失。这种阅读缺乏连贯性,也让读者在多个作者的写作思路上多处徘徊……这是域系列的第四篇文章,我想我把更新频率放的这么快也希望读者能有一个良好的体验,不至于在学习的道路上还去等待此为其一,其二是希望读者不必在阅读下一篇文章时还要去反过头来去看看上篇文章是否记得。在上篇提到,内网的本质是信息收集。但是我不想把域内信息收集的命令多数抛出让读者不知道这些命令所为何……

 

信息收集

在内网中我们需要对自己获取到的shell进行权限判断,这个shell具有怎么样的权限。他是本地管理员还是域内用户,如果是域内用户这个域内用户的权限又是多少,所以这引申出……
net group "domain admins" /domain

此命令可以看出域内管理员有Administrator和OWA,意味着我们后续的目标权限尽量向这两个角色靠拢,这就是这条命令的意义所在。

 

令牌窃取

令牌窃取的概念网上很多,实现的根本原理就是微软提供了一个函数OpenProcess(),他可以打开目标进程,然后将代码注入进目标进程当中。这就是令牌窃取的根本原理。
下面来进行令牌窃取的演示

1.添加本地管理员账户

为了演示需要,在第二篇文章中搭建了域环境的靶场。我们需要在win7的主机中创建一个本地管理员的账户
net user username password /add
创建一个本地账户,以便后续的测试。

2.低权限账户令牌窃取

查看当前权限

我们登陆刚刚创建的低权限的账户,然后运行我们的exe木马回连。然后看CobaltStrike中的进程列表

未发现其中存在域用户的运行程序,然后我们手动在win7的电脑上登陆我们的域用户Administrator,然后在看我们的进程列表。

此时可以看到我们的进程列表中就会多了GOD\Administrator的进程。
随后我们使用steal_token pid 命令注入是域管的进程。

could not open process pid
这就是令牌窃取的局限性,注入时对当前的权限也有要求,准确来说是被注入的进程权限不得高于当前进程的权限,其实本质上来说这就是OpenProcess这个函数的局限性。

本地管理员权限令牌窃取

有了上面失败的教训,我们重新尝试。首先使用提权漏洞将本地的权限提升至system权限,使用MS14-058模块将权限提升至System,whoami查看权限。

随后再次查看进程列表,找到域管理员的权限,再次使用steal_token pid 命令注入进行令牌窃取。

显示窃取成功,随后我们查看窃取完毕的当前权限。

可以看到我们的权限已经变成了域管理员的权限。

 

聊聊疑惑

在我最早学习令牌窃取的时候我始终不明白这个功能的用处在哪里,他的使用场景在哪里。因为如果进程中存在域管的进程,意味着这台机器一定是被域管理员登陆过的。那我们直接使用mimikatz抓lass的密码即可,为什么使用这条命令呢?原因有二:
一:mimikatz抓的密码并不是一定是明文,在后面的操作系统中,缓存中并不会在存储明文密码。
二:如果我们有相当的必要想在当前机器使用域管理员进行一系列的操作,但是又没有域管的密码,我们可以使用本地提权然后加上令牌窃取。
当然这个命令的限制就在于被注入的进程权限不能高于当前权限。

 

结论

搞清楚了令牌窃取的原理、令牌窃取的条件、令牌窃取的目的,如果在域内横向的过程中需要用到令牌窃取这样的功能请自行实践,这个功能没有我想象中的那么强大。还有一个小的tips,如果提权过后进行令牌窃取一定要主要,提权过后使用的rundll这个dll文件功能的维持,这个dll被杀软拦截。所以在提权过后先使用inject模块将当前进程注入,保证不使用rundll进行后续程序的运行和权限的维持。有一天你我会发现事物的本质是如此重要……

(完)