网络安全学习(5):AWVS
Acunetix Web Vulnerability Scanner(简称AWVS)是一款知名的网络漏洞扫描工具,是一个针对web服务的扫描工具。
新版的AWVS是通过网页的方式使用,前后端分离,因此可以用Docker部署,这里我就选择使用Docker部署的方式来安装。
使用Docker部署
拉取下载镜像
1docker pull secfa/docker-awvs
创建容器,并将3443端口映射到物理即的13443端口
123docker run -it -d -p 13443:3443 secfa/docker-awvs//Windows下可能需要添加一个参数docker run -it -d --cap-add LINUX_IMMUTABLE -p 13443:3443 secfa/docker-awvs
访问awvs,在浏览器中打开https://127.0.0.1:13443(其中127.0.0.1可以替换为Docker所在服务器的地址)
由于https的原因,首次访问这个网页会弹出不信任,直接无视访问即可。若是Google Chrome可能相对更麻烦一些,建议自 ...
网络安全学习(4):KPI
PKI
PKI:Public Key Infrastructure 公钥基础设施
作用:通过加密技术和数字签名保证信息的安全
组成:公钥加密技术、数字证书、CA、RA
信息安全三要素
机密性
完整性
身份验证/操作的不可否认性
用到PKI的领域
SSL/HTTPS
IPsecVPN
公钥加密技术
作用:实现对信息加密、数字签名等安全保障
加密算法:
对称加密算法(DES、3DES、AES…):加密与解密的密钥一致
例:x+5=y,x是原数据/原文,y是密文;其加密与解密密钥都是5
非对称加密算法(RSA…)
通信双方各自产生一对公私钥
双方交换公私钥
公钥与私钥为互相加解密关系
公私钥不可互相逆推
数字签名:用自己的私钥对摘要(MD5)加密得出的密文。
数字证书
证书是用于保证公钥的合法性,格式遵循X.509标准。
数字证书包含的信息有:
使用者的公钥值
使用者的标识信息(名称、电子邮件等)
有效期(证书的有效时间)
颁发者标识信息
颁发者的数字签名
数字证书由权威公正的第三方机构,即CA签发。
Manjaro和ArchLinux下安装VirtualBox过程以及踩坑
安装VirtualBox时,遇到一个启动虚拟机卡在20%的问题。翻了ArchLinux的BBS和Wiki,可算找到了解决方案,疑似是11代Intel的锅。
安装过程
首先通过uname -r查看系统的内核版本,例如
16.1.19-1-MANJARO
可以查看到我的内核版本是6.1,接下来使用pacman安装VirtualBox
1sudo pacman -S virtualbox
会出现很多选项,选择对应的内核版本即可。接下来我们安装vbox的拓展包
1sudo pacman -Ss virtualbox-ext-oracle
然后我们需要重启或者使用命令载入vboxdrv模块
1sudo modprobe vboxdrv
问题出现
当我们打开vbox,创建虚拟机,启动虚拟机时,发现虚拟机的界面卡在了正在启动虚拟机,然后查看vbox页面,卡在了20%。
(我似乎忘记留存问题的图了,后面复刻问题后再补上)
经过我查找问题,发现问题似乎出现在11代Intel CPU上,接下来是在BBS和Wiki发现解决问题链接:
https://wiki.archlinux.org/title/Virt ...
网络安全学习(3):DHCP
DHCP
DHCP具体在这里不会赘述,主要讲DHCP原理、部署、安全。
DHCP原理
可以称为DHCP租约过程,分为四个步骤
客户机发生DHCP Discovery(发现)广播包
客户机广播请求IP地址(包含客户机的MAC地址)
服务器响应DHCP Offer广播包
服务器响应提供IP地址(无子网掩码、网关等参数)
客户机发送DHCP Request广播包
客户机选择IP(也可认为确认使用哪个IP)
发送DHCP ACK(确认)广播包
服务器确定租约,并提供网卡详细参数IP、掩码、网关、DNS、租期等
DHCP续约
当50%过后,客户机会再次发送DHCP Request包进行续约;
若服务器未响应,则会继续使用且在87.5%再次发送进行续约,如果仍然无响应,则释放IP地址,重新进行DHCP租约过程获取IP地址。
当无任何服务器响应时,会自动给自己分配一个169.254.x.x/16(无效IP地址)。
部署DHCP服务器
使用的服务器版本:Windows Server 2022
首先我们打开设置,找到应用,选择程序与功能(相关设置)
我们选择启用或关闭Windows功能 ...
渗透测试学习(2):在docker下搭建Kali-Linux环境
概述
先来谈谈这种方式的优缺点
优点:
可以不用运行额外的完整操作系统
可以直接在当前终端启动Kali,并使用其工具
缺点:
无法直接访问硬件,导致部分工具使用相当复杂
达到的效果:
过程概述:
从docker拉取kali-linux官方提供的映像kalilinux/kali-rolling;
构建一个容器,进入容器的shell,更新软件源,并下载kali linux的工具包;
基于我们作出更改的容器,创建新的映像,我们的映像中将包含更新和工具包;
对Kali内部分数据目录映射到Docker Volumes,每次使用完Kali后,都会自动删除容器,并利用我们镜像和Volumes随时重新创建;
编写启动脚本,并将其设置在环境变量中。
完整过程
拉取Kali Linux 的官方Docker映像
1docker pull kalilinux/kali-rolling
基于该映像构建一个容器,并进入shell
1docker run -ti kalilinux/kali-rolling
这时候我们开启的这个kali仅仅是一个骨架,不包含任何工具,此时我们要使用apt工具, ...
数据库系统概论复习
视频来自https://www.bilibili.com/video/BV1Bq4y1Y7GC
关系理论
函数依赖
函数依赖指的是X可以推导出Y,即Y依赖于X,记作X->Y
非平凡的函数依赖:X→Y,Y⊄X{X}\rightarrow{Y},{Y}\not\subset{X}X→Y,Y⊂X,在大多数情况下没有指明的函数依赖都是非平凡的函数依赖
平凡的函数依赖:X→Y,Y∈X{X}\rightarrow{Y},{Y}\in{X}X→Y,Y∈X,几乎没有什么作用,一般某个集合总能推导出其子集,即平凡的函数依赖
完全函数依赖:X→YX\rightarrow{Y}X→Y,并且对于X的任意真子集X',都有Y不依赖于X',则称之为完全函数依赖;
个人理解就是,当Y依赖于X时,仅有X本身可以推导出Y,X的任意部分都不能单独推导出Y
部分函数依赖:Y不完全函数依赖于X。即作X-P->Y(P在箭头上)。例如A→CA\rightarrow{C}A→C,又有AB→C{AB}\rightarrow{C}AB→C,那么C就是部分依赖于AB。
这种情况会导致数据冗余,因为A本身就可以推导出C, ...
go-zero框架学习笔记(1):环境配置
Goctl安装
goctl是go-zero框架下的代码生成工具。其功能有:
api服务生成
rpc服务生成
model代码生成
模板管理
go get 安装goctl
12345# Go 1.15 及之前版本GO111MODULE=on GOPROXY=https://goproxy.cn/,direct go get -u github.com/zeromicro/go-zero/tools/goctl@latest# Go 1.16 及以后版本GOPROXY=https://goproxy.cn/,direct go install github.com/zeromicro/go-zero/tools/goctl@latest
通过此方式安装,会自动安装在$GOPATH/bin,如果忘了自己的$GOPATH在什么地方,可以通过
1go env
查找到对应的目录。
添加到环境参数
若原先设定过$GOPATH,应该是不需要这一步。由于我是通过pacman安装的Go,因此没有设定过。
以我本人所用的zsh终端举例,使用任意文本编辑工具(vim、vi)打开~/.zshrc,添加如下一行 ...
golang基础笔记(11):泛型
泛型
在Go 1.18版本中,添加了对泛型的支持。泛型是一种独立于所使用的特定类型的编写代码的方法。使用泛型可以编写出适用于一组类型中的任何一种的函数和类型,便利了代码的编写。
泛型的作用
假设我们有一个调换int参数的函数,现在我们需要一个调换float参数的函数,没有泛型时,我们需要将相同的逻辑、不同的类型参数的函数重复多遍。
1234567func excInt(a, b int) (int, int) { return b, a}func excFloat(a, b float32) (float32, float32) { return b, a}
但那是有了泛型,就可以很方便的编写出适用所有元素类型的“普适版”的函数
123func exchange[T any](a, b T) (T, T) { return b, a}
泛型语法
泛型为Go语言添加了三个新的重要特性:
函数和类型的类型参数。
将接口类型定义为类型集,包括没有方法的类型。
类型推断,它允许在调用函数时在许多情况下省略类型参数。
这里我们着重讲 ...
golang基础笔记(10):反射
反射介绍
反射指的是再程序运行期间对程序本身进行访问和修改的能力。
Go程序在运行期间使用reflect包访问程序的反射信息,包括字段名称、类型信息、结构体信息等。
一个具体的例子是,空接口可以存储任意类型的变量,那我们如何知道这个空接口保存的数据是什么呢? 反射就是在运行时动态的获取一个变量的类型信息和值信息。
golang基础笔记(9):Error接口
Error接口
Go语言不支持其他语言使用try/catch方式捕获处理错误,而是将错误作为一种特殊的值来处理。
Go语言使用了一个名为 error 接口来表示错误类型
123type error interface { Error() string}
当一个函数或方法需要返回错误时,我们通常是把错误作为最后一个返回值。例如下面标准库 os 中打开文件的函数
123func Open(name string) (*File, error) { return OpenFile(name, O_RDONLY, 0)}
errors.New
创建错误的最简单的方式就用errors.New()函数来创建一个错误
123456func queryById(id int64) (*Info, error) { if id <= 0 { return nil, errors.New("无效的id") } //...}
它接收一个字符串参数返回包含该字符串的错误。
fmt.Error ...