• 20192423 202120222 《网络与系统攻防技术》实验一实验报告


    20192423 2021-2022-2 《网络与系统攻防技术》实验一实验报告

    1.实验内容

    实验有三个小步骤:

    1. 反汇编打开文件,修改foo函数地址为getshell地址,让文件跳转至getshell函数执行。
    2. 利用foo函数的bof漏洞,构造包含getshell函数地址的字符串覆盖到eip地址,使函数运行跳转至getshell函数。
    3. 注入编写好的shellcode(anything+retaddr+nop+shellcode),调试函数找到滑行区地址并填写,使我们注入的shellcode能够执行。

    2.实验过程

    步骤一 通过修改函数地址跳转到getshell函数

    输入反汇编指令 objdump -d pwn20192423 | more 得到如下结果,通过管道符|输出为more分页显示

    找到main函数以及foo函数和getshell,根据实验步骤一要求,我们需要将调用foo函数入口地址修改为getshell地址。

    根据计算可以得到我们应该将FFFF FFD7替换成 FFFF FFC3

    利用图形化编辑器wxHexEditor打开pwn20192423,如下图所示

    找到需修改的位置,将d7改为c3

    反汇编pwn20192423后查看发现foo函数入口地址已经被我们成功修改为getshell入口

    运行原文件以及修改的文件,发现修改后的文件我们可以直接进入getshell中。

     

    步骤二 构造一个攻击输入字符串,覆盖返回地址,触发getShell函数

    利用gdb调试可以查看到当输入的字符串长度超过28字节后就会覆盖ebp(4字节)以及eip,可以看到ebp被覆盖为0x34343434,eip被覆盖为0x35353535

    由于键盘无法输入getshell的地址,故我们需要利用perl解释语言将我们要输入的getshell地址所包含的字符串保存为in文件

    Cat in 将文件中的内容显示出来,通过管道符|输出执行文件./20192423pwn,并且通过cat停下当前所执行的程序。可以看到超过32字节后的数据覆盖到了eip函数返回地址,将getshell地址设置于字符串当中,我们成功通过此方法调用到了getshell。

    步骤三 注入shellcode并使其运行

    填充0x指令是为了啥?
    制造“滑行区”让它落到我们的shellcode指令

    首先关闭地址随机化,将它设置为0。


    为了找到我们这段shellcode的地址,我们在一个终端中运行这个程序,另一个终端中去调试这个程序

    可以看到我们这个程序的进程号为1391,进入调试。

    在foo函数执行完之后(ret之后)就应该到我们所覆盖的地址上去。

    可以看到0xffffd19c处已经有我们所覆盖的0X01020304,可以看到909090,找到地址填充在指令里。但若使用第一种shellcode构成nop+shellcode+retaddr,最后会发现没法成功执行,单步调试发现是由于我们的代码段是位于堆栈中的,而shellcode里有push操作,故会覆盖我们本身的指令,所以没法成功,故我们换做第二种构成 anything + retaddr + nop +shellcode无论如何nop都要在shellcode之前,是因为我们要保证“滑行区”在我们的shellcode前面。

    成功了!!

    3.问题及解决方案

    • 问题1:填充出错:将字符串输入之后依然报错

    • 问题1解决方案
      滑行区的地址填错了,使用第一种shellcode注入后调试程序所找到的地址0xffffd17c填入了第二种shellcode当中,由于两种shellcode构成不同,所以会导致滑行区所在的地址也不同,用第二种shellcode构成调试找到正确地址即可。

    • 问题2:运行程序显示权限不够

    • 问题2解决方案:提升权限即可
      可使用指令chmod指令:可以修改文件或者目录的权限

    4.学习感悟、思考等

    通过这次的实验让我初步接触到了网络攻防,虽然这只是一个小小的实验,但也让我意识到我们所编写的程序里有着大大小小可利用的漏洞。光是从程序里调用shell就有各种各样的方法。
    此次实验也让我对汇编语言以及linux指令更加了解,学会使用工具查看程序中的机器指令,反汇编程序查看程序语句等等。

    参考资料

  • 相关阅读:
    React.js学习笔记之事件系统
    彻底解决Webpack打包慢的问题:npm run build:dll
    gulp详细入门教程
    cmd、node、npm 常用命令
    ant design中ES6写法个人总结
    自定义浏览器滚动条的样式,打造属于你的滚动条风格
    js相关知识
    day31-python阶段性复习五
    day30-python阶段性复习四
    day29-python阶段性复习三
  • 原文地址:https://www.cnblogs.com/ayano/p/16058995.html
Copyright © 2020-2023  润新知