OPENSSL基础使用

实验目的

掌握常见的密码学算法应用,包含des aes md5 rsa等

实验环境

一台Centos 7.2 已经安装openssl组件

实验原理

openssl是Linux内置的一款开源工具,实现了常见的密码算法与应用。通过openssl操作,完成各种密码算法的应用。

实验步骤

创建一个文件,用于被加密,文件内容为12345,文件名为test.txt

1
echo 12345 >test.txt

image.png

一、对称加密

1、使用rc4加解密

加密
openssl enc -e -rc4 -in test.txt -out test_rc4.enc

image.png

解密
openssl enc -d -rc4 -in test_rc4.enc -out test_rc4.dm

image.png

2、使用AES加解密

openssl enc -e -aes-128-cbc -a -salt -in test.txt -out test_aes128.enc

image.png

解密

openssl enc -d -aes-128-cbc -a -salt -in test_aes128.enc -out test_aes128.d

image.png

3、使用3DES加解密

加密
openssl enc -e -des3 -a -salt -in test.txt -out test_des3.enc

image.png

解密
openssl enc -d -des3 -a -salt -in test_des3.enc -out test_des3.d

image.png

二、非对称加密

1、RSA加解密码

生成RSA密钥对

openssl genrsa -out rsa.key 1024
image.png
导出公钥

openssl rsa -in rsa.key -pubout -out rsa_pub.key

image.png

使用公钥加密文件

openssl rsautl -encrypt -in test.txt -inkey rsa_pub.key -pubin -out test_rsa.enc

image.png

使用私解解密文件

openssl rsautl -decrypt -in test_rsa.enc -inkey rsa.key -out test_rsa.c

image.png

使用公钥解密报错

openssl rsautl -decrypt -in test_rsa.enc -inkey rsa_pub.key -out test_rsa.c

image.png

实验总结

通过实验的openssl 实现对称加解密与非对称加解密两种基线的加解密功能。
思考对称与非对称加解密码的流程上有何不同?为什么?

密码学之数字签名

实验目的

掌握哈希算法与数字签名算法的实现

实验环境

一台Centos 7.2 已经安装openssl组件

实验原理

openssl是Linux内置的一款开源工具,实现了常见的密码算法与应用。通过openssl操作,完成各种密码算法的应用。

实验步骤

一、生成测试文件

1
2
3
echo 12345   >  test.txt

echo hello > md.txt

image.png

二、使用MD5算法生成哈希值

生成md.txt的哈希

openssl dgst -md5 md.txt

image.png

复制md.txt文件

1
cp md.txt  md.txt.2

image.png

对md.txt.2生成md5哈希值

openssl dgst -md5 md.txt.2

image.png

比对发现md.txt和md.txt.2两个文件的哈希值一样

三、使用RSA签名

1、生成RSA密钥对

openssl genrsa -out rsa.key 1024
image.png

2、导出公钥

openssl rsa -in rsa.key -pubout -out rsa_pub.key

image.png

3、使用rsa私钥签名

openssl sha1 -sign rsa.key -out rsasign.bin test.txt

image.png

4、使用rsa 公钥验证签名

openssl sha1 -verify rsa_pub.key -signature rsasign.bin test.txt

image.png

四、使用DSA签名

1、生成dsa参数

openssl dsaparam -out dsap.pem 1024

image.png

2、查看dsa参数明文

openssl dsaparam -in dsap.pem -text -noout

image.png

3、使用上述参数生成dsa密钥

openssl gendsa -out dsa1.pem dsap.pem

image.png

4、再次使用上述参数生成dsa密钥

openssl gendsa -out dsa2.pem dsap.pem

image.png

5、比较上述两个密钥,由相同参数生成的两个密钥是不同的。

1
diff dsa1.pem  dsa2.pem

image.png

6、由参数生成私钥,并使用des加密

1
openssl gendsa -out dsaprivatekey.pem -des3 dsap.pem

image.png

7、由私钥生成公钥

openssl dsa -in dsaprivatekey.pem -pubout -out dsapublickey.pem

image.png

8、使用私钥dsaprivatekey.pem签名text.txt,dsasign.bin为签名文件

openssl dgst -dss1 -sign dsaprivatekey.pem -out dsasign.bin test.txt

image.png

9、使用公钥验证签名

