利用网线将两台电脑链接起来,每台电脑均使用Kali虚拟机做为攻防环境,其中攻击方IP:192.168.1.40,防守方:192.168.1.20,攻击方经过nmap工具探测防守方,防守方利用tcpdump工具与Wireshark工具经过抓包分析对方攻击目的。linux
首先,防守方使用tcpdump抓包:shell
而后,攻击方使用nmap进行探测:bash
最后针对抓到的数据包利用Wireshark进行分析,以下:网络
能够看到,此处抓取了大量tcp包,而且是针对不一样端口,于是能够分析出攻击方正在进行tcp端口扫描。dom
此图显示抓取到了大量udp包,说明攻击方正在进行udp端口扫描。tcp
主要经过实验楼缓冲区溢出漏洞试验课程,学习如何利用缓冲区溢出漏洞进行攻击。工具
缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的状况。这一漏洞能够被恶意用户利用来改变程序的流控制,甚至执行代码的任意片断。这一漏洞的出现是因为数据缓冲器和返回地址的暂时关闭,溢出会引发返回地址被重写。学习
实验环境为实验楼提供的虚拟操做系统。spa
因为是实验需在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=0
关闭系统内存地址空间随机化功能,以方便猜想内存地址。
因为许多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权限。
通过本周的学习,了解了缓冲区溢出攻击的简单实现方法,想要灵活使用,仍是须要多多实践。
完成网络攻防课程的学习,完成各类攻防实践操做。
学习了实验楼缓冲区溢出漏洞课程,基本完成实验。
周次 | 教材学习 | 视频学习(新增/累计) | 博客(新增/累计) |
---|---|---|---|
第1周 | (实验楼学习) | (实验楼学习) | 1/1 |
第2周 | 第一、2章 | 5/5 | 1/2 |
第3周 | 第3章 | 5/10 | 2/4 |
第4周 | 第4章 | 5/15 | 1/5 |
第5周 | 第十一、12章 | 5/20 | 1/6 |
第6周 | 第五、6章 | 5/25 | 1/7 |
第7周 | 第7章 | 5/30 | 1/8 |
第8周 | 第8章 | 5/35 | 1/9 |
第9周 | 第九、10章 | 3/38 | 1/10 |
第10周 | (实验楼学习) | (实验楼学习) | 1/11 |