Windows权限维持

前言

  权限维持是我认为在渗透中非常重要的一个环节,谁也不希望好不容易拿到的shell,就这样被丢掉了,故基于此场景整理Windows环境中的持久化方法。

启动目录

  只要放在该目录下的程序或者快捷方式,会在用户登录时自动运行

对当前用户有效
C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
对所有用户有效
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

服务

  通过在注册表中注册恶意服务并设置为自启动的方式来进行持久化。
  创建服务至少需要管理员权限

cmd

  示例命令:sc create 服务名 binpath= "命令" start= "auto" obj= "LocalSystem"

sc create cs binpath= "cmd.exe /k C:\artifact.exe" start="auto" obj="LocalSystem"
sc start cs #启动服务

  
  将返回一个system权限的shell,虽然提示服务没有及时响应启动或控制请求,但shell一样能用,不管它。
  
  在服务里面能看见刚刚创建的cs的存在
  
  注册表
  

powershell

  示例命令:New-service -Name "服务名" -BinaryPathName "命令" -Description "服务描述" -StartupType Automatic

New-service -Name "cs" -BinaryPathName "cmd.exe /k C:\artifact.exe" -Description "cs" -StartupType Automatic

  
  删除服务的命令,sc delete 服务名

sc delete cs

计划任务

  计划任务也是一项很好的持久化利用点。不同于自启注册键和服务项,计划任务的设定方式更多样、灵活,位置也相对较为隐蔽

SCHTASKS /Create /RU SYSTEM /SC ONSTART /RL HIGHEST /TN \Microsoft\Windows\AppID\cs /TR C:\artifact.exe

  将在AppID下创建一个cs任务,位置在计算机管理\系统工具\任务计划程序\任务计划程序库\Microsoft\Windows\AppID
  
  无需登录,等个一两分钟,即可收到system权限的beacon
  
  下图的这些选项是创建任务时的默认状态
  
  也就是说我们的计划任务不会在睡眠唤醒时启动,断开交流电源自动停止,超过3天自动停止。而这些高级选项却不支持用命令行配置。我的解决办法是
  在本地创建一个计划任务,空白处右键选择创建基本任务
  
  名称随便填,描述随便填
  
  触发器按需求来
  
  选启动程序
  
  注意,这里的程序脚本路径要填靶机的木马路径,我将木马放在靶机的c:\test.exe
  
  创建好后,来到属性界面,就可以自定义计划任务,我先设置常规选项,以system权限运行
  
  也可以来到触发器配置,根据需求配置
  
  每个选项卡都去配置一下
  
  配置完成后,回到计算机管理界面,选择导出
  
  编辑导出的xml文件,找到Author,为了更真实将中间的作者替换成Microsoft Corporation
  
  将xml文件上传到靶机去,这里我上传到c:\cs.xml,输入以下命令导入配置文件

schtasks /create /xml c:\cs.xml /tn \Microsoft\Windows\AppID\cs

  
  
  这样就完美的解决了命令行无法配置的问题,非常nice

Logon Scripts后门

  Windows登录脚本,当用户登录时触发,Logon Scripts能够优先于杀毒软件执行,绕过杀毒软件对敏感操作的拦截。
  注册表位置:HKEY_CURRENT_USER\Environment\
  创建字符串键值: UserInitMprLogonScript,设置后门的绝对路径:e:\cs.exe
  
  在欢迎界面就已经执行木马了
  

后台打印程序服务

  后台打印程序服务负责管理Windows操作系统中的打印作业,由于很多用户还是要使用打印机的,所以优化软件也不会推荐禁用这个服务。打印后台处理程序的API包含一个函数-AddMonitor,用于安装本地端口监视器并连接配置、数据和监视器文件。该函数会将DLL注入到spoolsv.exe进程以实现相应功能。
  首先将恶意dll命名为monitor.dll,放到C:\Windows\System32\路径下
  
  执行以下命令

reg add "hklm\system\currentcontrolset\control\print\monitors\monitor" /v "Driver" /d "monitor.dll" /t REG_SZ

  
  注册表路径为:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\monitor
  
  重新启动后,在登录界面返回system权限的beacon,优先级高于杀软
  
  可看到beacon的pid是1508,查找一下1508的pid
  
  恶意DLL则会被自动加载到spoolsv.exe,隐蔽性较强

netsh

  netsh也是Windows自带的命令,是用来配置网络的命令行工具。该工具可以通过导入helperdll的方式实现功能,且DLL导入后会写进注册表,永久有效
  通过以下命令导入helperdll做权限维持

netsh add helper c:\cs.dll

  注册表的路径为:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NetSh
  
  每次调用netst,均会加载c:\cs.dll
  
  但是由于netsh并不会开启自启动,因此还要再写一条自启动项:

reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run" /v Pentestlab /t REG_SZ /d "cmd /c C:\Windows\System32\netsh"

  重启电脑后,虽然能上线,但会弹出cmd窗口
  
  清除命令

netsh delete helper c:\cs.dll

Office 模板宏

  文档路径

%appdata%\Microsoft\Templates

  此文件夹存储着用户所有的模板文件,用户可根据自身需求,定制不同的字体、颜色、背景的基础模板。每当新建一个Office文件时都会使用一个默认的模板,即Normal.dotm
  
  如果将恶意宏嵌入到模板中,就可以形成持续性控制。每当用户运行office就可触发恶意宏,以达到持续效果。
  以下步骤请按照我的来,如果有一步出错,你就可能复现不起。
  使用cs生成宏,具体步骤自己搜索
  
  打开%appdata%\Microsoft\Templates下的Normal.dotm,切换视图选项卡,点击下的查看宏
  
  宏名随便输入后,点创建
  
  将cs生成的宏木马,复制替换掉默认的宏代码
  
  保存当前的宏代码后,关闭窗口,回到原来的word编辑区,按f12另存为,保存的位置选择到%appdata%\Microsoft\Templates,保存类型为启用宏的 Word 模板 (*.dotm),文件名随便
  
  最后来到%appdata%\Microsoft\Templates
  
  打开Normal.dotm,再查看宏,你会发现明明我们修改的是Doc1.dotm,然而Normal.dotm也被嵌入了恶意宏。之后删除Doc1.dotm即可,Normal.dotm里面的恶意宏也会被保留下来。
  
  新建一个word,然后直接打开,cs正常上线
  

参考资料

Windows 权限维持
Windows权限维持技术整理
权限维持及后门持久化技巧总结

查看评论 -
评论