本地安全管理審覈UDF 第2版 - lsasecur.au3

第2版的lsasecur包括第1版LocalSecurityAuthority的所有功能,並添加了一些新特性(帶*星號的爲新功能):

讀取或設置文件、服務、註冊表、共享文件、內核對象的安全信息。
提升進程權限,模擬SYSTEM登錄,或創建任意用戶場景下的用戶進程。
添加、刪除用戶或用戶組。
讀取、設置用戶或用戶組的各種信息。
添加、刪除用戶權限。
存取私有數據,或讀取系統安全數據庫中的各種密碼。
*驗證文件散列、數字簽名。
*利用空白U盤備份用戶密碼。
*備份及導入“安全描述符”。
*截取程序異常,並恢復程序運行。
*調用DPAPI加解密數據。
*自定義次數的進程實例。
*模擬進程文件路徑。
還有很多,非常多。

函數列表:

1:; ___SeReleaseSemaphoreInstance
2:; ___SeSEHDefaultHandler
3:; __SeCertCloseStore
4:; __SeCertFindCertificateInStore
5:; __SeCertGetNameText
6:; __SeCertNameToText
7:; __SeCreateSemaphore
8:; __SeCreateThread
9:; __SeDecodeObject
10:; __SeFileTimeToSystemTime
11:; __SeGetExitCodeThread
12:; __SeGetProcAddress
13:; __SeLongPtrToBytes
14:; __SeMsgClose
15:; __SeMsgGetParam
16:; __SeQueryObject
17:; __SeReleaseSemaphore
18:; __SeSEHDefaultHandler
19:; __SeStringToBytesA
20:; __SeTreeResetSecurityCallBack
21:; __SeVirtualAlloc
22:; __SeWaitForObject
23:; _SeAddAccessAllowedAceEx
24:; _SeAddAccessDeniedAceEx
25:; _SeAddAccountRight
26:; _SeAddAce
27:; _SeAddAuditAccessAceEx
28:; _SeAddLocalGroupMembers
29:; _SeAdjustTokenPrivs
30:; _SeAllocAndInitSid
31:; _SeAllocGUID
32:; _SeAllocLUID
33:; _SeApiBufferFree
34:; _SeAreAllAccessesGranted
35:; _SeAreAnyAccessesGranted
36:; _SeBackupPassword
37:; _SeBinaryToString
38:; _SeCheckTokenMembership
39:; _SeCipherDes16
40:; _SeCloseHandle
41:; _SeClosePolicy
42:; _SeCompareUserRight
43:; _SeCompareUserRightEx
44:; _SeConvertDesiredAccess
45:; _SeConvertSDToStringSD
46:; _SeConvertSidToSSid
47:; _SeConvertSSidToSid
48:; _SeConvertStringSDToSD
49:; _SeCopyMemory
50:; _SeCopySid
51:; _SeCreateAce
52:; _SeCreateBuffer
53:; _SeCreateLocalGroup
54:; _SeCreateLocalUser
55:; _SeCreateLogonProcess
56:; _SeCreateSecret
57:; _SeCreateSecurityDescriptor
58:; _SeCreateServiceSid
59:; _SeCreateSystemProcess
60:; _SeCreateUserProcess
61:; _SeCreateWellKnownSid
62:; _SeDeleteAce
63:; _SeDeleteLocalGroup
64:; _SeDeleteLocalGroupMembers
65:; _SeDeleteLocalUser
66:; _SeDuplicateAcl
67:; _SeDuplicateHandle
68:; _SeDuplicateSD
69:; _SeDuplicateToken
70:; _SeDuplicateTokenEx
71:; _SeEnumAccountRights
72:; _SeEnumAccounts
73:; _SeEnumAccountsWithUserRight
74:; _SeEnumEntriesFromAcl
75:; _SeEnumExplicitEntriesFromAcl
76:; _SeEnumInheritedEntriesFromAcl
77:; _SeEnumLocalGroupMembers
78:; _SeEnumLocalGroups
79:; _SeEnumLocalUsers
80:; _SeEnumPrivateData
81:; _SeEnumPrivs
82:; _SeEnumTokenGroups
83:; _SeEnumTokenPrivs
84:; _SeEnumUserLocalGroups
85:; _SeEnumWellKnownSids
86:; _SeEqualDomainSid
87:; _SeEqualPrefixSid
88:; _SeEqualSid
89:; _SeEqualToken
90:; _SeExportSecurityDescriptor
91:; _SeFillMemory
92:; _SeFormatMsg
93:; _SeFreeMemory
94:; _SeFreeSid
95:; _SeGenRandom
96:; _SeGetAce
97:; _SeGetAceDetails
98:; _SeGetAclInformation
99:; _SeGetEffectiveRightsFromAcl
100:; _SeGetFileSecurity
101:; _SeGetFileSignature
102:; _SeGetInheritanceSource
103:; _SeGetKernelObjectSecurity
104:; _SeGetLengthSid
105:; _SeGetLocalGroupInfo
106:; _SeGetLocalUserInfo
107:; _SeGetNamedAccessRights
108:; _SeGetNamedSecurityInfo
109:; _SeGetRegKeySecurity
110:; _SeGetSecretSecurity
111:; _SeGetSecurityDescriptorControl
112:; _SeGetSecurityDescriptorDacl
113:; _SeGetSecurityDescriptorGroup
114:; _SeGetSecurityDescriptorLength
115:; _SeGetSecurityDescriptorOwner
116:; _SeGetSecurityDescriptorSacl
117:; _SeGetSecurityInfo
118:; _SeGetServiceSecurity
119:; _SeGetShareObjectDacl
120:; _SeGetSidIdentifierAuthority
121:; _SeGetSidSubAuthority
122:; _SeGetSidSubAuthorityCount
123:; _SeGetTokenInformation
124:; _SeGetTokenType
125:; _SeGetTokenUser
126:; _SeGetUserAccountSid
127:; _SeGetUserModals
128:; _SeGetUserName
129:; _SeGetWellKnownAccountSid
130:; _SeHashCertificate
131:; _SeHashFile
132:; _SeHeapAlloc
133:; _SeHeapFree
134:; _SeHeapSize
135:; _SeImpersonateLoggedOnUser
136:; _SeImpersonateProcessPath
137:; _SeImpersonateSystemContext
138:; _SeImportSecurityDescriptor
139:; _SeInitAcl
140:; _SeInitBufferW
141:; _SeInitExplicitEntries
142:; _SeInitObjAttrib
143:; _SeInitSecurityDescriptor
144:; _SeInitSecurityQos
145:; _SeInitSid
146:; _SeIsEntryInheritable
147:; _SeIsPrivEnabled
148:; _SeIsPrivsEnabled
149:; _SeIsSelfRelativeSD
150:; _SeIsTokenRestricted
151:; _SeIsUserAdmin
152:; _SeIsUserAdminEx
153:; _SeIsValidAce
154:; _SeIsValidAcl
155:; _SeIsValidHandle
156:; _SeIsValidSecurityDescriptor
157:; _SeIsValidSid
158:; _SeIsWellKnownSid
159:; _SeLastError
160:; _SeLocalFree
161:; _SeLogonUser
162:; _SeLongToDWORD
163:; _SeLookupAccountName
164:; _SeLookupAccountSid
165:; _SeLookupPrivDescription
166:; _SeLookupPrivName
167:; _SeLookupPrivsFromDacl
168:; _SeLookupPrivValue
169:; _SeMakeAbsoluteSD
170:; _SeMakeSelfRelativeSD
171:; _SeNetBuffer
172:; _SeNetBufferSize
173:; _SeOpenPolicy
174:; _SeOpenProcess
175:; _SeOpenProcessToken
176:; _SeOpenRegKey
177:; _SeOpenSecret
178:; _SeOpenService
179:; _SeOpenUserBrowser
180:; _SePolicyQueryAuditEvent
181:; _SePolicyQueryInformation
182:; _SePolicyQueryLsaServerRole
183:; _SePolicySetAuditEvent
184:; _SePolicySetInformation
185:; _SeProcessHeap
186:; _SeProtectData
187:; _SeProtectMemory
188:; _SeProtectObjectFromClose
189:; _SeQuerySecret
190:; _SeReadBytes
191:; _SeReadProcessMemory
192:; _SeRegisterExceptionHandler
193:; _SeRegisterMemoryNotify
194:; _SeRemoveAccountRight
195:; _SeRetrievePrivateData
196:; _SeRevertToSelf
197:; _SeSetEntriesInAcl
198:; _SeSetEntriesInAcl1
199:; _SeSetEntriesOrder
200:; _SeSetFileInheritSecurity
201:; _SeSetFileSecurity
202:; _SeSetKernelObjectSecurity
203:; _SeSetLocalUserInfo
204:; _SeSetNamedSecurityInfo
205:; _SeSetRegKeySecurity
206:; _SeSetSecret
207:; _SeSetSecurityDescriptorControl
208:; _SeSetSecurityDescriptorDacl
209:; _SeSetSecurityDescriptorGroup
210:; _SeSetSecurityDescriptorOwner
211:; _SeSetSecurityDescriptorSacl
212:; _SeSetSecurityInfo
213:; _SeSetServiceSecurity
214:; _SeSetShareObjectDacl
215:; _SeSetTokenInformation
216:; _SeSetUserModals
217:; _SeSingletonEx
218:; _SeStorePrivateData
219:; _SeStringToBinary
220:; _SeTreeResetNamedSecurityInfo
221:; _SeTreeResetNamedSecurityInfoEx
222:; _SeUnprotectData
223:; _SeUnprotectMemory
224:; _SeWriteBytes
225:; _SeWriteProcessMemory
226:; snts

