视频加载失败

[巅峰极客 2022]powerpower powershell的ConvertFrom-SecureString

520 字
3 分钟
[巅峰极客 2022]powerpower powershell的ConvertFrom-SecureString
  1. 1[巅峰极客 2022]powerpower powershell的ConvertFrom-SecureString本文

本题在线靶场地址#

https://www.nssctf.cn/problem/2515

信息收集#

搜索ctf,发现[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\CTF\SystemShared]路径下有base64编码

2026-09-22_19-04-37.png
2026-09-22_19-04-37.png
2026-09-22_19-06-14.png
2026-09-22_19-06-14.png

Terminal window
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]

2026-09-22_19-17-12.png
2026-09-22_19-17-12.png

"F844A6035CF27CC4C90DFEAF579398BE6F7D5ED10270BD12A661DAD04191347559B82ED546015B073
17000D8909939A4DA7953AED8B83C0FEE4EB6E120372F536BC5DC39"

代码审计#

  • 作用可以概括为: 从注册表/某个 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())

把 Passphrase处理成24个字节的密钥:1.PadRight(24):如果口令不足24个字符,就在右边补空格到24个字符。2.Substring(0,24):只取前24个字符。如果超过24个字符,后面的会被截断。3.ToCharArray():转成字符数组。4.\[Byte\[]]:再强制转换成字节数组。所以Passphrase 处理成 24 个字节的密钥: 1. PadRight(24):如果口令不足 24 个字符,就在右边补空格到 24 个字符。 2. Substring(0,24):只取前 24 个字符。如果超过 24 个字符,后面的会被截断。 3. ToCharArray():转成字符数组。 4. \[Byte\[]]:再强制转换成字节数组。 所以 key 是一个 24 字节的密钥。 ConvertFrom-SecureString -Key 支持的密钥长度通常是 16、24 或 32 字节,24 字节对应 AES-192。

$Secret |
ConvertTo-SecureString -AsPlainText -Force |
ConvertFrom-SecureString -Key $key |

这部分是核心: Secret是明文。ConvertTo−SecureString−AsPlainText−Force把明文转换成SecureString。ConvertFrom−SecureString−KeySecret 是明文。 ConvertTo-SecureString -AsPlainText -Force 把明文转换成 SecureString。 ConvertFrom-SecureString -Key key 使用 $key 作为 AES 密钥,把 SecureString 加密成一段普通加密字符串。 最后的 | 表示还有后续命令,比如可能被保存到文件或者赋值给变量,最终得到的是一个加密后的十六进制字符串

EXP#

用python复现powershell的ConvertFrom-SecureString -Key解密方式

import base64
from Crypto.Cipher import AES
from 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/
作者
tuulei
发布于
2026-09-22
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
tuulei
请你再闪亮一点点,尽管我太平凡。
公告
分类
标签
最新动态
站点统计
文章
13
分类
4
标签
16
总字数
17,835
运行时长
0 天
最后活动
0 天前
总访问量
--
文章目录