20232812 张泽昊 2023-2024-2 《网络攻防实践》第九周作业

一、实验内容

1.手工修改可执行文件,改变程序执行流程。

2.利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址。

3.注入一个自己制作的shellcode并运行这段shellcode。

二、实验过程

1.

反汇编看看代码

这个函数看着是开辟一个24字节的内存,然后把一个数据存到开辟的内存里,然后调用另一个函数。ebp一般用来存函数起始地址,运行函数前先把地址存上,运行完之后再把这个地址给esp栈指针接着运行别的函数。

main函数开局就掉到foo函数了,只需要把这里改成目标函数,让他call 0804847d

对应十六进制数只需要做个加减

修改后运行

ok了

2.

这里是把输入的东西输出出去,输入的内容放到了内存里,又可以操作了

字符串超过28字节就已经覆盖进入这个函数前的栈地址了,到这里就可以攻击

超过ebp的部分就是eip寄存器,直接攻击这里就可以转到相应函数了。

输入一长串,把后面的字节改为目标函数地址,要注意大小端和字节的顺序。

成功。

3.

shellcode直接上网找一个或者生成一个,有现成的生成代码

关闭地址随机化,开始找pwn11中ret的代码位置

gdb调试,找foo函数,再设置断点找到ret地址

然后试了两个shellcode代码都错误。

再试一次

0xffffd65c 加上4再小端法就是60d6ffff

成功了

三、实验心得与遇到的问题

1.上课被提问的时候还没想起来相关知识,说到堆栈就想起来了,以前学csapp的时候学过相关的栈溢出攻击,栈内溢出后多出的字节要是是新的指令就可以对主机进行攻击,然后有滑雪橇法来找诸如ret的指令,改变他的返回字段来返回到自己的攻击程序开头,也可以用金丝雀值来防御。

2.用户名改着有点费劲,我一直是ahri或者ahril没变过,上学期linux课创过新的用户组但是忘了咋整了。

3.64位的linux运行不了32位的程序,下个对应版本包就好了。

4.那自己注入一个程序也太费劲了,还要查地址还要根据地址改代码,也没工具能一键攻击的。

5.最后一个出错就是没有把文件设置为堆栈可执行,因为我每个文件都是复制出来再重命名使用的,源文件没设置。

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值