格式化字符串漏洞实验

作业信息

|这个作业属于哪个课程|<[格式化字符串漏洞实验]https://www.lanqiao.cn/courses/228/learning/?id=734)>|
|--    |--    |
|这个作业要求在哪里|<第十一周作业](https://edu.cnblogs.com/campus/besti/2020-2021-1LKPA/homework/11269>|
|这个作业的目标|<练习安全类实验>|
|作业正文|... https://www.cnblogs.com/assignment/p/14146283.html    |

一、实验原理

  • 目标:我们需要得到一段数据的内存地址,但我们无法修改代码,供我们使用的只有格式字符串。
  • 方法:
    1.定位:利用printf 函数获取目标地址

    2.获取目标值,最大的挑战:使用四个 %x 来移动 printf 函数的栈指针到目标位置,使用 %s 来目标地址的值(因为是将其作为字符串来处理,所以会一直打印到结束符为止)
    3.修改目标值:利用%n和%.目标数字u,计算所需的字符数
    4.利用文件输入目标地址,避免ASILL码转换问题

二、 实验 1 修改secret[1]为期望值

攻击程序

1.新建vul_prog.c文件

在/home/shiyanlou/目录下,新建vul_prog.c文件,输入以下代码内容:

2.编译

可以添加以下参数关掉栈保护
gcc -z execstack -fno-stack-protector -o vul_prog vul_prog.c

3.增加权限

sudo chmod u+s vul_prog

找出 secret[1]的值

1.定位目标地址

运行 vul_prog 程序去定位 int_input 的位置,这样就确认了 %s 在格式字符串中的位置。

2.更改攻击程序

输入 secret[1] 的地址,记得做进制转换,同时在格式字符串中加入 %s

3.修改目标地址的值

修改secret[1]为期望值

三、实验 2 使用文件实现特殊字符的输入

1.修改攻击程序

vul_prog.c 程序
现在让我们把第一个 scanf 语句去掉,并去掉与 int_input 变量相关的所有语句

2.设置关闭地址随机化选项:

sudo sysctl -w kernel.randomize_va_space=0

3.修改secret[0]的值

4.使用文件实现特殊字符的输入,避免输入被识别为ASCLL的问题

 posted on 2020-12-16 21:17  20209313  阅读(150)  评论(0编辑  收藏  举报