MSF系列:

MSF——基本使用和Exploit模块(一)

MSF——Payload模块(二)

MSF——Meterpreter(三)

MSF——信息收集(四)

一、exploit和payload

exploit是指利用漏洞的一个过程和方法,最终的目的是为了执行payload,payload才是真正实现我们攻击的代码(获得shell等等)

以缓冲区溢出为例,exploit模块告诉你在寄存器中要填充多少个字符,让寄存器下一条指令执行的代码位置跳转到我们的payload上

在使用exploit时,我们都是用 use 去使用的,在exploit模块中,我们可以 set 调用各种payload

如果我们不想使用exploit,而是直接使用payload,我们也可以直接用 use 使用一个payload

一样可以通过show options查看有哪些参数需要设置

这里的RHOST是指受害机器只接受某个远程主机来连接它的4444端口(4444是受害机器开放的端口),限制了来源IP,我们这里可以不用设置。但是如果被其他人扫到这个端口,他们也可以连接上去获得shell。

二、直接使用payload

一般我们是在exploit中调用payload,如果想直接使用payload,可以使用 generate 命令来生成payload。

如下图所示,我们可以获得payload的一些基本信息和设置的参数,buf 就是 payload 的16进制表示方式

我们在输出的时候,可以不以16进制的方式输出,而是输出成exe格式

payload中可能存在所谓的“坏字符”,它们在执行过程中会被过滤掉、或以其他语义的方式被执行,导致payload在目标系统上执行和预期结果不一致

缓冲区溢出中,最典型的就是 “\x00”,大部分CPU架构在执行的时候都会把它认为是一个坏字符,我们的shellcode不能正常执行

我们在使用generate命令时,可以利用 -b 参数,后面跟上要避免在shellcode中出现的坏字符,这样就能把坏字符过滤掉(坏字符一般不止一个),格式如下

generate -b '\x00\xff'

generate在生成编码之后的payload时,会在已有的encoder中智能地选择一个encoder(默认不使用encoder),比如过滤掉 “\x00” 就会从中选择最理想的一个

如果要过滤的坏字符太多,可能没有一个模块可以实现

generate -b '\x00\x12\x34\x56\xfa\x01\xe0\x44\x67\xa1\xa2\xa3\x75\x4b\xff\x0b\x01\xcc\x6e\x1e\x2e\x26'

另外,我们也会发现过滤掉坏字符后的payload大小也变化了,这是因为经过编码后,“\x00”可能由“\xaa\xbb”表示,由1个字节变成2个字节甚至更多。

我们也可以手动指定encoder

# show encoders可以显示可用的encoders
generate -e x86/nonalpha

我们也可以用encoder对payload加密一次或多次,加密几次可以用 -i 参数指定。也可以用多个encoder,-e xxx -e xxx,有时还能免杀的效果。

generate -b '\x00\xff' -t exe -e x86/shikata_ga_nai -i  -k -x /usr/share/windows-binaries/radmin.exe -f /root/.exe

-t:payload的输出格式,默认是给ruby语言使用的16进制编码表示

-e:指定encoder

-i:加密轮数

-k:执行过程中不会产生新的进程,会在当前进程中产生线程,隐蔽性高些

-x:生成payload时使用的模板。上面radmin.exe是一个正常的可执行文件,它的功能会正常执行,不影响这个程序的功能,我们生成的payload也会正常执行。

-f:生成的文件

-t 支持的格式如下:

以下是输出给c语言使用的payload和输出给python的payload的区别,可以看到有些细微的差别

将这个程序拷贝到受害机器上,可以假设这样一个环境,我们诱骗受害者下载我们这个带有payload的程序(称它是一个非常好用的服务器管理工具)。受害者执行时,提示的是这个程序叫做Radmin,一般我们看到这个提示都会允许

在使用的时候,也没有什么异常

但是此时我们的电脑已经开放了4444端口

那么我们就可以通过nc去连接受害者机器的4444端口,获得shell

因为有这些模板程序的存在,受害者以为执行的是正常的应用程序,但其实我们已经拿到了它的shell。

generate还有一个 -s 参数

-s <opt>  NOP sled length

NOP:no-operation 或 next operation (无任何操作)

NOP的特点:当代码执行到NOP指令的时候,CPU自动滑到当前字节的下一个字节,直到不是NOP

当我们能控制EIP寄存器,就能控制程序的流程(EIP寄存器存放的是下一条指令内存地址)。这样我们能把payload插入到内存的某个地址,通过修改EIP寄存器的方式让程序跳转到payload的位置上。

如果我们不能让它精确地跳到那个内存位置,我们可以在payload中加上NOP,NOP可以是一个字符,也可以是多个字符。在payload的前面加上NOP,CPU碰到这些NOP时不会执行,而是往后滑,直到不是NOP为止,最终也会执行我们的payload。

我们生成的payload第一行有14个字节,我们可以用 -s 在前面加上14个NOP

可以看到除了第一行,后面每行开始都跟原来生成的payload一样(看大小也可以,只是大了14个字节),也可以看到NOP的的字符不是固定的

