OPENSSL基础使用
实验目的
掌握常见的密码学算法应用,包含des aes md5 rsa等
实验环境
一台Centos 7.2 已经安装openssl组件
实验原理
openssl是Linux内置的一款开源工具,实现了常见的密码算法与应用。通过openssl操作,完成各种密码算法的应用。
实验步骤
创建一个文件,用于被加密,文件内容为12345,文件名为test.txt
1 |
|
一、对称加密
1、使用rc4加解密
加密openssl enc -e -rc4 -in test.txt -out test_rc4.enc
解密openssl enc -d -rc4 -in test_rc4.enc -out test_rc4.dm
2、使用AES加解密
openssl enc -e -aes-128-cbc -a -salt -in test.txt -out test_aes128.enc
解密
openssl enc -d -aes-128-cbc -a -salt -in test_aes128.enc -out test_aes128.d
3、使用3DES加解密
加密openssl enc -e -des3 -a -salt -in test.txt -out test_des3.enc
解密openssl enc -d -des3 -a -salt -in test_des3.enc -out test_des3.d
二、非对称加密
1、RSA加解密码
生成RSA密钥对
openssl genrsa -out rsa.key 1024
导出公钥
openssl rsa -in rsa.key -pubout -out rsa_pub.key
使用公钥加密文件
openssl rsautl -encrypt -in test.txt -inkey rsa_pub.key -pubin -out test_rsa.enc
使用私解解密文件
openssl rsautl -decrypt -in test_rsa.enc -inkey rsa.key -out test_rsa.c
使用公钥解密报错
openssl rsautl -decrypt -in test_rsa.enc -inkey rsa_pub.key -out test_rsa.c
实验总结
通过实验的openssl 实现对称加解密与非对称加解密两种基线的加解密功能。
思考对称与非对称加解密码的流程上有何不同?为什么?
密码学之数字签名
实验目的
掌握哈希算法与数字签名算法的实现
实验环境
一台Centos 7.2 已经安装openssl组件
实验原理
openssl是Linux内置的一款开源工具,实现了常见的密码算法与应用。通过openssl操作,完成各种密码算法的应用。
实验步骤
一、生成测试文件
1 |
|
二、使用MD5算法生成哈希值
生成md.txt的哈希
openssl dgst -md5 md.txt
复制md.txt文件
1 |
|
对md.txt.2生成md5哈希值
openssl dgst -md5 md.txt.2
比对发现md.txt和md.txt.2两个文件的哈希值一样
三、使用RSA签名
1、生成RSA密钥对
openssl genrsa -out rsa.key 1024
2、导出公钥
openssl rsa -in rsa.key -pubout -out rsa_pub.key
3、使用rsa私钥签名
openssl sha1 -sign rsa.key -out rsasign.bin test.txt
4、使用rsa 公钥验证签名
openssl sha1 -verify rsa_pub.key -signature rsasign.bin test.txt
四、使用DSA签名
1、生成dsa参数
openssl dsaparam -out dsap.pem 1024
2、查看dsa参数明文
openssl dsaparam -in dsap.pem -text -noout
3、使用上述参数生成dsa密钥
openssl gendsa -out dsa1.pem dsap.pem
4、再次使用上述参数生成dsa密钥
openssl gendsa -out dsa2.pem dsap.pem
5、比较上述两个密钥,由相同参数生成的两个密钥是不同的。
1 |
|
6、由参数生成私钥,并使用des加密
1 |
|
7、由私钥生成公钥
openssl dsa -in dsaprivatekey.pem -pubout -out dsapublickey.pem
8、使用私钥dsaprivatekey.pem签名text.txt,dsasign.bin为签名文件
openssl dgst -dss1 -sign dsaprivatekey.pem -out dsasign.bin test.txt
9、使用公钥验证签名
openssl dgst -dss1 -verify dsapublickey.pem -signature dsasign.bin test.txt
10、使用私钥验证签名
openssl dgst -dss1 -prverify dsaprivatekey.pem -signature dsasign.bin test.txt
实验总结
通过使用rsa和dsa的签名,加强密码学中签名应用的理解。
密码学之CA的使用
实验目的
掌握CA的应用,通过实验理解CA的概念
实验环境
一台Centos 7.2 已经安装openssl组件
实验原理
openssl是Linux内置的一款开源工具,实现了常见的密码算法与应用。通过openssl操作,完成各种密码算法的应用。
实验步骤
一、生成selfsigned证书
生成selfsign.crt,证书
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out cerficate.crt
依次输入证书的相关信息,国家,省份,城市,公司,部门,域名,邮箱
二、生成独立的CA
1、 生成ca的keyopenssl genrsa -des3 -out ca.key 4096
2、生成CA的证书openssl req -new -x509 -days 365 -key ca.key -out ca.crt
三、生成服务器的私钥key和签名请求文件csr
1、生成https服务器私钥
openssl genrsa -des3 -out myserver.key 4096
2、生成https服务器证书请求文件
openssl req -new -key myserver.key -out myserver.csr
利用ca的证书和key,生成我们的证书
openssl x509 -req -days 365 -in myserver.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out myserver.crt
Set_serial设置的证书的编号
查看证书的信息:
openssl x509 -noout -text -in myserver.crt | more
四、验证证书
验证证书的CA
openssl verify -CAfile ca.crt myserver.crt
去掉https服务器证书的加密保护:openssl rsa -in myserver.key -out server.key.insecure
将CRT格式转DER格式
openssl x509 -outform der -in myserver.crt -out myserver.der
五、模拟https服务
模拟https的服务,将结果输出到1.txt,并在后台运行openssl s_server -accept 443 -cert myserver.crt -key server.key.insecure -www >1.txt &
模拟用户连接openssl s_client -connect 127.0.0.1:443 | more
按ctrl+c中断当前查看
总结
通过新建CA服务器证书, 对https服务的csr签名,并模拟https服务器,进行访问。
密码学之apache部署https
实验目的
掌握apache部署自定义证书的https服务器方法
实验拓扑
实验环境
一台Centos 7.2 已经安装openssl组件,已安装apache httpd,用于搭建https服务器
一台windows 10客户端,已安装chrome浏览器
实验原理
openssl是Linux内置的一款开源工具,实现了常见的密码算法与应用。通过openssl操作,完成各种密码算法的应用。
实验步骤
一、生成独立的CA
1、 生成ca的keyopenssl genrsa -des3 -out ca.key 4096
2、生成CA的证书openssl req -new -x509 -days 365 -key ca.key -out ca.crt
二、生成服务器的私钥key和签名请求文件csr
1、生成https服务器私钥
openssl genrsa -des3 -out myserver.key 4096
2、生成https服务器证书请求文件
openssl req -new -key myserver.key -out myserver.csr
利用ca的证书和key,生成我们的证书
openssl x509 -req -days 365 -in myserver.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out myserver.crt
Set_serial设置的证书的编号
三、安装apache的ssl模块
1、服务上已经安装有apache,要实现apache的https功能,需要安装ssl模块
1 |
|
四、复制证书到对应路径
1 |
|
五、修改apache配置文件,让证书生效
1 |
|
将证书和私钥路径指为如图
保存并退出文件
六、重启apache服务
1 |
|
注意输入myserver.key的加密密码
七、测试网站证书
使用客户端chrome浏览器访问服务器https页面,
我这里服务器ip是192.168.0.232
高级
继续前往
查看服务器证书,点“不安全”
注意查看颁发者和使用者,想想和前面哪些配置是对应上的?
实验总结
请同学自行回顾整理实验思路
CA–服务器证书–使用CA签名服务器证书–部署证书–查看证书
密码学之使用密钥登录SSH服务器
实验目的
掌握SSH密钥登录的配置与应用
实验拓扑
实验环境
两台centos服务器
一台作为SSH服务器
一台作为SSH客户端,使用密钥连接SSH服务器
实验原理
SSH登录除了传统的密码登录,可以使用密钥文件登录,结合PAM模块,也可以实现双因子登录等。
实验步骤
一、配置服务器SSH密钥登录
以下操作使用服务器进行
1、编辑SSH配置文件
1 |
|
2、删除#号
删除PubkeyAuthentication yes此行前面的#号
保存文件并退出
3、重启ssh服务
1 |
|
二、使用客户端生成密钥
以下操作使用客户端进行
1、生成SSH登录的密钥对
1 |
|
2、查看生成的密钥
1 |
|
确保以下两个文件是新生成的。
三、上传客户端公钥证书到服务器
以下操作使用客户端进行
1、使sftp连接服务器
1 |
|
输入yes
输入服务器密码
2、上传公钥文件
1 |
|
3、退出sftp客户端
1 |
|
四、配置服务器公钥
以下操作使用服务器进行
通过第三步,我们已经将公钥证书放到了/root/id_rsa.pub
这里我们将公钥文件输出到服务器配置文件中
1 |
|
五、验证密钥登录
以下操作使用客户端登录
1、指定私钥文件登录
1 |
|
此时我们可以看到直接登录进了服务器,并没有输入密码。因为我们使用了证书验证
总结
在使用私钥证书登录时,我们也可以给私钥证书加上密码,此时不是验证服务器的密码,而是验证私钥证书的加密密码。
同理在Windows下,也可以使用ssh工具,如xshell实现ssh的密钥登录,有兴趣同学可以自己尝试。
密码学之RSA破解实验
实验目的
通过实验环境桌面上给出的rsa文件夹,找到flag.
实验环境
一台windows 10,已安装python 2.7 ,crypto模块,chrome浏览器等。
实验原理
从RSA的公钥导出N,尝试分解RSA公钥。有分解的出的p和q,根据欧拉函数找出私钥关键值d,最后导出私钥进行解密。
实验步骤
一、观察文件
打开桌面上的RSA文件夹,观察发现
一个flag.enc
一个public.pem
一个windows下的openssl文件夹
二、依次用打开public.pem和flag.enc
1、在public.pem文件上点击击右键,使用notepad++打开
观察推测为一个rsa的公钥文件
2、在flag.enc文件上点击击右键,使用notepad++打开
观察发现为二进制乱码,可能是加密文件。
三、使用openssl工具查看公钥文件
1、打开命令行窗口
右键点开始菜单,运行powershell
2、切换路径到桌面上的rsa文件夹
1 |
|
3、使用openssl读取公钥文件
1 |
|
查看到rsa的
Exponent: 65537 (0x10001)
Modulus=A41006DEFD378B7395B4E2EB1EC9BF56A61CD9C3B5A0A73528521EEB2FB817A7
即
e=65537
n=A41006DEFD378B7395B4E2EB1EC9BF56A61CD9C3B5A0A73528521EEB2FB817A7
四、尝试分解n
1、将n从16进制转换10进制
使用python shell
在前面powershell 窗口中,输入python2
依次输入下面代码
1 |
|
得到n的10进制为
74207624142945242263057035287110983967646020057307828709587969646701361764263
2、分解n
通常我们可以使用下面网站分解n
打开桌面上的chrome浏览器,访问上述网址
输入n的值
分解成功
1 |
|
即
p=258631601377848992211685134376492365269
q=286924040788547268861394901519826758027
五、使用python的cyrpto库,破解d,并生成私钥
新建记事本,使用notepad++打开
编写以下代码
1 |
|
保存文件
2、将新建文本文档重命名为111.py
3、使用python2 运行111.py
打开powershell窗口
退出之前的python shell
1 |
|
使用python2运行111.py
1 |
|
执行成功后,在目录下会生成私钥文件private.pem
六、使用私钥解密文件
使用openssl工具,私钥解密flag.enc
1 |
|
如图解密出来的最终flag为SECURITYCOLLEGE
总结
在本实验rsa的破解过程中,关键步骤是分解n=pxq, 这也是整个rsa算法的核心。
安全导论-IP与MAC地址的静态绑定
实验目的
理解ARP协议的工作原理,熟悉ARP静态缓存的设置方法,利用ARP静态缓存实现IP与MAC地址绑定。
实验环境
操作机:Pentest-Atk
(1)操作系统:Windows 10
(2)登录账号密码:操作系统帐号Administrator,密码Sangfor!7890
靶机:A-SQLi-Labs
(1)操作系统:CentOS 7
(2)登录账号密码:操作系统帐号root,密码Sangfor!7890
实验原理
ARP协议的工作原理:在局域网中,每台主机都会在自己的ARP缓冲区中建立一个ARP缓存表,以表示IP地址和MAC地址的对应关系。当源主机需要将一个数据包要发送到目的主机时,会首先检查自己ARP缓存表中是否存在该IP地址对应的MAC地址,如果有,就直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。此ARP请求数据包里包括源主机的IP地址、硬件地址、以及目的主机的IP地址。网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP缓存表中,如果ARP缓存表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个ARP响应数据包,告诉对方自己是它需要查找的MAC地址;源主机收到这个ARP响应数据包后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP缓存表中,并利用此信息开始数据的传输。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
正是因为ARP动态缓存的特点,ARP欺骗就是通过更改这个动态缓存来达到欺骗的目的,即通过伪造ARP响应包,诱使目标主机更新动态缓存。
为了防止ARP欺骗,采用静态ARP缓存将IP与MAC地址进行绑定,不失为一个有效的方法。然而,设置静态ARP缓存时,如果IP与MAC地址绑定错误,则会造成两台主机无法正常通信的问题。
实验步骤
1.启动Windows命令行工具
在操作机Pentest-Atk上启动Windows操作系统的命令行工具cmd:
2.尝试与靶机通信,并查看操作机的ARP缓存
在命令行工具cmd中输入以下命令,尝试ping靶机A-SQLi-Labs:
1 |
|
结果显示:靶机在线。
继续输入以下命令查看操作机的ARP缓存表:
1 |
|
查到操作机ARP缓存表中,有一条靶机的IP与MAC地址对应关系的动态缓存记录。
3.查看操作机网卡的Idx号
在命令行工具中输入以下命令查看操作机网卡的Idx号:
1 |
|
结果显示,操作机网卡的Idx号为4,将其记录下来。
注意:请根据实验的实际情况记录Idx号!
4.在操作机网卡上绑定靶机的IP与MAC地址
说明:此处,为了验证IP与MAC地址绑定错误时是否会造成通信故障,因此会尝试将正确的IP地址与错误的MAC地址进行绑定!
在命令行工具cmd中输入以下命令,在操作机网卡上绑定靶机的IP(正确)与MAC(错误)地址:
1 |
|
绑定完成之后,继续输入以下命令查看ARP缓存:
1 |
|
结果显示,操作机ARP缓存中有了一条错误的静态缓存记录,即靶机的IP地址是正确的,但MAC地址是错误的。
5.在操作机上再次尝试与靶机进行通信
在命令行工具cmd中输入以下命令,尝试ping靶机:
1 |
|
结果显示未ping通。
利用以下命令清空ARP缓存:
1 |
|
清空缓存后,再次输入以下命令,尝试ping靶机:
1 |
|
此时,操作机与靶机恢复正常通信。
实验至此结束。
实验总结
通过本实验,理解了ARP协议的工作原理,熟悉了ARP静态缓存的设置方法,并利用ARP静态缓存实现了IP与MAC地址绑定,验证了IP与MAC地址绑定错误时或造成通信故障的现象。
网络空间安全导论-网页恶意代码
实验目的
了解简单网页恶意代码的编写、利用与防范方法,体验恶意代码的危害。
实验环境
操作机:Win2003svr
(1)操作系统:Windows Server 2003(内含Internet Explorer 6.0)
(2)登录账号密码:操作系统帐号Administrator,密码Sangfor!7890
实验原理
网页恶意代码主要利用系统平台或应用软件的安全漏洞,通过执行嵌入在网页HTML语言内的Java
Applet小应用程序、JavaScript脚本语言程序、ActiveX控件部件等可自动执行的代码程序,强行修改用户操作系统的注册表及系统配置程序,或非法控制系统资源盗取用户文件,或恶意删除硬盘文件、格式化硬盘等,达到干扰或破坏网络或系统的目的。
实验步骤
1.编写并测试网页恶意代码test1.html
(1)在桌面上新建记事本文档test1.txt,打开后编辑如下代码并保存:
1 |
|
如图所示:
(2)将test1.txt改名为test1.html,选择用Internet Exploror执行该文档,进入如图所示界面:
在相应位置单击鼠标右键,在弹出的菜单中点击“允许阻止的内容”,弹出如图所示对话框:
点击“是”按钮,则网页会出现红、蓝两种条纹不断更换的现象,如图所示:
清除这种网页恶意代码的方法是:点击“Windows任务管理器”中的“进程”标签页,选中iexplore.exe,点击“结束进程”按钮,如图所示:
然后再将test1.html中编辑的那一段代码删除,或将test1.html文件直接删除即可。
2.编写并测试网页恶意代码test2.html
仿照上述步骤,在桌面上新建记事本文档test2.txt,打开后编辑如下代码并保存:
1 |
|
如图所示:
将test2.txt改名为test2.html,选择用Internet Exploror执行该文档,然后观察实验现象,发现IE会不断打开百度网页,如图所示:
清除这种网页恶意代码的方法与清除test1.html的方法相同:在“Windows任务管理器”中结束iexplore.exe进程,并将test2.html中编辑的那一段代码删除,或将test2.html文件直接删除即可。
实验总结
本次实验,体验了恶意代码的危害,复现了简单网页恶意代码的编写、利用及防御过程。