MSF使用之payload模块

摘要:
上述radmin.exe是一个正常的可执行文件。其功能将在不影响本程序功能的情况下正常执行。我们生成的有效载荷也将正常执行。如果我们不能使其准确跳转到该内存位置,我们可以将NOP添加到有效负载中。NOP可以是一个字符或多个字符。在有效载荷前面添加NOP。当CPU遇到这些NOP时,它不会执行它们。相反,它将向后滑动,直到它不是NOP。最后,它还将执行我们的有效负载。
一、exploit和payload

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

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

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

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

MSF使用之payload模块第1张

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

MSF使用之payload模块第2张

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

二、直接使用payload

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

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

MSF使用之payload模块第3张

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

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

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

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

generate -b 'x00xff'

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

MSF使用之payload模块第5张

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

generate -b 'x00x12x34x56xfax01xe0x44x67xa1xa2xa3x75x4bxffx0bx01xccx6ex1ex2ex26'

MSF使用之payload模块第6张

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

MSF使用之payload模块第7张

我们也可以手动指定encoder

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

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

generate -b 'x00xff' -t exe -e x86/shikata_ga_nai -i 5 -k -x /usr/share/windows-binaries/radmin.exe -f /root/1.exe

MSF使用之payload模块第8张

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

-e:指定encoder

-i:加密轮数

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

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

-f:生成的文件

-t 支持的格式如下:

MSF使用之payload模块第9张

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

MSF使用之payload模块第10张

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

MSF使用之payload模块第11张

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

MSF使用之payload模块第12张

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

MSF使用之payload模块第13张

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

MSF使用之payload模块第14张

因为有这些模板程序的存在,受害者以为执行的是正常的应用程序,但其实我们已经拿到了它的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

MSF使用之payload模块第15张

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

MSF使用之payload模块第16张

 

免责声明:文章转载自《MSF使用之payload模块》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇分析kube-proxy的iptables规则Java实现文件复制的四种方式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

(转)string中的format

JDK1.5中,String类新增了一个很有用的静态方法String.format():format(Locale l, String format, Object... args) 使用指定的语言环境、格式字符串和参数返回一个格式化字符串。format(String format, Object... args) 使用指定的格式字符串和参数返回一个格式...

(PHP)redis String(字符串)操作

/** * * String操作 * 字符串操作 * */ //设置键值:成功返回true,否则返回false,键值不存在则新建,否则覆盖 $redis->set('string', 'hello world!'); //从左往右第五个字符开始替换为另一指定字符串,成功返回替换后新字符串的长度。 $redis->setRan...

pcre和正则表达式的误点

本文只是关于正则一些容易出错的地方,关于正则的学习,可参考如下两篇文章: 基础正则:https://www.cnblogs.com/f-ck-need-u/p/9621130.html Perl正则:https://www.cnblogs.com/f-ck-need-u/p/9648439.html 1.正则中所有的匹配模式,都应该理解为"匹配了某字符或字符...

01. SELECT显示和PRINT打印超长的字符

从SQL Server 2005开始,引入了varchar(max) / nvarchar(max) 数据类型,表中可不使用LOB数据类型,从而突破单列8000 / 4000字符的限制,动态SQL也可以拼接得更长;但查看这类字符的时候,在某些地方,字符长度的限制仍然存在,比如: 1. 单列:SSMS里所返回的列值; 2. 动态SQL:print命令打印字符...

Python2.7 中文字符编码 &amp;amp; Pycharm utf-8设置、Unicode与utf-8的区别

Python2.7 中文字符编码 & Pycharm utf-8设置、Unicode与utf-8的区别 zoerywzhou@163.com http://www.cnblogs.com/swje/ 作者:Zhouwan  2017-6-6  一、关于编码和乱码,有以下几个重要的概念需要搞清楚:     二、Pycharm 设置编码, 可以按如下步...

ABAP常用字符串操作收集整理

字符串首字符索引为 0; Character Fields: C,N, D, T, string (CNDT=> CN Data Time) 1. 字符串连接CONCATENATE dobj1 dobj2 ...  INTO result             [IN { BYTE | CHARACTER } MODE]             [...