openssl dgst -dss1 -verify dsapublickey.pem -signature dsasign.bin test.txt

image.png

10、使用私钥验证签名

openssl dgst -dss1 -prverify dsaprivatekey.pem -signature dsasign.bin test.txt

image.png

实验总结

通过使用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

image.png

依次输入证书的相关信息,国家,省份,城市,公司,部门,域名,邮箱

image.png

二、生成独立的CA

1、 生成ca的key
openssl genrsa -des3 -out ca.key 4096

image.png

2、生成CA的证书
openssl req -new -x509 -days 365 -key ca.key -out ca.crt

image.png

三、生成服务器的私钥key和签名请求文件csr

1、生成https服务器私钥

openssl genrsa -des3 -out myserver.key 4096

image.png

2、生成https服务器证书请求文件

openssl req -new -key myserver.key -out myserver.csr

image.png

利用ca的证书和key,生成我们的证书

openssl x509 -req -days 365 -in myserver.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out myserver.crt

Set_serial设置的证书的编号

image.png

查看证书的信息:

openssl x509 -noout -text -in myserver.crt | more

image.png

四、验证证书

验证证书的CA

openssl verify -CAfile ca.crt myserver.crt

image.png

去掉https服务器证书的加密保护:
openssl rsa -in myserver.key -out server.key.insecure

image.png

将CRT格式转DER格式

openssl x509 -outform der -in myserver.crt -out myserver.der

image.png

五、模拟https服务

模拟https的服务,将结果输出到1.txt,并在后台运行
openssl s_server -accept 443 -cert myserver.crt -key server.key.insecure -www >1.txt &

image.png

模拟用户连接
openssl s_client -connect 127.0.0.1:443 | more

image.png

按ctrl+c中断当前查看

总结

通过新建CA服务器证书, 对https服务的csr签名,并模拟https服务器,进行访问。

密码学之apache部署https

实验目的

掌握apache部署自定义证书的https服务器方法

实验拓扑

image.png

实验环境

一台Centos 7.2 已经安装openssl组件,已安装apache httpd,用于搭建https服务器

一台windows 10客户端,已安装chrome浏览器

实验原理

openssl是Linux内置的一款开源工具,实现了常见的密码算法与应用。通过openssl操作,完成各种密码算法的应用。

实验步骤

一、生成独立的CA

1、 生成ca的key
openssl genrsa -des3 -out ca.key 4096

image.png

2、生成CA的证书
openssl req -new -x509 -days 365 -key ca.key -out ca.crt

image.png

二、生成服务器的私钥key和签名请求文件csr

1、生成https服务器私钥

openssl genrsa -des3 -out myserver.key 4096

image.png

2、生成https服务器证书请求文件

openssl req -new -key myserver.key -out myserver.csr

image.png

利用ca的证书和key,生成我们的证书

openssl x509 -req -days 365 -in myserver.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out myserver.crt

Set_serial设置的证书的编号

image.png

三、安装apache的ssl模块

1、服务上已经安装有apache,要实现apache的https功能,需要安装ssl模块

1
yum install -y mod_ssl

image.png

四、复制证书到对应路径

1
2
cp myserver.crt  /etc/pki/tls/certs/
cp myserver.key /etc/pki/tls/private/

image.png

五、修改apache配置文件,让证书生效

1
vim /etc/httpd/conf.d/ssl.conf

image.png

将证书和私钥路径指为如图

image.png

保存并退出文件

六、重启apache服务

1
systemctl restart httpd

注意输入myserver.key的加密密码

image.png

七、测试网站证书

使用客户端chrome浏览器访问服务器https页面,

我这里服务器ip是192.168.0.232

https://192.168.0.232

高级
image.png

继续前往
image.png

查看服务器证书,点“不安全”

image.png

image.png

image.png

注意查看颁发者和使用者,想想和前面哪些配置是对应上的?
image.png

实验总结

请同学自行回顾整理实验思路
CA–服务器证书–使用CA签名服务器证书–部署证书–查看证书

密码学之使用密钥登录SSH服务器

实验目的

掌握SSH密钥登录的配置与应用

实验拓扑

image.png

实验环境

两台centos服务器

一台作为SSH服务器
一台作为SSH客户端,使用密钥连接SSH服务器

实验原理

