计算机网络安全实验-缓存区溢出攻击

本文详细介绍了计算机网络安全实验中的缓存区溢出攻击,涵盖实验一和实验二。实验内容包括利用Set-UID获取root权限,找到并修改内存中secret值,以及引发程序崩溃。实验中探讨了如何确定目标地址、构造堆栈读写,以及如何在地址随机化关闭的情况下执行攻击。
摘要由CSDN通过智能技术生成

计算机网络原理实验
实验环境:Linux Kernel 3.16.0//Debian 3.16.7(32位)//GCC 4.9.2
2016年4月19日

作业五:缓存区溢出实验

实验一

题目:
利用lab.c代码完成作业,当然你也可以使用自己写其他的代码完成。程序要求使用Set-UID获取root权限,在程序中存储了两个数值,SECRET1和SECRET2;这两个值,我们假设我们预先不知道,作为攻击者,我们想要知道这两个值;这两个字,我们设定为0x44和0x55。虽然我们不知道这两个数值,但是,在实际操作中,我们可以知道它们的内存地址或者大概的内容地址的范围(简单起见,程序中这两个数字的地址肯定是相邻的)。这次实验,假设我们已经知道了确切的地址,并打印出来了。因此,我们需要完成如下目标(不需要同时完成):
1.Crashing down 程序;
2.打印出secret[1]的值;
3.修改secret[1]的值;
4.修改secret[1]的值,值和3不同;
注意:你们可以将程序设置Set-UID,但是一旦写完程序以后,它就是二进制代码,你不能修改你的二进制代码。虽然,我给了你们一个实例(可攻击)的源码,辅助你们进行攻击,你可以修改,采用别的方式,但是你只能在二进制可执行程序前面,进行攻击。

//File: lab.c
#define SECRET1 0x44
#define SECRET2 0x55
int main(int argc, char *argv[])
{
    char user_input[100];
    int *secret;
    int int_input;
    int a, b, c, d; 

    secret = (int *) malloc(2*sizeof(int));

    secret[0] = SECRET1; secret[1] = SECRET2;
    printf("The variable secret's address is 0x%8x (on stack)\n", &secret);
    printf("The variable secret's value is 0x%8x (on heap)\n", secret);
    printf("secret[0]'s address is 0x%8x (on heap)\n", &secret[0]);
    printf("secret[1]'s address is 0x%8x (on heap)\n", &secret[1]);

    printf("Please enter a decimal integer\n");
    scanf("%d", &int_input); 
    printf("Please enter a string\n");
    scanf("%s"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值