MSF——Payload模块(二)的更多相关文章

  1. 20145211《网络渗透》msf辅助模块的应用

    20145211<网络渗透>msf辅助模块的应用 一.实验准备 启用VB的kali,需要用到桥接,VMware桥接总是罢工…… 二.实验步骤 最好开桥接模式,要不然你就多开几个虚拟机(只要 ...

  2. msf辅助模块的应用——20145301

    msf辅助模块的应用 实验步骤 创建msf所需的数据库 service postgresql start msfdb start 开启msf,输入命令 use auxiliary/scanner/di ...

  3. msf辅助模块的应用

    msf辅助模块的应用 创建一个msf所需的数据库 进入模块 设置相关参数 查看 开启扫描

  4. 常用模块二(hashlib、configparser、logging)

    阅读目录 常用模块二 hashlib模块 configparse模块 logging模块   常用模块二 返回顶部 hashlib模块 Python的hashlib提供了常见的摘要算法,如MD5,SH ...

  5. NGINX模块(二)

    [Nginx标准HTTP模块] 一.HTTP核心模块 指令1:alias 语法:alias file-path|directory-path; 默认值:no 使用字段:location 说明:这个指令 ...

  6. Python - 模块(二)

    目录 Python - 模块(二) re re下面的方法 logging os Python - 模块(二) re re模块提供了正则表达式的相关操作 主要字符介绍: . 通配符,除了换行符之外的任意 ...

  7. 模块(二)os hashlib

    模块(二)os hashlib 1.序列化模块 1.1 json 将满足条件的数据结构转化成特殊的字符串,并且可以反序列化转回去 # 两对方法 # 1 dumps() loads() ## 多用于网络 ...

  8. 模块二之序列化模块以及collections模块

    模块二之序列化模块以及collections模块 一.序列化模块 json模块 ''' 序列化:将python或其他语言的数据类型转换成字符串类型 json模块: 是一个序列化模块. json: 是一 ...

  9. Python学习日记(九)—— 模块二(logging、json&pickle、xml、requests、configparser、shutil、subprocess)

    logging模块 用于便捷记录日志且线程安全的模块(便捷的写文件的模块,不允许多个人同时操作文件) 1.单文件日志 import logging logging.basicConfig(filena ...

随机推荐

  1. 19、NumPy——线性代数

    NumPy 线性代数 NumPy 提供了线性代数函数库 linalg,该库包含了线性代数所需的所有功能,可以看看下面的说明: 函数 描述 dot 两个数组的点积,即元素对应相乘. vdot 两个向量的 ...

  2. display:table的几个用法

    DIV+CSS的布局已经让表格布局几乎很少用到,除非表格语义性很强的情况. display:table解决了一部分需要使用表格特性但又不需要表格语义的情况, 尤其是DIV+CSS很不方便解决的问题,比 ...

  3. Go语言_并发

    并发 Go 将并发结构作为核心语言的一部分提供.本节课程通过一些示例介绍并展示了它们的用法. Go 作者组编写,Go-zh 小组翻译. https://tour.go-zh.org/concurren ...

  4. Go语言_流程控制语句:for、if、else、switch 和 defer

    流程控制语句:for.if.else.switch 和 defer 学习如何使用条件.循环.分支和推迟语句来控制代码的流程. Go 作者组编写,Go-zh 小组翻译. https://go-zh.or ...

  5. Intellij IDEA插件

    1.lombok 通过注解的形式生成GET/SET等方法 2.FindBugs-IDEA 检测代码中可能的bug及不规范的位置 3.Maven Helper 一键查看maven依赖,查看冲突的依赖,一 ...

  6. java 接口概念及使用

    package java11; /* 在任何版本的java中,接口都能定义抽象方法 格式: public abstrace 返回值类型 方法名称(参数列表): 注意事项: 1.接口当中的抽象方法,修饰 ...

  7. Go 数组(1)

    1.一旦声明,数组里存储的数据类型和数组长度就都不能改变了.如果需要存储更多的元素, 就需要先创建一个更长的数组,再把原来数组里的值复制到新数组里. 例如: ]int 2.使用数组字面量声明数组 // ...

  8. Spring入门-框架搭建

    步骤: 导包 四个核心包: 日志包:由于市场上已经有更好的日志包,所以spring不用自己的,而是用apache的日志. 搞对象 由于spring是用来装对象的容器,所以得搞个对象让它装 书写配置文件 ...

  9. webRTC脱坑笔记(四)— windows下Nginx对Node服务的反向代理

    Nginx反向代理 1.什么是反向代理 当我们有一个服务器集群,并且服务器集群中的每台服务器的内容一样的时候,同样我们要直接从个人电脑访问到服务器集群服务器的时候无法访问,必须通过第三方服务器才能访问 ...

  10. vs2005下opengl(glut)的配置记录

    摘自:http://blog.csdn.net/joeblackzqq/article/details/6956959 首先参考了网上的安装配置环境部分:http://blog.csdn.net/Id ...