所有_Se*開頭的函數都是用戶可以調用的函數,除此之外,其他以__Se*或___Se*開頭的函數僅爲內部調用。

幾個函數的示例:
1、_SeBackupPassword - 利用空白U盤備份用戶密碼。

#include <lsasecur.au3>

_SeBackupPassword(0, 0) ; 同步方式備份用戶密碼。

$hBackupThread = _SeBackupPassword(0, 1) ; 異步方式。

; 等待備份完成。
If $hBackupThread Then
        While __SeWaitForObject($hBackupThread, 2)
        WEnd
EndIf

2、_SeCreateSystemProcess - 創建系統級進程(僅支持於32位系統)。

#include <lsasecur.au3>

$sFilePath = @WindowsDir & "\regedit.exe"

$tProcess = _SeCreateSystemProcess($sFilePath)
MsgBox(0, _SeFormatMsg(), _
        "Process Id: " & DllStructGetData($tProcess, "ProcessId") & @CRLF & _
        "Thread Id: " & DllStructGetData($tProcess, "ThreadId"))

3、_SeGetFileSignature - 獲取文件簽名。

#include <lsasecur.au3>

$sFilePath = @AutoItExe & "\..\Au3Info.exe"
$aSignature = _SeGetFileSignature($sFilePath)
_ArrayDisplay($aSignature, _SeFormatMsg())

