Loading... 参考: LOLBAS:https://lolbas-project.github.io/lolbas/Binaries/Runonce/ # 利用一:安全模式下可执行的带 * 自启动项 参考:https://cmatskas.com/configure-a-runonce-task-on-windows/ 参考:https://twitter.com/LabsSentinel/status/1421751536422637573 Run 及 RunOnce 注册表自启动项指示那些在系统 logon 登录成功后会自启动的命令(因此不一定要重启,切换用户登录也可执行),其中 Run 注册表项会一直存在,而 RunOnce 项在执行一次后便会删除。许多恶意样本会通过添加自启动项来完成持久化工作。 但有一个挑战是,即使完成了持久化,恶意样本也依然需要面对安全软件的监控。而**在安全模式下所有第三方驱动及程序都无法运行**,因此如果恶意样本如果在安全模式下也能运行,则可以逃脱安全软件的监控。 在[微软官方](https://docs.microsoft.com/en-us/windows/win32/setupapi/run-and-runonce-registry-keys)说明中,在添加 RunOnce 自启动项时如果在键名称前加一个 *,那么即使身处安全模式,这个自启动项也能成功执行。 ![图片.png](http://47.117.131.13/usr/uploads/2021/12/3711489789.png) 设置注册表: ![图片.png](http://47.117.131.13/usr/uploads/2021/12/2813724753.png) 安全模式运行后的确创建了记事本进程,再查看注册表,*a2 项已经执行完删除了: ![图片.png](http://47.117.131.13/usr/uploads/2021/12/3029176203.png) 将 notepad 及 procexp64 都设置为安全模式下的启动项,安全模式登录后,先启动 notepad.exe,关闭 notepad 后才启动 procexp64,这里有一个先后顺序。继续用 procexp64 查看此时的进程树,可见处理 RunOnce 自启动项的进程是 C:\Windows\system32\RunOnce.exe: ![图片.png](http://47.117.131.13/usr/uploads/2021/12/1274757718.png) # 利用二:RunOnce /AlternateShellStartup 启动进程 参考:https://twitter.com/pabraeken/status/990717080805789697 在指定注册表项 `HKLM\SOFTWARE\Microsoft\Active Setup\Installed Component\[自定义项]` 中创建以下键值对: * @ -> Hi from Active Setup * SubPath -> C:\Windows\system32\notepad.exe 示例: ![图片.png](http://47.117.131.13/usr/uploads/2021/12/3685684062.png) 然后通过 RunOnce.exe /AlternateShellStartup 即可启动 notepad.exe,示例: ![图片.png](http://47.117.131.13/usr/uploads/2021/12/559477696.png) 创建 notepad.exe 调用栈: ``` 2: kd> k # ChildEBP RetAddr WARNING: Stack unwind information not available. Following frames may be wrong. 00 001febac 762b2079 ntdll!ZwCreateUserProcess+0xc 01 001febe4 766d55c1 kernel32!CreateProcessW+0x2c 02 001fecdc 766e2bda SHELL32!_SHCreateProcess+0x251 03 001fed30 766d53c5 SHELL32!CExecuteApplication::_CreateProcess+0xfc 04 001fed40 766d5379 SHELL32!CExecuteApplication::_TryCreateProcess+0x2e 05 001fed50 766d47d1 SHELL32!CExecuteApplication::_DoApplication+0x48 06 001fed60 766ef6b1 SHELL32!CExecuteApplication::Execute+0x33 07 001fed80 766d4a1c SHELL32!CExecuteAssociation::_DoCommand+0x88 08 001feda4 766ef733 SHELL32!CExecuteAssociation::_TryApplication+0x41 09 001fedc4 766f0ff1 SHELL32!CExecuteAssociation::Execute+0x5f 0a 001fedf4 766f0f22 SHELL32!CRegDataDrivenCommand::_Invoke+0xe2 0b 001fee08 766f1175 SHELL32!CRegDataDrivenCommand::InvokeFromContextMenu+0x18 0c 001fee34 766f10d8 SHELL32!CRegistryVerbsContextMenu::_Execute+0x5a 0d 001ff0a8 766f056c SHELL32!CRegistryVerbsContextMenu::InvokeCommand+0xa4 0e 001ff12c 766f0444 SHELL32!HDXA_LetHandlerProcessCommandEx+0x132 0f 001ff40c 76a761b9 SHELL32!CDefFolderMenu::InvokeCommand+0x1ca 10 001ff620 76a76427 SHELL32!_ShellExecuteRunApp+0x1bc 11 001ff65c 76a76826 SHELL32!_ShellExecuteRegAppWorker+0x47 12 001ff67c 7687a83d SHELL32!ShellExecuteRegApp+0x3f 13 001ffc7c 766c36a8 SHELL32!RunOneInstallStub+0x494 14 001ffe68 766c2edf SHELL32!RunInstallUninstallStubsWorker+0x233 15 001ffe78 003975d3 SHELL32!RunInstallUninstallStubs+0x12 16 001ffe80 00395fc6 runonce!ProcessInstallUninstallStubs+0x12 17 001ffe94 00396183 runonce!ParseCmdLine+0x147 18 001ffeac 00396e0a runonce!wWinMain+0x4d 19 001fff40 762fed6c runonce!_initterm_e+0x1b1 1a 001fff4c 774137eb kernel32!BaseThreadInitThunk+0xe 1b 001fff8c 774137be ntdll!RtlInitializeExceptionChain+0xef 1c 001fffa4 00000000 ntdll!RtlInitializeExceptionChain+0xc2 ``` ![图片.png](http://47.117.131.13/usr/uploads/2021/12/3461166757.png) 注意:该注册表项只生效一次,除非更改 Installed Components 下的自定义项名称。 最后修改:2021 年 12 月 24 日 10 : 37 AM © 允许规范转载