Impacket
是一款用于处理网络协议的python类的集合。下面介绍Impacket中一些常用脚本的常见用法。
远程连接
以下6个远程连接脚本均可以使用明文密码或密码hash进行远程连接
对于域环境:连接域内普通主机,可以使用普通域用户账户。连接域控,需要域管理员账户(可以是非administrator)
对于工作组环境:vista系统之前的系统,可以使用本地管理员组的用户进行连接。vista以后的系统,只能使用administrator用户去连接,其他用户包括在管理员组内的非administrator用户都不行。
原理
通过管道上传一个二进制文件(随机命名的exe程序)到目标机器的C:\Windows目录下,并在远程目标机器上创建一个服务(随机命名的服务)。通过该服务运行二进制文件,运行结束后删除服务和二进制文件。由于创建和删除服务时会产生大量的日志,因此在攻击溯源时通过日志可以反推攻击流程。该脚本在执行上传的二进制文件时,会被杀毒软件查杀。
利用条件
目标主机开启445端口、IPC$和非IPC$的任意可写共享。默认情况下C$和admin$时开启的
连接
#使用明文密码进行连接
impacket-psexec <administrator:[email protected]8>
#使用密码hash进行连接
impacket-psexec [email protected] -hashes 504f1ff24983db007418099e75c36b94:87dde62120889af6d13e2613f475ac15原理
通过文件共享在远程系统中创建服务,将要运行的命令通过服务写在bat文件中执行,然后将执行结果写在文件中来获取执行命令的输出,最后将bat文件、输出文件和服务都删除。
创建和删除服务时会产生大量的日志,因此在攻击溯源时通过日志可以反推攻击流程。windows defender会对其进行查杀,会导致执行不成功。
该脚本默认创建的服务名称为BTOBTO。
利用条件
目标主机开启445端口、IPC$和非IPC$的任意可写共享,可以使用除ipc$共享外的其他所有共享。该脚本默认使用的是C$,可以使用
-share参数指定其他的共享。连接
该脚本主要通过wmi来实现命令执行,在躲避AV查杀方面做的最好
利用条件
目标主机开启135和445端口,并且依赖于admin$。135端口用来执行命令,445端口用来读取回显
连接
通过任务计划服务(task scheduler)来在目标主机上实现命令执行,并返回命令执行后的结果
通过DCOM在目标主机上实现命令执行,并返回命令执行后的输出结果
这个脚本可以向服务器上传文件
连接
连接成功后的命令
获取域内所有用户的Hash(secretsdump.py)
该脚本是利用DCSync功能导出域内用户的Hash,需要连接的账户和密码具有DCSync权限
获取域内所有用户的hash
使用卷影复制服务导出域内所有Hash
获取域内指定krbtgt用户的hash
如果当前导入了管理员的票据,则可以不需要密码直接导出hash
如果是域林,则指定的用户需要加载域前缀
生成黄金票据(ticketer.py)
详见域权限维持与后渗透密码收集
生成黄金票据
导入票据
导出administrator用户的hash
请求TGT(getTGT.py)
给定域用户、密码/Hash/AESKey。将请求TGT并保存为.ccache格式的TGT。生成的TGT可用于下一步请求ST。
请求ST(getST.py)
使用账号密码请求ST
导入票据
访问指定服务
使用TGT生成的票据请求ST的命令:
导入请求的TGT票据
请求指定SPN的ST
访问指定服务
获取域的SID(lookupsid.py)
如果获取了域内任意一个账号密码,可以使用该脚本获得该域的sid值
枚举域用户(samrdump.py)
通过SAMR协议 枚举出域内所有用户,使用时需要一个有效的域账号
增加机器账户(addcomputer.py)
远程连接域控添加一个机器账户,使用时需要一个有效的域用户。该脚本支持两种方式进行远程创建,SAMR协议及LDAPS协议。
使用SAMR协议创建的机器用户没有SPN,使用LDAPS创建的机器用户具有SPN
使用SAMR协议远程创建一个机器账户machines$,密码为root
使用LDAPS协议创建一个机器账户machine$,密码为root
修改密码,只需加上
no-add参数
AS-REP Roasting攻击(GetNPUsers.py)
原理可以参考:域内渗透手法(一)
当在域外时,执行以下命令。自动获取指定user.txt文件中的用户是否设置了“不需要kerberos预身份验证”属性,并获取设置了该属性账户的hash加密的Login session key
Kerberoasting攻击(GetUserSPNs.py)
原理可以参考:域内渗透手法(一)
具体实现方法,参照上面的文章。
票据转换(ticketConverter.py)
可以将.ccache和.kribi格式的票据进行转换
增加、删除和查询SPN(addspn.py)
该脚本可用于增加、删除SPN。但是增加SPN需要域管理员权限,而删除SPN只需要对目标属性有修改的权限即可。
这个脚本在kali中没找到,在最新的Github impacket仓库中也没找到,未复现。
这有帮助吗?