2017-2018-1 20155333 《信息安全系统设计基础》课堂测试
第六周课上测试-1-ch02
-
参考附图代码,编写一个程序 “week0601学号.c",判断一下你的电脑是大端还是小端。
-
提交运行结果”学号XXXX的笔记本电脑是X端“的运行截图,要全屏,包含自己的学号信息
-
课下把代码推送到代码托管平台**
第六周课上测试-2-ch02
-
调用附图代码,编写一个程序 “week0602学号.c",用show_int(), show_float()打印一下你的4位学号,参考教材P33打印出匹配的位序列。
-
提交运行结果截图,要全屏,要包含自己的学号信息
-
课下把代码推送到代码托管平台*
-
参考教材p82,给出出匹配的位序列的推导过程
第六周课上测试-3-ch02
- 编写一个程序 “week0603学号.c",运行下面代码:
1 short int v = -学号后四位
2 unsigned short uv = (unsigned short) v
3 printf("v = %d, uv = %u
", v, uv);
-
在第三行设置断点用gdb调试,用p /x v; p /x uv 查看变量的值,提交调试结果截图,要全屏,要包含自己的学号信息
-
分析p /x v; p /x uv 与程序运行结果的不同和联系
第六周课上测试-4-ch03
- 通过输入gcc -S -o main.s main.c 将下面c程序”week0603学号.c“编译成汇编代码
int g(int x){
return x+3;
}
int f(int x){
int i = 学号后两位;
return g(x)+i;
}
int main(void){
return f(8)+1;
}
- 删除汇编代码中 . 开关的代码,提交f 函数的汇编代码截图,图中用矩形标出函数栈帧的形成和销毁的代码
第六周课上测试-5-ch03
- 通过输入gcc -S -o main.s main.c 将下面c程序”week0603学号.c“编译成汇编代码
int g(int x){
return x+3;
}
int f(int x){
int i = 学号后两位;
return g(x)+i;
}
int main(void){
return f(8)+1;
}
- 参考http://www.cnblogs.com/lxm20145215----/p/5982554.html,使用gdb跟踪汇编代码,在纸上画出f中每一条语句引起的eip(rip),ebp(rbp),esp(rsb),eax(rax)的值和栈的变化情况。提交照片,要有学号信息。
ch02 课下作业(课上没完成测试的必做)
- 补充完成课上测试(不能只有截图,要有分析,问题解决过程,新学到的知识点)
- 完成教材 p97 2.96 2.97,要有完备的测试
- 发一篇相关内容的博客, 提交博客链接
ch03 课下作业(课上没完成测试的必做)
- 补充完成课上测试(不能只有截图,要有分析,问题解决过程,新学到的知识点)
- 在自己的电脑中完成https://www.shiyanlou.com/courses/231缓冲区溢出漏洞实验 实验
- 发一篇相关内容的博客, 提交博客链接
一、实验简介
缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写。
二、实验准备
系统用户名shiyanlou
实验楼提供的是64位Ubuntu linux,而本次实验为了方便观察汇编语句,我们需要在32位环境下作操作,因此实验之前需要做一些准备。
1、输入命令安装一些用于编译32位C程序的东西:
sudo apt-get update
sudo apt-get install lib32z1 libc6-dev-i386
sudo apt-get install lib32readline-gplv2-dev
2、输入命令“linux32”进入32位linux环境。此时你会发现,命令行用起来没那么爽了,比如不能tab补全了,所以输入“/bin/bash”使用bash
三、实验步骤
根据语句 strcpy(buffer+100,shellcode); 我们计算shellcode的地址为 0xffffd010(十六进制)+100(十进制)=0xffffd074(十六进制)
现在修改exploit.c文件!将 x??x??x??x?? 修改为 x74xd0xffxff
然后,编译exploit.c程序
先运行攻击程序exploit,再运行漏洞程序stack,观察结果
可见,通过攻击,获得了root权限!