2017-2018-2 20179317 卿爽 《网络攻防技术》第十周作业
实验一 nmap与Wireshark
利用网线将两台电脑连接起来,每台电脑均使用Kali虚拟机作为攻防环境,其中攻击方IP:192.168.1.40,防守方:192.168.1.20,攻击方通过nmap工具探测防守方,防守方利用tcpdump工具与Wireshark工具通过抓包分析对方攻击目的。
首先,防守方使用tcpdump抓包:
然后,攻击方使用nmap进行探测:
最后针对抓到的数据包利用Wireshark进行分析,如下:
可以看到,此处抓取了大量tcp包,并且是针对不同端口,因而可以分析出攻击方正在进行tcp端口扫描。
此图显示抓取到了大量udp包,说明攻击方正在进行udp端口扫描。
实验二 缓冲区溢出漏洞
主要通过实验楼缓冲区溢出漏洞试验课程,学习如何利用缓冲区溢出漏洞进行攻击。
一、实验简介
缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写。
二、实验步骤
实验环境为实验楼提供的虚拟操作系统。
由于是实验需在32位环境下操作,故首先使用以下命令安装相关环境:
sudo apt-get update sudo apt-get install lib32z1 libc6-dev-i386 sudo apt-get install lib32readline-gplv2-dev
安装完毕后,输入linux32
与/bin/bash
,进入32位linux环境,由于猜测内存地址是缓冲区溢出攻击的关键,所以首先使用以下命令:
sudo sysctl -w kernel.randomize_va_space=
关闭系统内存地址空间随机化功能,以方便猜测内存地址。
由于许多shell程序在被调用时会自动放弃他们的特权,因而需要使用另一个shell(zsh)来代替/bin/bash:
这里使用一个精心设计的shellcode使得缓冲溢出后,跳转到指定位置:
实际使用的是其汇编版本:
编写一个stack.c文件,内容如下:
编译该程序,其中,用 –fno-stack-protector 关闭栈保护机制,用-z execstack 用于允许执行栈,并更改权限:
编写攻击代码exploit.c,内容如下:
其中“\x??\x??\x??\x??”处需要添上shellcode保存在内存中的地址,下面查看该地址:
在0x080484f8处设定断点,并运行:
shellcode地址为 0xffffd020 + 100 = 0xffffd084
然后编译:
先运行攻击程序exploit,再运行漏洞程序stack:
可看到,攻击成功,获得root权限。