4、_SeHashFile - 驗證文件散列。

#include <lsasecur.au3>

$sOutput = "File path:        %s\n\nCRC:        %s\nMD5:        %s\nMD4:        %s\nSHA1:        %s"

$sFilePath = @SystemDir & "\cmd.exe"

$bCrc = _SeHashFile($sFilePath, $SE_CALG_CRC32)
$bMd5 = _SeHashFile($sFilePath, $SE_CALG_MD5)
$bMd4 = _SeHashFile($sFilePath, $SE_CALG_MD4)
$bSha = _SeHashFile($sFilePath, $SE_CALG_SHA)

MsgBox(0, "Hashing", StringFormat($sOutput, $sFilePath, $bCrc, $bMd5, $bMd4, $bSha))

5、_SeImpersonateProcessPath - 模擬構造進程路徑。

#include <lsasecur.au3>

MsgBox(0, "_SeImpersonateProcessPath", "@AutoItExe=" & @AutoItExe)
_SeImpersonateProcessPath(@WindowsDir & "\regedit.exe")

MsgBox(0, "_SeImpersonateProcessPath", "@AutoItExe=" & @AutoItExe)

6、_SeImpersonateSystemContext - 模擬SYSTEM用戶登錄。

#include <lsasecur.au3>

$hToken = _SeImpersonateSystemContext()
MsgBox(0, "@UserName=" & @UserName, _SeFormatMsg("_SeImpersonateSystemContext"))

; Do something with SYSTEM privilege.

_SeCloseHandle($hToken)
_SeRevertToSelf()
MsgBox(0, "@UserName=" & @UserName, _SeFormatMsg("_SeRevertToSelf"))

7、_SeRegisterExceptionHandler - 截取程序異常,並恢復程序運行。

#include <lsasecur.au3>

Const $INVALID_POINTER = -1        ; 非法指針,

$sOutput = "異常代碼:        0x%08X\n異常地址:        0x%08X\n自定義參數:        0x%08X"

; 註冊“安全函數”,程序發生異常時,將跳轉到這個函數中。
$hSafeAddress = DllCallBackRegister("_ExceptionCallBack", "none", "ptr")

; 獲取“安全函數”地址。
$pSafeAddress = DllCallBackGetPtr($hSafeAddress)

; 註冊異常處理。
_SeRegisterExceptionHandler( _
        $pSafeAddress, _                ; 安全函數的地址。
        7, _                                ; 安全函數的自定義參數,可以是任意32位值。
        Default, _                        ; 安全函數的返回地址,默認爲Kernel32.ExitProcess函數。
        1)                                ; Kernel32.ExitProcess函數的參數。

; 創建非法結構。
$tTest = DllStructCreate("dword Test", $INVALID_POINTER)

; 下面這句將會引發一個“內存不能爲‘read’”的異常。
DllStructGetData($tTest, "Test")