SSH登录除了传统的密码登录,可以使用密钥文件登录,结合PAM模块,也可以实现双因子登录等。

实验步骤

一、配置服务器SSH密钥登录

以下操作使用服务器进行

1、编辑SSH配置文件

1
vim /etc/ssh/sshd_config

image.png

2、删除#号

删除PubkeyAuthentication yes此行前面的#号

image.png

保存文件并退出

3、重启ssh服务

1
systemctl restart sshd

image.png

二、使用客户端生成密钥

以下操作使用客户端进行

1、生成SSH登录的密钥对

1
ssh-keygen -t rsa

image.png

2、查看生成的密钥

1
ls -l /root/.ssh/

确保以下两个文件是新生成的。

image.png

三、上传客户端公钥证书到服务器

以下操作使用客户端进行

1、使sftp连接服务器

1
sftp root@192.168.0.6

输入yes

输入服务器密码

image.png

2、上传公钥文件

1
put /root/.ssh/id_rsa.pub

image.png

3、退出sftp客户端

1
exit

image.png

四、配置服务器公钥

以下操作使用服务器进行

通过第三步,我们已经将公钥证书放到了/root/id_rsa.pub

这里我们将公钥文件输出到服务器配置文件中

1
cat /root/id_rsa.pub  >>  ~/.ssh/authorized_keys

image.png

五、验证密钥登录

以下操作使用客户端登录

1、指定私钥文件登录

1
ssh -i /root/.ssh/id_rsa  root@192.168.0.6

image.png

此时我们可以看到直接登录进了服务器,并没有输入密码。因为我们使用了证书验证

总结

在使用私钥证书登录时,我们也可以给私钥证书加上密码,此时不是验证服务器的密码,而是验证私钥证书的加密密码。

同理在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文件夹

image.png

二、依次用打开public.pem和flag.enc

1、在public.pem文件上点击击右键,使用notepad++打开

image.png

观察推测为一个rsa的公钥文件

image.png

2、在flag.enc文件上点击击右键,使用notepad++打开

image.png

观察发现为二进制乱码,可能是加密文件。

image.png

三、使用openssl工具查看公钥文件

1、打开命令行窗口

右键点开始菜单,运行powershell

image.png

2、切换路径到桌面上的rsa文件夹

1
cd desktop\rsa

image.png

3、使用openssl读取公钥文件

1
./openssl/openssl rsa -pubin -text -modulus -in public.pem

image.png

查看到rsa的
Exponent: 65537 (0x10001)
Modulus=A41006DEFD378B7395B4E2EB1EC9BF56A61CD9C3B5A0A73528521EEB2FB817A7


e=65537
n=A41006DEFD378B7395B4E2EB1EC9BF56A61CD9C3B5A0A73528521EEB2FB817A7

四、尝试分解n

1、将n从16进制转换10进制
使用python shell

在前面powershell 窗口中,输入python2

image.png

依次输入下面代码

1
2
s='A41006DEFD378B7395B4E2EB1EC9BF56A61CD9C3B5A0A73528521EEB2FB817A7'
int(s,16)

image.png

得到n的10进制为
74207624142945242263057035287110983967646020057307828709587969646701361764263

2、分解n
通常我们可以使用下面网站分解n

http://factordb.com/index.php

打开桌面上的chrome浏览器,访问上述网址

image.png

输入n的值

image.png

分解成功

image.png

1
7420762414...63<77> = 258631601377848992211685134376492365269<39> · 286924040788547268861394901519826758027<39>


p=258631601377848992211685134376492365269
q=286924040788547268861394901519826758027

五、使用python的cyrpto库,破解d,并生成私钥

新建记事本,使用notepad++打开

image.png

编写以下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#coding:utf-8

import math
import sys
from Crypto.PublicKey import RSA
arsa=RSA.generate(1024)
arsa.p=258631601377848992211685134376492365269
arsa.q=286924040788547268861394901519826758027
arsa.e=65537
arsa.n=arsa.p*arsa.q
Fn=long((arsa.p-1)*(arsa.q-1))

#此处原理e*d=Fn*i+1
i=1
while(True):
x=(Fn*i)+1
if(x%arsa.e==0):
arsa.d=x/arsa.e
break
i=i+1
private=open('private.pem','w')
private.write(arsa.exportKey())
private.close()

保存文件

image.png

