Skip to content

Commit 1dd6f1d

Browse files
committed
Add function to convert from package SID to capability SID.
1 parent 41f60d1 commit 1dd6f1d

3 files changed

Lines changed: 33 additions & 3 deletions

File tree

NtApiDotNet/NtSecurity.cs

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ public static string LookupPackageName(Sid sid)
205205
{
206206
if (!IsPackageSid(sid))
207207
{
208-
throw new ArgumentException("Sid not a package sid", "sid");
208+
throw new ArgumentException("Sid not a package sid", nameof(sid));
209209
}
210210

211211
return _package_names.GetOrAdd(sid, _ =>
@@ -246,7 +246,7 @@ public static string LookupDeviceCapabilityName(Sid sid)
246246
{
247247
if (!IsCapabilitySid(sid))
248248
{
249-
throw new ArgumentException("Sid not a capability sid", "sid");
249+
throw new ArgumentException("Sid not a capability sid", nameof(sid));
250250
}
251251

252252
var device_capabilities = GetDeviceCapabilities();
@@ -257,6 +257,24 @@ public static string LookupDeviceCapabilityName(Sid sid)
257257
return null;
258258
}
259259

260+
/// <summary>
261+
/// Convert a package SID to a capability.
262+
/// </summary>
263+
/// <param name="sid">The package SID to convert.</param>
264+
/// <returns>The package SID as a capability.</returns>
265+
public static Sid PackageSidToCapability(Sid sid)
266+
{
267+
if (!IsPackageSid(sid))
268+
{
269+
throw new ArgumentException("Sid not a package sid", nameof(sid));
270+
}
271+
272+
uint[] sub_authorities = sid.SubAuthorities.ToArray();
273+
// Convert to a package SID.
274+
sub_authorities[0] = 3;
275+
return new Sid(sid.Authority, sub_authorities);
276+
}
277+
260278
/// <summary>
261279
/// Convert a security descriptor to SDDL string
262280
/// </summary>
@@ -2472,6 +2490,7 @@ private static SidName GetNameForSidInternal(Sid sid)
24722490
{
24732491
switch (sid.SubAuthorities.Count)
24742492
{
2493+
case 12:
24752494
case 8:
24762495
uint[] sub_authorities = sid.SubAuthorities.ToArray();
24772496
// Convert to a package SID.

NtObjectManager/Cmdlets/Object/GetNtSidCmdlet.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,12 @@ public class GetNtSidCmdlet : PSCmdlet
135135
[Parameter(ParameterSetName = "package")]
136136
public string RestrictedPackageName { get; set; }
137137

138+
/// <summary>
139+
/// <para type="description">Specify the package SID should be in capability format.</para>
140+
/// </summary>
141+
[Parameter(ParameterSetName = "package")]
142+
public SwitchParameter AsCapability { get; set; }
143+
138144
/// <summary>
139145
/// <para type="description">Get a known SID.</para>
140146
/// </summary>
@@ -289,6 +295,10 @@ protected override void ProcessRecord()
289295
{
290296
sid = TokenUtils.DeriveRestrictedPackageSidFromSid(sid, RestrictedPackageName);
291297
}
298+
if (AsCapability)
299+
{
300+
sid = NtSecurity.PackageSidToCapability(sid);
301+
}
292302
break;
293303
case "known":
294304
sid = KnownSids.GetKnownSid(KnownSid);

NtObjectManager/Cmdlets/Object/GetNtTokenCmdlet.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,7 @@ public sealed class GetNtTokenCmdlet : PSCmdlet
397397
/// <para type="description">Specify package SID or a package name.</para>
398398
/// </summary>
399399
[Parameter(Mandatory = true, ParameterSetName = "LowBox"), Parameter(ParameterSetName = "AppContainer")]
400+
[Alias("pkg")]
400401
public string PackageSid { get; set; }
401402

402403
/// <summary>
@@ -409,7 +410,7 @@ public sealed class GetNtTokenCmdlet : PSCmdlet
409410
/// <para type="description">Specify list of capability SIDS to add to token. Can specify an SDDL format string or a capability name.</para>
410411
/// </summary>
411412
[Parameter(ParameterSetName = "LowBox"), Parameter(ParameterSetName = "AppContainer")]
412-
[Alias("CapabilitySids")]
413+
[Alias("CapabilitySids", "cap")]
413414
public string[] CapabilitySid { get; set; }
414415

415416
/// <summary>

0 commit comments

Comments
 (0)