Buffer Overflow缓冲区溢出实验(MIPS)

实验目的:

(1)了解缓冲区溢出的原理;

(2)了解程序的栈结构、函数调用以及参数传递的规则;

(3)了解MIPS指令是如何编码的;

(4)加深对debug工具(如GDB)的了解。


实验软件和硬件环境: 

Linux 2.6.32-loongson2h

ICT Loongson-2H V0.5 FPU V0.1


实验原理和方法:

通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。


实验步骤:

(1)溢出分析:getbuf函数中buf只有40个字节长度,但该函数没有对输入的字符串进行判断,存在缓冲区溢出漏洞。

(2)通过执行gdb的bt指令调试观察得,执行完getbuf()后会返回到test()中,由栈的相关知识得,要想通过缓冲区溢出的方式跳转到touch函数就要把touch函数的地址覆盖到getbuf上面的返回地址处。

(3)通过执行disas指令查看getbuf()的反汇编代码得,为了覆盖getbuf函数内的缓冲区以及栈顶及栈顶上的返回地址只要构造48字节长度的字符串就可以将返回地址覆盖,最后四个字节的内容存放touch函数的地址,保证返回地址被touch函数的地址覆盖。

(3)通过p touch打印touch函数的地址:0x400978

(4)因为MIPS架构中字节顺序是小端模式,故在原字符串后追加输入00 00 00 00 78 09 40 00,即完成跳转。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值