2、将新建文本文档重命名为111.py

image.png

image.png

3、使用python2 运行111.py

打开powershell窗口

退出之前的python shell

1
exit()

image.png

使用python2运行111.py

1
python2 111.py

image.png

执行成功后,在目录下会生成私钥文件private.pem

image.png

六、使用私钥解密文件

使用openssl工具,私钥解密flag.enc

1
.\openssl\openssl rsautl -in flag.enc -inkey private.pem -decrypt

image.png

如图解密出来的最终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:

image.png

2.尝试与靶机通信,并查看操作机的ARP缓存

在命令行工具cmd中输入以下命令,尝试ping靶机A-SQLi-Labs:

1
ping [靶机IP]

image.png

结果显示:靶机在线。

继续输入以下命令查看操作机的ARP缓存表:

1
arp -a

image.png

查到操作机ARP缓存表中,有一条靶机的IP与MAC地址对应关系的动态缓存记录。

3.查看操作机网卡的Idx号

在命令行工具中输入以下命令查看操作机网卡的Idx号:

1
netsh i i show in

image.png

结果显示,操作机网卡的Idx号为4,将其记录下来。

注意:请根据实验的实际情况记录Idx号!

4.在操作机网卡上绑定靶机的IP与MAC地址

说明:此处,为了验证IP与MAC地址绑定错误时是否会造成通信故障,因此会尝试将正确的IP地址与错误的MAC地址进行绑定!

在命令行工具cmd中输入以下命令,在操作机网卡上绑定靶机的IP(正确)与MAC(错误)地址:

1
2
3
netsh -c "i i" add neighbors [操作机网卡的Idx号] "待绑定的IP" "待绑定的MAC"

//注意:命令中每个选项、参数中间均有空格!

绑定完成之后,继续输入以下命令查看ARP缓存:

1
arp -a

image.png

结果显示,操作机ARP缓存中有了一条错误的静态缓存记录,即靶机的IP地址是正确的,但MAC地址是错误的。

5.在操作机上再次尝试与靶机进行通信

在命令行工具cmd中输入以下命令,尝试ping靶机:

1
ping [靶机IP]

image.png

结果显示未ping通。

利用以下命令清空ARP缓存:

1
arp -d

清空缓存后,再次输入以下命令,尝试ping靶机:

1
ping [靶机IP]

image.png

此时,操作机与靶机恢复正常通信。

实验至此结束。

实验总结

通过本实验,理解了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
3
4
5
6
7
8
9
10
11
12
13
14
15
<html>
<body>
<script>
var color = new Array
color[0]="red"
color[1]="blue"
x=0
while(true)
{
document.bgColor=color[x++]
document.bgColor=color[x--]
}
</script>
</body>
</html>

如图所示:

image.png

(2)将test1.txt改名为test1.html,选择用Internet Exploror执行该文档,进入如图所示界面:

image.png

在相应位置单击鼠标右键,在弹出的菜单中点击“允许阻止的内容”,弹出如图所示对话框:

image.png

点击“是”按钮,则网页会出现红、蓝两种条纹不断更换的现象,如图所示:

image.png

清除这种网页恶意代码的方法是:点击“Windows任务管理器”中的“进程”标签页,选中iexplore.exe,点击“结束进程”按钮,如图所示:

image.png

然后再将test1.html中编辑的那一段代码删除,或将test1.html文件直接删除即可。

2.编写并测试网页恶意代码test2.html

仿照上述步骤,在桌面上新建记事本文档test2.txt,打开后编辑如下代码并保存:

1
2
3
4
5
6
7
8
9
10
11
12
13
<html>
<body _onload="Popup()">
<script language="javascript">
function Popup()
{
while(true)
{
window.open("http://www.baidu.com")
}
}
</script>
</body>
</html>

如图所示:

image.png

将test2.txt改名为test2.html,选择用Internet Exploror执行该文档,然后观察实验现象,发现IE会不断打开百度网页,如图所示:

image.png

清除这种网页恶意代码的方法与清除test1.html的方法相同:在“Windows任务管理器”中结束iexplore.exe进程,并将test2.html中编辑的那一段代码删除,或将test2.html文件直接删除即可。

实验总结

本次实验,体验了恶意代码的危害,复现了简单网页恶意代码的编写、利用及防御过程。