• 20145231熊梓宏 《网络对抗》 Bof逆向基础.shellcode注入


    20145231网络对抗《逆向及Bof基础》shellcode注入

    实验目的与要求

    1.本次实践的对象是一个名为pwn1的linux可执行文件。

    2.若该程序正常执行,则main函数会调用foo函数,foo函数会简单回显任何用户输入的字符串。

    ●该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。

    3.本次实践主要是学习两种方法:

    ●利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
    手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。

    ●攻击目标:

    
    运行原本不可访问的代码片段
    强行修改程序执行流
    以及注入运行任意代码。
    
    

    实验内容

    1.写一段shellcode代码(此次实验中用的是老师的代码)

    2.设置环境

    ●Bof攻击防御技术

    ●需要手动设置环境使注入的shellcode到堆栈上可执行。
    安装execstack

    ●设置堆栈可执行,并查询堆栈是否可执行,以便shellcode在堆栈上可以执行

    ●关闭地址随机化,more /proc/sys/kernel/randomizevaspace用来查询地址随机化是开启状态还是关闭状态,2表示开启,0表示关闭。

    ●构造payload,采用nop+shellcode+retaddr方式(x4x3x2x1将覆盖到堆栈上的返回地址的位置,需要将它改为shellcode的地址)

    ●新打开一个terminal,注入攻击buf(注意回车要在设置断点后进行,否则无法确认进程号,并且要在gdb执行c前回车)

    ●再打开一个terminal,用GDB调试5231pwn1sc进程,

    ●找到进程3483

    ●用attach追踪

    ●启动gdb调试进程,设置断点,查看注入buf的内存地址

    ●此时发现0x080484ae ret 就跳到我们覆盖的retaddr那个地方了

    ●设置断点后,在另一个终端按下回车,并寻找返回地址,看到01020304表示返回地址的位置是0xffffd31c,shellcode就紧挨着这个地址,加四字节为0xffffd320

    ●退出gdb,按照anything+retaddr+nops+shellcode修改input_shellcode如下,完成实验。

    相关知识总结

    shellcode概念

    ●Shellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限。另外,Shellcode一般是作为数据发送给受攻击服务器的。 Shellcode是溢出程序和蠕虫病毒的核心,提到它自然就会和漏洞联想在一起

    构造buf的方法

    ●Linux中两种基本构造攻击buf的方法:retaddr+nop+shellcode,nop+shellcode+retaddr,缓冲区小就就把shellcode放后边,不然就放前边。

    心得体会

    虽然本次实验完成的是最简单的一部分,直接注入shellcode,课堂上老师也已经分析实践过,但真正自己做还是遇到了很多小问题,如:一开始安装 execstack出错。原因是虚拟机没有联网,更改了网络配置(将网桥改为NAT选项即可),解决了这个问题;还有:注入buf时,因为回车顺序的问题,导致gdb调试一直出错,参考了其他同学的博客之后得到了解决,也思考了原因;总之,要注意细节,多思考,才能提高。

  • 相关阅读:
    python 正则表达式
    python 递归查找
    MYSQL 索引优化,避免回表
    MYSQL ibtmp文件暴增
    mysql 主从复制刷新参数
    MYSQL 复制数据过滤
    快速入门Kubernetes
    ansible之playbook的编写
    ansible的安装及常用模块详解
    ERROR Failed to discover available identity versions when contacting http://ct:5000/v3.
  • 原文地址:https://www.cnblogs.com/xzh20145231/p/6534786.html
Copyright © 2020-2023  润新知