zoukankan      html  css  js  c++  java
  • 信息安全技术实用教程第4版张同光ISBN97871214230315.4.2实例——缓冲区溢出攻击WindowsXPSP3

    信息安全技术实用教程-第4版---张同光---ISBN-9787121423031---5.4.2实例——缓冲区溢出攻击WindowsXPSP3

    https://www.cnblogs.com/ztguang/p/12828764.html

    主  编:     张同光

    ISBN号: 978-7-121-42303-1             9787121423031
    出版日期:   2021-11-20
    出版社:     电子工业出版社

    页码:  定价:¥69.80元


    5.4.2  实例——缓冲区溢出攻击Windows XP SP3

    1.实验环境

    实验环境如5.17所示使用宿主机(Windows 10)、虚拟机KaliLinux(攻击机)、虚拟机WinXPsp3(目标机),KaliLinuxWinXPsp3虚拟机的网络连接方式选择“仅主机(Host-Only)网络”攻击机192.168.56.109目标机192.168.56.102进行缓冲区溢出攻击。

     

     5.17  实验环境

    从宿主机将文件slmail55_4433.exeImmunityDebugger_1_85_setup.exepython-2.7.18.msi拖放到目标机(WinXPsp3

    在目标机(WinXPsp3)中,双击slmail55_4433.exe安装邮件服务器,5.185.195.20所示安装完成后重启系统。5.21所示在命令行窗口执行命令netstat -nao,发现25110180端口处于监听状态,并且在“计算机管理”窗口可以看到邮件相关的三个服务已启动,说明邮件服务器安装成功。在目标机(WinXPsp3)中,接着安装python-2.7.18.msiImmunityDebugger_1_85_setup.exe

    从宿主机将文件mona.py拖放或复制到目标机(WinXPsp3)中Immunity Debugger的安装目录C:\Program Files\Immunity Inc\Immunity Debugger\PyCommands里。

    邮件服务器SLmail 5.5.0 Mail ServerPOP3 PASS命令存在缓冲区溢出漏洞,无需身份验证即可实现远程代码执行。Immunity Debugger动态调试工具脚本mona.py用于定位进程模块

    为了本次实验,关闭Windows防火墙当然,也可以打开防火墙,不过需要在防火墙例外:pop3110端口SMTP25端口)。

    5.18  安装邮件服务器 5.19  安装邮件服务器

     

     5.20  安装邮件服务器 5.21  查看开放的端口

    2缓冲区溢出攻击过程

    1步:入侵者测试目标机的25110端口

    在攻击机(KaliLinux)执行nc 192.168.56.102 25命令和nc 192.168.56.102 110命令测试目标机(WinXPsp3)是否开放25110端口结果表示已经开放,5.22所示。

     

     5.22  测试目标机(WinXPsp3)是否开放25110端口

    2步:入侵者测试目标机缓冲区溢出

    5.23所示在攻击机(KaliLinux)执行telnet 192.168.56.102 100命令,然后输入user命令和pass命令。我们已经知道SLmail 5.5.0POP3协议的PASS(大小写均可)命令是存在缓存区溢出漏洞的,所以只要在pass后面输入的数据达到某一个值时,就会出现缓冲区溢出

               

     5.23  手动测试缓冲区溢出漏洞 5.24  自动化测试

    手动测试缓冲区溢出漏洞的效率太低下面通过Python脚本进行自动化测试。

    Python脚本文件(overflow.py)内容如下。5.24所示overflow.py文件增加可执行权限,然后执行该脚本文件。

    #!/usr/bin/python

    import socket

    buffer = ["A"]

    counter = 300

    while len(buffer) <= 20:

        buffer.append("A" * counter)

        counter += 300

    for string in buffer:

        print "FUZZING PASS WITH %s BYTES" % len(string)

        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        connect = s.connect(('192.168.56.102', 110))

        s.recv(1024)

        s.send('USER test' + '\r\n')

        s.recv(1024)

        s.send('PASS ' + string + '\r\n')

        s.send('QUIT\r\n')

        s.close()

    现在的问题是:向邮件服务器发送这么多数据仍然不知道目标机是否发生了缓冲区溢出

    3步:判断目标机是否发生缓冲区溢出

    在目标机(WinXPsp3),命令行窗口执行命令netstat -nao,查看在110端口监听的进程的PID1840,注意,每次重启系统后,该PID的值可能都不一样),5.21所示。打开Immunity Debugger依次选择菜单File”→“Attach”,5.25所示选择PID1840SLmail)的行,然后单击Attach”按钮。进程默认处于暂停状态(单击“F12”可以暂停进程的执行),为了观察溢出情况,单击开始按钮或“F9”继续执行1840SLmail)进程,5.26所示

     

     5.25  Attach进程 5.26  继续执行进程

    在攻击机(KaliLinux),再次执行overflow.py,当发送到3000A的时候停了下来,5.27所示接下来查看目标机(WinXPsp3)的情况,5.28所示,查看Immunity Debugger调试器,发现进程已经崩溃,且EIP寄存器中的内容为AAAAASCII码值(41414141,十六进制表示),所以下一条要执行的指令的地址是代码段中位移量为41414141的指令,而这个地址基本不是一条有效指令,因此进程崩溃。

     

    5.27  执行overflow.py 5.28  发生缓冲区溢出,进程崩溃

    在攻击机(KaliLinux),脚本overflow.py每次递增300个字节向目标机(WinXPsp3)的SLmail发起请求数据,当发送的字节数达到3000时,进程崩溃了,说明PASS指令确实存在缓冲区溢出,接下来要做的事情是得到确切的缓冲区溢出位置,通过缓存区溢出利用EIP寄存器,进而执行Shellcode来进一步控制目标机。

    4步:得到确切缓冲区溢出位置所在的区间

  • 相关阅读:
    “同形异义字”钓鱼攻击
    研发管理101军规#001 两周迭代,形成团队持续习惯
    全新 PingCode 正式发布
    Python基础数据类型——tuple浅析
    Python基础变量类型——List浅析
    有了这个神器,快速告别垃圾短信邮件
    零基础打造一款属于自己的网页搜索引擎
    一篇文章教会你使用Python网络爬虫下载酷狗音乐
    趣味解读Python面向对象编程 (类和对象)
    上古神器Gvim--从入门到精通
  • 原文地址:https://www.cnblogs.com/ztguang/p/15611963.html
Copyright © 2011-2022 走看看