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


    1.实验内容

    (1)手动修改可执行文件,把地址修改成getshell地址从而实现改变程序执行流程,直接跳转到getShell函数。
    (2)利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
    (3)注入一个自己制作的shellcode并运行这段shellcode。

    2.实验过程

    (1)手动修改可执行文件
    对pwn文件进行反汇编

    main函数调用foo,对应机器指令为“ e8 d7ffffff”,

    如果想变为直接调用getShell,只要修改“d7ffffff”为,"getShell-80484ba"对应的补码就行。
    用Windows计算器,直接 47d-4ba就能得到补码,是c3ffffff。
    因此我们可以修改可执行文件,将其中的call指令的目标地址由d7ffffff变为c3ffffff


    再反汇编看一下,发现call指令已经在在调用getShell。

    (2)利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
    进入gdb进行调试,当输入1111111122222222333333334444444412345678时,eip的值为0x34333231。1234 那四个数最终会覆盖到堆栈上的返回地址,进而CPU会尝试运行这个位置的代码。那只要把这四个字符替换为 getShell 的内存地址,输给pwn20192407,pwn20192407就会运行getShell。

    构造输入字符串11111111222222223333333344444444\x7d\x84\x04\x08后,然后将input的输入,通过管道符“|”,作为pwn20192407的输入.

    (3)注入一个自己制作的shellcode并运行这段shellcode。
    切换root用户关闭地址随机化

    通过gdb得到shellcode的运行起始地址。通过进程号查出我们运行./pwn20192407为1603。进入foo函数在结束位置设置断点。
    随后找到设置的断点并设为shellcode运行的起始地址。将shellcode的返回地址改位空指令的地址

    接着使用perl语言在缓存区填满数据,在eip后面为shellcode代码

    3.问题及解决方案

    • 问题1:截图的快捷键会触发kali里面的插入
    • 问题1解决方案:ctrl+alt即可恢复使用计算机功能
    • 问题2:修改d7为c3方法不太清楚
    • 问题2解决方案:直接按i即可
    • 问题3:gdb在虚拟机上无法通过指令安装,且通过换元方法安装时提示不能解释域名
    • 问题3解决方案:换了同学的电脑继续完成实验。

    4.学习感悟、思考等

    通过本次实验,我学会了三种缓冲区溢出的攻击方法和许多汇编语言的指令,遗憾的是由于某些问题在本人电脑上无法顺利安装gdb,和同学讨论后也未解决此问题,遂用同学电脑继续完成了本次实验。本次实验我也重点学习到了shellcode部分的结构。希望在后续的课程中能对网络攻防的知识有进一步的了解。

  • 相关阅读:
    SignalR 持久链接 (该功能为手机设备与后台同个用户id进行实现的,仅用signalR学习参考)
    SQL SERVER 分割符转列
    js时间计算加减
    SQL查询历史执行语句
    MSSQL 多行数据串联字符分割单行
    居于HttpWebRequest的HTTP GET/POST请求
    硬件UDP读数AsynUdpClient
    SQL取分组数据的所有第一条数据
    Python 文件的使用
    Python 数据类型
  • 原文地址:https://www.cnblogs.com/xingjiyuan/p/16059873.html
Copyright © 2020-2023  润新知