20169305 2016-2017-2 《网络攻防技术与实践》第10周学习总结
实验一 Nmap和Wireshark
实验需要两人合作完成,分别作为攻击方和防守方。
第一步,利用网线将两台电脑连接起来,均使用Kali虚拟机作为攻防环境,其中攻击方IP:192.168.1.40(我的),防守方:192.168.1.20(对方),攻击方通过nmap工具有针对性的进行扫描,防守方利用tcpdump和Wireshark工具通过抓包,分析对方攻击目的。
第二步,防守方使用tcpdump抓包,抓取的包命名为nmapsT.pcapng:
第三步,攻击方使用nmap进行扫描(此处选择进行TCP端口扫描):
第四步,利用wireshark针对自己抓取的数据包进行分析:
由以上图片可知,利用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进入32位linux环境,猜测内存地址是缓冲区溢出攻击的关键,使用以下命令:
sudo sysctl -w kernel.randomize_va_space=0
关闭系统内存地址空间随机化功能,以方便猜测内存地址。
由于许多shell程序在被调用时会自动放弃他们的特权,因而需要使用另一个shell(zsh)来代替/bin/bash:
一般情况下,缓冲区溢出会造成程序崩溃,在程序中,溢出的数据覆盖了返回地址。而如果覆盖返回地址的数据是另一个地址,那么程序就会跳转到该地址,如果该地址存放的是一段精心设计的代码用于实现其他功能,这段代码就是shellcode。
把以下代码保存为“stack.c”文件,保存到 /tmp 目录下。代码如下:
编译该程序,其中,用** –fno-stack-protector **关闭栈保护机制,用-z execstack 用于允许执行栈,并更改权限:
把以下攻击代码保存为“exploit.c”文件,保存到 /tmp 目录下。代码如下:
x??x??x??x??”处需要添上shellcode保存在内存中的地址,使用命令gdb stack查看地址:
在0x080484c8处设定断点,并运行:
shellcode地址为 0xffffd270+100=0xffffd2d4,修改exploit.c文件的内容:
然后进行编译:
使用命令./exploit进行攻击,运行漏洞程序./stack,得到如下结果:
学习进度条
学习目标(本学期)
完成网络攻防课程的学习,完成各种攻防实践操作。
本周完成内容
学习了实验楼缓冲区溢出漏洞课程,基本完成实验。
参考资料
缓冲区溢出漏洞实验
《网络攻防技术与实践》