[巅峰极客 2022]powerpower powershell的ConvertFrom-SecureString
520 字
3 分钟
[巅峰极客 2022]powerpower powershell的ConvertFrom-SecureString
- 1[巅峰极客 2022]powerpower powershell的ConvertFrom-SecureString本文
本题在线靶场地址
信息收集
搜索ctf,发现[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\CTF\SystemShared]路径下有base64编码


JFNlY3JldCA9ICd4eHh4eHh4eHh4eHh4eHgnCiRQYXNzcGhyYXNlID0gKEdldC1JdGVtUHJvcGVydHkgLVBhdGggYWFhYTpcU09GVFdBUkVcTWljcm9zb2Z0XEJpZEludGVyZmFjZSkKCiRrZXkgPSBbQnl0ZVtdXSgkUGFzc3BocmFzZS5QYWRSaWdodCgyNCkuU3Vic3RyaW5nKDAsMjQpLlRvQ2hhckFycmF5KCkpCgokU2VjcmV0IHwKICBDb252ZXJ0VG8tU2VjdXJlU3RyaW5nIC1Bc1BsYWluVGV4dCAtRm9yY2UgfCAKICBDb252ZXJ0RnJvbS1TZWN1cmVTdHJpbmcgLUtleSAka2V5IHwgCgo=->from base64$Secret = 'xxxxxxxxxxxxxxx'$Passphrase = (Get-ItemProperty -Path aaaa:\SOFTWARE\Microsoft\BidInterface)
$key = [Byte[]]($Passphrase.PadRight(24).Substring(0,24).ToCharArray())
$Secret | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString -Key $key |[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\BidInterface]

"F844A6035CF27CC4C90DFEAF579398BE6F7D5ED10270BD12A661DAD04191347559B82ED546015B07317000D8909939A4DA7953AED8B83C0FEE4EB6E120372F536BC5DC39"代码审计
- 作用可以概括为: 从注册表/某个 PowerShell 驱动器里取出一个口令,用它生成一个 24 字节的 AES 密钥,然后把明文 $Secret 加密成一段可保存的加密字符串。
- 逐行解释:
$Secret = 'xxxxxxxxxxxxxxx'定义要保护的明文内容,例如密码、密钥、令牌等。这里 xxxxxxxxxxxxxxx 只是占位符。
$Passphrase = (Get-ItemProperty -Path aaaa:\SOFTWARE\Microsoft\BidInterface)从某个路径读取数据。aaaa:\ 很可能是脱敏写法。 Get-ItemProperty 常用于读注册表项。注意:它通常返回一个对象,而不是直接返回字符串。所以后面直接 $Passphrase.PadRight(…) 很可能报错,除非这里实际取的是某个字符串属性,或者代码省略了 .属性名。
$key = [Byte[]]($Passphrase.PadRight(24).Substring(0,24).ToCharArray())把 key 是一个 24 字节的密钥。 ConvertFrom-SecureString -Key 支持的密钥长度通常是 16、24 或 32 字节,24 字节对应 AES-192。
$Secret | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString -Key $key |这部分是核心: key 使用 $key 作为 AES 密钥,把 SecureString 加密成一段普通加密字符串。 最后的 | 表示还有后续命令,比如可能被保存到文件或者赋值给变量,最终得到的是一个加密后的十六进制字符串
EXP
用python复现powershell的ConvertFrom-SecureString -Key解密方式
import base64from Crypto.Cipher import AESfrom Crypto.Util.Padding import unpad
enc = "76492d1116743f0423413b16050a5345MgB8AFQAegB3AFAAaAArAFcAVABwAEYAWABLAGoAUwBaAEsAQQBvAHAAagBrAFEAPQA9AHwAOABmADIAOQBmADkANgA4ADkAMABlADIAZgBmADgAMwA0AGEAYwAxADIAMgA5ADYAZgAyADMAMQBiAGEANAA2ADUAOQAxADEANgAyADUANwA2AGEAMgBkAGYANQBjAGQAYwA5ADQAMgAyAGMANgBiADIAYwA5ADEANgA3ADkAZgA1AGUAMgA5ADYANQAyADEAOAA1ADMAYwAyADcAZABhADAAZgA2AGQAOQA0AGEAOAA2ADEAMQA4ADIAZgBhADgAMwBjAGYAMwBmAGEAMQAwADYANQBmADIANwA0AGYANgAxADIAZAA5ADYANgBjAGQANQBkADAAOQA4AGEAMgAwADYAYQA5ADgAMgBkADkANABlAGEANABmADEAMAA0ADEAMQA4ADcAOABlADcAYQBmADQAMQBiADQAMgBmADEANwA="passphrase = "F844A6035CF27CC4C90DFEAF579398BE6F7D5ED10270BD12A661DAD04191347559B82ED546015B07317000D8909939A4DA7953AED8B83C0FEE4EB6E120372F536BC5DC39"key = passphrase[:24].encode("ascii")
# 去掉 PowerShell 固定前缀prefix = "76492d1116743f0423413b16050a5345"enc = enc[len(prefix):]decoded = base64.b64decode(enc).decode("utf-16le")iv=base64.b64decode(decoded.split('|')[1])cipher=bytes.fromhex(decoded.split('|')[2])aes = AES.new(key, AES.MODE_CBC, iv)flag = unpad(aes.decrypt(cipher), AES.block_size).decode("utf-16le")print(flag)文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
[巅峰极客 2022]powerpower powershell的ConvertFrom-SecureString
https://tuulei.cn/posts/dian-feng-ji-ke-2022-powerpower-powershellde-convertfrom-sec/相关文章智能推荐
1
[GFCTF 2021]双击开始冒险 鼠标流量
打靶场搜索这个QQ号,发现base64的密码,密码You love me, I love you......
2
[NISACTF 2022]checkin Unicode 双向控制字符(Bidi)混淆
打靶场这下看清楚了,VS Code能显示出这些不可见字符的占位符-- Unicode 控制字符
- \[U+202E] (RLO):从这里开始,后面的字符强制从右向左显示......
3
[watevrCTF 2019]Voting Machine
打靶场一个适合入门的pwn题
4
[UUCTF 2022 新生赛]funmd5 0e 碰撞与时间戳预测
打靶场preg_replace 的正则 `/^(.*)0e(.*)$/` 中,. 默认不匹配换行符 \n。如果字符串中包含换行符,且 0e 位于换行符之后,则整个正则无法......
5
[HNCTF 2022 WEEK4]unf1ni3hed_web3he1 LFI + Session反序列化 + 条件竞争
打靶场2026-09-26
随机文章随机推荐














