2021-2022-1 20212815《Linux内核原理与分析》第十二周作业

实验二:格式化字符串漏洞实验

实验原理:格式化字符串漏洞是由像 printf(user_input) 这样的代码引起的,其中 user_input 是用户输入的数据,具有 Set-UID root 权限的这类程序在运行的时候,printf 语句将会变得非常危险,因为它可能会导致下面的结果:
• 使得程序崩溃
• 任意一块内存读取数据
• 修改任意一块内存里的数据
最后一种结果是非常危险的,因为它允许用户修改 set-UID root 程序内部变量的值,从而改变这些程序的行为

实验过程
一、找出secret[1]的值
1、在/home/shiyanlou/目录下新建vul_prog.c文件(wget
http://labfile.oss.aliyuncs.com/courses/228/vul_prog.c) 在这里插入图片描述
2、编译vul_prog.c并关闭栈保护
在这里插入图片描述在这里插入图片描述
3、运行vul_prog去定位int_input的位置,确认%s在格式字符串中的位置为第8个
在这里插入图片描述
4、输入secret[1]的地址,转换为十进制后为6299668,将第八个位置的字符串替换为%s,则打印出secret[1]的值,U的ascii码为55
在这里插入图片描述
二、修改secret[1]的值为1000
1、输入secret[1]的地址,转换为十进制后为6299668,将第八个位置的字符串替换为%n,则将secret[1]的值修改为了0x77。%n将前面的字符数存储到变量中,7个地址共有7*16个字符,再加上7个逗号则有119个字符,即0x77.
在这里插入图片描述
2、用格式化字符填充将secret[1]的值改为十进制的1000,%.897u表示填充897个字符
在这里插入图片描述
三、修改secret[0]的值
1、在vul_prog.c中删去与int_input相关的语句
在这里插入图片描述
2、在终端中关闭地址随机化选项,使每次运行程序得到的secret地址不变
在这里插入图片描述
3、在/home/shiyanlou目录下新建程序write_string.c
在这里插入图片描述
4、编译vul_prog.c和write_string.c
在这里插入图片描述
5、先运行vul_prog,再运行write_string生成mystring文件
在这里插入图片描述
6、输入./vul_prog < mystring
在这里插入图片描述
则我们将secret[0]的值由0x44改成了0x8c

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值