20155328 《信息安全系统设计基础》第六周 课堂提交补充

20155328 《信息安全系统设计基础》第六周 课堂提交补充

第六周课上测试-3

编写一个程序w0603,运行以下代码:

short int v=-学号后四位;
unsigned short uv=(unsigned short)v;
printf("v=%d,uv=%u
",v,uv);

在第3行设置断点用gdb调试,用p/x v,p/x uv查看变量的值,分析p/x v,p/x uv与程序运行结果的不同与联系。

gdb中调试如下:

程序运行如下:

可以看到gdb中用p/x显示的值为v=uv=0xeb30,而运行结果为v=-5328,uv=60208.

分析:%d打印的是原数值,%u打印时将有符号数化作无符号数,符号位变成数值位。

第六周课上测试-5

通过输入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;
}

使用gdb跟踪汇编代码,在纸上画出f中每一条语句引起的eip(rip),ebp(rbp),esp(rsb),eax(rax)的值和栈的变化情况。

Step1:进入gdb模式,在main函数处设置行断点,run后输入disassemble,得到汇编代码:

Step2:

输入i r(info registers),然后用x/4a SP的值看栈的值:

Step3:

输入命令display/i $pc,符号=>后跟着的是系统正在执行的命令,输入si,用i r查看这条命令执行结束后寄存器的值的变化,然后用x/4a SP的值看栈的值:

之后一直重复si i r x/4a SP的值 直到结束

缓冲区溢出漏洞实验

Step1:输入命令安装一些用于编译32位C程序的东西:

sudo apt-get update
sudo apt-get install lib32z1 libc6-dev-i386
sudo apt-get install lib32readline-gplv2-dev

Step2:输入“/bin/bash”使用bash:

Step3:在/tmp目录下撰写stack.c文件。编译该程序,并设置SET-UID。

Step4:在/tmp目录下编写exploit.c文件。输入gdb命令:

Step5:找到str起始地址,在下一行处设置断点,run,使用i r查看exp的值。编译exploit程序。先运行攻击程序exploit,再运行漏洞程序stack,观察结果:

原文地址:https://www.cnblogs.com/zyqzyq/p/7751533.html