首先先介紹下windows 系統(tǒng)的令牌。
windows系統(tǒng)的令牌是指:"一個包含進(jìn)程或者線程上下文環(huán)境的對象"。簡單的說就是記錄著一個進(jìn)程被賦予的權(quán)限。
這里就有一個問題,windows開發(fā)者出于好意,會給一個安全產(chǎn)品內(nèi)嵌一個系統(tǒng)托盤的程序,并且將seLoadDriver權(quán)限賦予了系統(tǒng)托盤程序。而這會讓沒有相應(yīng)權(quán)限的用戶,控制以驅(qū)動形式存在的windows系統(tǒng)服務(wù)。(方法是通過向系統(tǒng)托盤程序中插入代碼)。
所有首先第一步,查詢token中的權(quán)限,看看哪些進(jìn)程含有seLoadDriver權(quán)限。
1.獲取目標(biāo)進(jìn)程句柄
2.獲取目標(biāo)進(jìn)程token
3.解析已經(jīng)啟用權(quán)限列表
4.迭代每個權(quán)限,并檢查是否啟用(i[1]==3表示啟用,i[0]存儲著相印的名字)
代碼如下(基于之前編輯的進(jìn)程監(jiān)視器):
import os import wmi import win32api import win32con import win32security def get_privileges(pid): try: hd = win32api.OpenProcess(win32con.PROCESS_QUERY_INFORMATION,False,pid) htok = win32security.OpenProcessToken(hd,win32con.TOKEN_QUERY) privs = win32security.GetTokenInformation(htok,win32security.TokenPrivileges) priv_list="" for i in privs: if i[1]==3: priv_list+="%s|"%win32security.LookupPrivilegeName(None,i[0]) except: priv_list="N/A" return priv_list def log_message(message): f=open("message.csv","ab") f.write("%s\r\n"%message) f.close() log_message("Time,User,Executable,CommandLine,PID,Parent PID,Privileges") c=wmi.WMI() process_monitor=c.Win32_Process.watch_for("creation") while True: try: new_process=process_monitor() proc_owner=new_process.GetOwner() proc_owner="%s\\%s"%(proc_owner[0],proc_owner[2]) create_data=new_process.CreationDate executable=new_process.ExecutablePath cmdline = new_process.CommandLine pid = new_process.ProcessId parent_pid = new_process.ParentProcessId privileges = get_privileges(pid) process_log_message="%s,%s,%s,%s,%s,%s,%s\r\n"%(create_data,proc_owner,executable,cmdline,pid,parent_pid,privileges) print process_log_message log_message(process_log_message) except: pass
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
