前言
对于后渗透阶段权限维持还是比较重要的一个环节,所以想总结一下在 Windows 、Linux 、 Webshell 下权限维持的姿势,并试着编写出后门检测脚本。文章内有错误的地方还请表哥们指出谢谢。
List账户隐藏
注册表开机自动启动项
DLL劫持
计划任务
文件夹启动
映像劫持
RID 劫持
快捷方式劫持
辅助功能权限维持
权限维持辅助脚本编写
0x1 账户隐藏
1.1 隐藏用户
net user administrator$ AdminPassw0ad!@ /add && net localgroup administrators administrator$ /add
1.2 激活 Guest用户
控制面板所有控制面板项用户帐户管理帐户启用来宾帐户
net user guest woaijiushi && net localgroup administrators guest /addnet user guest /active:yes
0x2 注册表开机自动启动项
2.1 Run键
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunHKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\RunHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
Tips: 其下的所有程序在每次启动登录时都会按顺序自动执行。
2.2 RunOnce键
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnceHKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
Tips: 与Run键不同的是,RunOnce下的程序仅会被自动执行一次。
2.3 RunServicesOnce键
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnceHKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
Tips: 其中的程序会在系统加载时自动启动执行一次。
2.4 RunServices键
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices
Tips: RunServices是继RunServicesOnce之后启动的程序。
2.5 RunOnceEx键
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceExHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
Tips: 该键是 Windows XP/2003 特有的自启动注册表项。
2.6 Load键
HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows
Tips: Load 键值的程序也可以自启动。
2.7 Winlogon键
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinlogonHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
Tips: 注意下面的 Notify、Userinit、Shell键值也会有自启动的程序,而且其键值可以用逗号分隔,从而实现登录的时候启动多个程序。
2.8 其他注册表位置
还有一些其他键值,程序会自动运行。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System\ShellHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoadHKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\System\ScriptsHKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\System\Scripts
Tips: 注册表的 HKEY_LOCAL_MACHINE 和 HKEY_CURRENT_USER 键的区别:前者对所有用户有效,后者只对当前用户有效。
0x3 DLL劫持
3.1 概述
在加载DLL过程中,系统都是先在程序目录加载DLL,如果没有找到就按照规定的顺序去搜索,但如果DLL的路径没有在system32中,攻击者就有可能伪造一个dll被程序加载。
系统在使用DLL搜索顺序取决于是否启用安全的DLL搜索模式。
Tips: Windows XP默认情况下禁用安全DLL搜索模式。之后默认启用安全DLL搜索模式。
若要使用此功能,需修改以下注册表值,0为禁止,1为启用。
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode
3.2 SafeDLLSearchMode启用后DLL搜索顺序
从其中加载应用程序的目录。
系统目录。使用GetSystemDirectory函数获取此目录的路径。
16位系统目录。没有获取此目录的路径的函数,但会搜索它。
Windows目录。使用GetWindowsDirectory函数获取此目录。
当前目录。
PATH环境变量中列出的目录。
3.3 SafeDLLSearchMode禁用后DLL搜索顺序
从其中加载应用程序的目录。
当前目录。
系统目录。使用GetSystemDirectory函数获取此目录的路径。
16位系统目录。没有获取此目录的路径的函数,但会搜索它。
Windows目录。使用GetWindowsDirectory函数获取此目录。
PATH环境变量中列出的目录。
3.4 DLL 劫持简易流程图
DLL 劫持利用搜索顺序来加载恶意DLL以代替合法DLL。如果应用程序使用Windows的DLL搜索来查找DLL,且攻击者可以将同名DLL的顺序置于比合法DLL更高的位置,则应用程序将加载恶意DLL。
(可以用来劫持系统程序,也可以劫持用户程序。劫持系统程序具有兼容性,劫持用户程序则有针对性)。
编译后劫持用的DLL文件改成原DLL文件的名字,原DLL文件改为代码中调用DLL文件的名字。(为了保证应用程序的正常运行,需要在执行恶意DLL文件后继续加载应用程序缺失的DLL文件)。
0x4 计划任务
schtasks /create /sc ONLOGON /mo modifier /tr C:\Windows\System32\cmd.exe /tn test
4.1 命令解析
创建新的计划任务。
schtasks /create
指定计划类型。有效值为 MINUTE
、HOURLY
、DAILY
、WEEKLY
、MONTHLY
、ONCE
、ONSTART
、ONLOGON
、ONIDLE
。
/sc schedule
指定任务在其计划类型内的运行频率。这个参数对于 MONTHLY
计划是必需的。对于 MINUTE
、HOURLY
、DAILY
或 WEEKLY
计划,这个参数有效,但也可选。默认值为 1。
/sc schedule
指定任务在其计划类型内的运行频率。这个参数对于 MONTHLY
计划是必需的。对于 MINUTE
、HOURLY
、DAILY
或 WEEKLY
计划,这个参数有效,但也可选。默认值为 1。
/mo modifier
指定任务运行的程序或命令。如果忽略该路径,SchTasks.exe
将假定文件在 Systemroot\System32
目录下。
/tr <TaskRun>
指定任务的名称。
/tn
4.2 常用命令
每分钟执行一次任务。
schtasks /create /sc MINUTE /mo 1 /tn calc_update /tr "C:\\Users\\liuxueshuo\\AppData\\Local\\Temp\\calc_update.exe"
每小时执行一次任务。
schtasks /create /sc HOURLY /mo 1 /tn calc_update /tr "C:\\Users\\liuxueshuo\\AppData\\Local\\Temp\\calc_update.exe"
每天执行一次任务。
schtasks /create /sc DAILY /mo 1 /tn calc_update /tr "C:\\Users\\liuxueshuo\\AppData\\Local\\Temp\\calc_update.exe"
每周执行一次任务。
schtasks /create /sc WEEKLY /mo 1 /tn calc_update /tr "C:\\Users\\liuxueshuo\\AppData\\Local\\Temp\\calc_update.exe"
删除计划任务。
schtasks /Delete /TN 任务名称 /F
参考引用:schtasks命令详解
0x5 文件夹启动
在每次开机或重启的时候就会运行启动文件夹下的程序。
C:\Users\{UserName}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\StartupC:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
0x6 映像劫持
在下面注册表路径下创建一个子项,子项的名称为你要劫持的exe
名称,比如 cmd.exe
然后创建一个值,键名为Debugger
, 值为要执行的恶意脚本。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
运行 cmd.exe
时执行成功运行 calc.exe
。
Tips:测试时安全软件拦截,所以要先退出杀软。
0x7 RID 劫持
新建一个普通用户 admin
,在下面注册表中。
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names
找到 admin
对于Windows
系统来说,注册表下包含当前系统的所有帐户列表,每个帐户的默认键值对应该帐户详细信息的注册表位置 (即RID
的十六进制表示)。
Tips:SAM
下的注册表选项需要获得system
权限才能读取
查看 administrator
对应键值,数值名称为F
,数值内容 0030
的位置复制到 admin
对应键值,数值名称为F
,数值内容 0030
的位置。
点击确定然后关机重启,登陆 admin
用户。
0x8 快捷方式劫持
Windows快捷方式包含对系统上安装的软件或文件位置(网络或本地)的引用。快捷方式的文件扩展名是.LNK
,它为 红队提供了很多机会来执行各种格式的代码 exe
、vbs
、Powershell
、scriptlet
等。
如下案例,powershell
并没有做任何处理只做演示学习。
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -c "invoke-item 'C:\Program Files\ChromeCore\ChromeCoreLauncher.exe'; invoke-item c:\Users\liuxueshuo\AppData\Local\Temp\calc_update.exe"
Tips: 调用Powershell程序事图标会更改为相应程序(Powershell)的图标,注意修改图标。
0x9 辅助功能权限维持
辅助功能提供了其他选项(屏幕键盘、放大镜、屏幕阅读等),可以帮助残疾人更轻松地使用 Windows操作系统但是,此功能可能会被滥用,以在已启用RDP
且已获得管理员级别权限的主机上实现持久性。
9.1 常用的辅助功能
shift 后门
放大镜后门
屏幕键盘后门
...
0x10 权限维持辅助脚本编写
后门检测及后门放置自动化,懒放放再写。