Func _ExceptionCallBack($pSafeAddress)
        Local $tSafeAddress = DllStructCreate($tagSE_SAFE_ADDRESS, $pSafeAddress)
        Local $tRecord = DllStructCreate($tagSE_EXCEPTION_RECORD, DllStructGetData($tSafeAddress, "ExceptionRecord"))

        MsgBox(48, "發生異常", StringFormat($sOutput, _
                DllStructGetData($tRecord, "ExceptionCode"), _                ; 異常代碼
                DllStructGetData($tRecord, "ExceptionAddress"), _        ; 發生異常的地址
                DllStructGetData($tSafeAddress, "Parameter")))                ; 用戶自定義參數

        ; 本函數執行完成之後,程序流程將會跳轉到Kernel32.ExitProcess函數中,_
        ; 並非以AutoIt的常規方式退出進程,所以要先清除托盤圖標。
        Opt("TrayIconHide", 1)
EndFunc        ;==>_ExceptionCallBack

8、_SeSingletonEx - 允許同時運行自定義次數的進程實例。

#include <lsasecur.au3>

Const $iMaxInstances = 2

$sOutput = "本程序已有%u個實例同時運行,請先退出其中1個或多個再運行此程序。"

If _SeSingletonEx($iMaxInstances) Then
        MsgBox(48, "", StringFormat($sOutput, $iMaxInstances))
        Exit
EndIf

MsgBox(0, "", "Bingo~")

9、_SeGetFileSecurity - 獲取NTFS文件的安全信息。

#include <lsasecur.au3>

$sFilePath = @SystemDir & "\cmd.exe"

$iSecur = BitOR($SE_INFO_OWNER, $SE_INFO_DACL)
$pSecur = _SeGetFileSecurity($sFilePath, $iSecur)

If ($pSecur = 0) Then
        MsgBox(48, "Error", _SeFormatMsg("_SeGetFileSecurity"))
        Exit
EndIf

$pOwner = _SeGetSecurityDescriptorOwner($pSecur)
$pDacl = _SeGetSecurityDescriptorDacl($pSecur)

$sOwner = _SeLookupAccountSid($pOwner)
$aList = _SeEnumEntriesFromAcl($pDacl)

_ArrayDisplay($aList, $sOwner)

10、本地用戶、用戶組相關的函數。

#include <lsasecur.au3>

; 枚舉本地用戶。
$aLocalUser = _SeEnumLocalUsers()
_ArrayDisplay($aLocalUser, _SeFormatMsg("_SeEnumLocalUsers"))

; 枚舉本地用戶組。
$aLocalGroup = _SeEnumLocalGroups()
_ArrayDisplay($aLocalGroup, _SeFormatMsg("_SeEnumLocalGroups"))

; 枚舉內置賬戶。
$aWellKnown = _SeEnumWellKnownSids()
_ArrayDisplay($aWellKnown, _SeFormatMsg("_SeEnumWellKnownSids"))

; 枚舉當前用戶所屬的用戶組。
$aUserGroup = _SeEnumUserLocalGroups(@UserName)
_ArrayDisplay($aUserGroup, _SeFormatMsg("_SeEnumUserLocalGroups"))

; 枚舉管理員組的成員。
$aMembers = _SeEnumLocalGroupMembers("Administrators")
_ArrayDisplay($aMembers, _SeFormatMsg("_SeEnumLocalGroupMembers"))

12/29/2010更新:
新添加函數:

_SeAccessCheck ; 訪問檢查
_SeCreateRestrictedToken ; 創建受限令牌
_SeCreateToken ; 創建訪問令牌(Powerful)
_SeCreateTrustedToken ; 創建受信任令牌
_SeCreateUntrustedToken ; 創建不受信任的訪問令牌
_SeEnumTokenRestrictedSids ; 枚舉令牌中的受限SID
_SeGetUserObjectSecurity ; 獲取用戶對象(桌面、工作站)的安全信息
_SeRestoreExceptionHandler ; 使用默認的異常函數處理程序異常
_SeSetThreadToken ; 設置線程令牌
_SeImpersonateNamedPipeClient ; 模擬命名管道客戶端場景
_SeImpersonateSelf ; 模擬自身場景
_SeImpersonateThread ; 模擬線程場景
_SeIsTokenUntrusted ; 判斷令牌是否爲非信任令牌
_SeSetUserObjectSecurity ; 設置用戶對象的安全信息
_SeCreateSecurProcess ; 創建擁有高安全級別的進程

04/24/2011更新:
新添加函數:

_SeVerifySystemCall ; 驗證系統函數的調用
_SeCompleteVerifySystemCall ; 完成驗證系統函數的調用
_SeCreateAdminToken ; 創建管理員權限令牌(可以指定任意用戶名)
_SeCreateUserProcessEx ; 創建用戶進程(可以指定父進程)
_SeImpersonateContext ; 模擬進程場景

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章