Impacket

是一款用于处理网络协议的python类的集合。下面介绍Impacket中一些常用脚本的常见用法。

远程连接

以下6个远程连接脚本均可以使用明文密码或密码hash进行远程连接

  • 对于域环境:连接域内普通主机,可以使用普通域用户账户。连接域控,需要域管理员账户(可以是非administrator)

  • 对于工作组环境:vista系统之前的系统,可以使用本地管理员组的用户进行连接。vista以后的系统,只能使用administrator用户去连接,其他用户包括在管理员组内的非administrator用户都不行。

  1. 原理

    通过管道上传一个二进制文件(随机命名的exe程序)到目标机器的C:\Windows目录下,并在远程目标机器上创建一个服务(随机命名的服务)。通过该服务运行二进制文件,运行结束后删除服务和二进制文件。由于创建和删除服务时会产生大量的日志,因此在攻击溯源时通过日志可以反推攻击流程。该脚本在执行上传的二进制文件时,会被杀毒软件查杀。

  2. 利用条件

    目标主机开启445端口、IPC$和非IPC$的任意可写共享。默认情况下C$和admin$时开启的

  3. 连接

#使用明文密码进行连接
impacket-psexec <administrator:[email protected]8>

#使用密码hash进行连接
impacket-psexec [email protected] -hashes 504f1ff24983db007418099e75c36b94:87dde62120889af6d13e2613f475ac15

  1. 原理

    通过文件共享在远程系统中创建服务,将要运行的命令通过服务写在bat文件中执行,然后将执行结果写在文件中来获取执行命令的输出,最后将bat文件、输出文件和服务都删除。

    创建和删除服务时会产生大量的日志,因此在攻击溯源时通过日志可以反推攻击流程。windows defender会对其进行查杀,会导致执行不成功。

    该脚本默认创建的服务名称为BTOBTO。

  2. 利用条件

    目标主机开启445端口、IPC$和非IPC$的任意可写共享,可以使用除ipc$共享外的其他所有共享。该脚本默认使用的是C$,可以使用-share参数指定其他的共享。

  3. 连接

该脚本主要通过wmi来实现命令执行,在躲避AV查杀方面做的最好

  1. 利用条件

    目标主机开启135和445端口,并且依赖于admin$。135端口用来执行命令,445端口用来读取回显

  2. 连接

通过任务计划服务(task scheduler)来在目标主机上实现命令执行,并返回命令执行后的结果

通过DCOM在目标主机上实现命令执行,并返回命令执行后的输出结果

这个脚本可以向服务器上传文件

  1. 连接

  1. 连接成功后的命令

获取域内所有用户的Hash(secretsdump.py)

该脚本是利用DCSync功能导出域内用户的Hash,需要连接的账户和密码具有DCSync权限

  • 获取域内所有用户的hash

  • 使用卷影复制服务导出域内所有Hash

  • 获取域内指定krbtgt用户的hash

  • 如果当前导入了管理员的票据,则可以不需要密码直接导出hash

  • 如果是域林,则指定的用户需要加载域前缀

生成黄金票据(ticketer.py

详见域权限维持与后渗透密码收集

  1. 生成黄金票据

  1. 导入票据

  1. 导出administrator用户的hash

请求TGT(getTGT.py

给定域用户、密码/Hash/AESKey。将请求TGT并保存为.ccache格式的TGT。生成的TGT可用于下一步请求ST。

请求ST(getST.py

  1. 使用账号密码请求ST

  1. 导入票据

  1. 访问指定服务

使用TGT生成的票据请求ST的命令:

  1. 导入请求的TGT票据

  1. 请求指定SPN的ST

  1. 访问指定服务

获取域的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仓库中也没找到,未复现。

这有帮助吗?