摘要:
OpenSSL 中的 `SSL` 加密是通过 `SSL/TLS` 协议来实现的。`SSL/TLS` 是一种安全通信协议,可以保障通信双方之间的通信安全性和数据完整性。在 `SSL/TLS` 协议中,加密算法是其中最核心的组成部分之一,SSL可以使用各类加密算法进行密钥协商,一般来说会使用`RSA`等加密算法,使用`TLS`加密针对服务端来说则需要同时载入公钥与私钥文件,当传输被建立后客户端会自行下载公钥并与服务端完成握手,读者可将这个流程理解为上一章中`RSA`的分发密钥环节,只是`SSL`将这个过程简化了,当使用时无需关注传输密钥对的问题。 阅读全文
摘要:
通过上一节的学习读者应该能够更好的理解`RSA`加密算法在套接字传输中的使用技巧,但上述代码其实并不算完美的,因为我们的公钥和私钥都必须存储在本地文本中且公钥与私钥是固定的无法做到更好的保护效果,而一旦公钥与私钥泄密则整个传输流程都将会变得不安全,最好的保护效果是`RSA`密钥在每次通信时都进行变换,依次来实现随机密钥对的功能。 阅读全文
摘要:
在C++编程中,经常需要迭代一系列数字或其他可迭代对象。通常,这需要编写复杂的循环结构,但有一种精妙的方法可以使这一过程变得更加简单和可读。如果你使用过Python语言那么一定对Range语句非常的数据,我们可以使用C++来实现一个简单的Range封装,如下代码定义了一个名为Range的命名空间,其中包含一个RangeImpl类和相关的函数,用于生成指定范围内的数值序列。这序列生成器支持指定开始值、结束值和可选步长,确保生成的序列满足指定的条件。此代码简化了迭代数值序列的过程,提高了代码的可读性和可维护性,适用于处理不同数据类型的序列。 阅读全文
摘要:
RSA算法同样可以用于加密传输,但此类加密算法虽然非常安全,但通常不会用于大量的数据传输,这是因为`RSA`算法加解密过程涉及大量的数学运算,尤其是模幂运算(即计算大数的幂模运算),这些运算对于计算机而言是十分耗时。其次在`RSA`算法中,加密数据的长度不能超过密钥长度减去一定的填充长度。一般情况下,当RSA密钥长度为`1024`位时,可以加密长度为`128`字节,密钥长度为`2048`位时,可以加密长度为`245`字节;当密钥长度为`3072`位时,可以加密长度为`371`字节。因此,如果需要加密的数据长度超过了密钥长度允许的范围,可以采用分段加密的方法。我们可以将数据包切割为每个`128`个字符,这样就可以实现循环传输大量字符串。 阅读全文
摘要:
在原生套接字编程中我们介绍了利用文件长度来控制文件传输的方法,本节我们将采用另一种传输方式,我们通过判断字符串是否包含`goodbye lyshark`关键词来验证文件是否传输结束了,当然了这种传输方式明显没有根据长度传输严谨,但使用这种方式也存在一个有点,那就是无需确定文件长度,因为无需读入文件所以在传输速度上要快一些,尤其是面对大文件时。 阅读全文
摘要:
命令执行机制的实现与原生套接字通信一致,仅仅只是在调用时采用了Boost通用接口,在服务端中我们通过封装实现一个`run_command`函数,该函数用于发送一个字符串命令,并循环等待接收客户端返回的字符串,当接收到结束标志`goodbye lyshark`时则说明数据传输完成则退出,客户端使用`exec_command`函数,该函数通过`_popen`函数执行一条命令,并循环`fgets`读取字符串发送给服务端,最终传输一个结束标志完成通信。 阅读全文
摘要:
多线程服务依赖于两个通用函数,首先`boost::bind`提供了一个高效的、简单的方法来创建函数对象和函数对象适配器,它的主要功能是提供了一种将函数和它的参数绑定到一起的方法,这种方法可以将具有参数的成员函数、普通函数以及函数对象转化为不带参数的函数对象。 阅读全文
摘要:
端口流量转发(Port Forwarding)是一种网络通信技术,用于将特定的网络流量从一个端口或网络地址转发到另一个端口或地址。它在网络中扮演着一个非常重要的角色,在Python语言中实现端口转发非常容易。如下这段代码实现了一个基本的TCP端口映射,将本地指定端口的流量转发到指定的远程IP和端口。实现方式是在接收到本地客户端连接请求后,创建一个线程,将本地连接和远程连接之间的数据传输通过线程分别实现,这样就实现了数据在本地和远程之间的单向流动,从而实现了TCP端口映射。 阅读全文
摘要:
在读者了解了加密算法的具体使用流程后,那么我们就可以使用这些加密算法对网络中的数据包进行加密处理,加密算法此处我们先采用`AES`算法,在网络通信中,只需要在发送数据之前对特定字符串进行加密处理,而在接收到数据后在使用相同的算法对数据进行恢复即可,读者如果有了套接字编程的基础,那么理解这段代码将变得很容易。 阅读全文
摘要:
使用`CRC32`还可实现图片去重功能,如下`FindRepeatFile`函数,运行后通过对所有文件做`crc`校验并将校验值存储至`CatalogueDict`字典内,接着依次提取`CRC`特征值并将其存储至`CatalogueList`列表内,接着通过统计特征值出现次数并将该次数放入到`CountDict`字典内,最后循环这个字典,并以此输出文件特征与重复次数,将重复值放入到`RepeatFileFeatures`列表内。 阅读全文
摘要:
Boost ASIO库是一个基于C++语言的开源网络编程库,该库提供了成熟、高效、跨平台的网络API接口,并同时支持同步与异步两种模式,ASIO库提供了多重I/O对象、异步定时器、可执行队列、信号操作和协程等支持,使得开发者可以轻松地编写可扩展的高性能网络应用程序,同时保持代码简洁、易于维护。在学习`ASIO`库之前,我们先来实现一个简单的地址解析功能,Boost库中提供了`ip::tcp::resolver`对象,该对象可用于解析给定主机名和端口号的`IP`地址,学会使用这个对象即可实现对特定主机域名地址的解析功能,如下封装实现了`GetDNSAddress`该函数传入一个域名,并输出该域名所对应的`IP`地址列表,并返回给`std::vector`容器内,其实现原理如下所示。 阅读全文
摘要:
在当今的Web安全行业中,识别目标网站的指纹是渗透测试的常见第一步。指纹识别的目的是了解目标网站所使用的技术栈和框架,从而进一步根据目标框架进行针对性的安全测试,指纹识别的原理其实很简单,目前主流的识别方式有下面这几种。这些指纹识别方式都是通过分析目标网站的特定特征或行为,从中推断所使用的框架或技术。它们可以帮助渗透测试人员了解目标网站的技术栈和框架,从而进行针对性的安全测试和漏洞扫描。本节内容中我们将采用第二种方式通过哈希鉴定来确定目标指纹信息,此种方法需要有完善的特征库,这些库我们可以自行寻找制作,也可以使用已有的库经过转换后获取。 阅读全文
摘要:
AES算法是一种对称加密算法,全称为高级加密标准(Advanced Encryption Standard)。它是一种分组密码,以`128`比特为一个分组进行加密,其密钥长度可以是`128`比特、`192`比特或`256`比特,因此可以提供不同等级的安全性。该算法采用了替代、置换和混淆等技术,以及多轮加密和密钥扩展等机制,使得其加密效果优秀,安全性高,被广泛应用于各种领域中,如数据加密、文件加密、网络安全等。AES算法加密和解密使用的密钥是相同的,该算法加密和解密速度较快,适用于对大量数据进行加密解密的场景。在实际应用中,通常采用混合加密方式,即使用RSA算法加密对称加密算法中的密钥,再使用对称加密算法加密数据,以保证数据的机密性和加密解密的效率。 阅读全文
摘要:
Web服务器本质上是一个提供Web服务的应用程序,运行在服务器上,用于处理HTTP请求和响应。它接收来自客户端(通常是浏览器)的HTTP请求,根据请求的URL、参数等信息生成HTTP响应,并将响应返回给客户端,完成客户端的请求。Web服务器可以使用多种编程语言和技术实现,通过对套接字的处理并遵循HTML等浏览器兼容格式即可实现。如果需要自行实现一个Web服务器则本质上就是需要完成套接字的处理,并在处理时增加遵循HTTP格式的头部数据即可,如下是一个简单的支持Web服务器的套接字程序,该程序运行后会在本机的`80`端口侦听,当用于通过浏览器访问时则会自动传输一段话。 阅读全文
摘要:
RSA算法是一种非对称加密算法,由三位数学家`Rivest`、`Shamir`和`Adleman`共同发明,以他们三人的名字首字母命名。RSA算法的安全性基于大数分解问题,即对于一个非常大的合数,将其分解为两个质数的乘积是非常困难的。RSA算法是一种常用的非对称加密算法,与对称加密算法不同,RSA算法使用一对非对称密钥,分别为公钥和私钥,公钥和私钥是成对生成的,公钥可以公开,用于加密数据和验证数字签名,而私钥必须保密,用于解密数据和生成数字签名。因此,RSA算法的使用场景是公钥加密、私钥解密,或者私钥加密、公钥解密。 阅读全文
摘要:
CRC文件校验是一种用于验证文件完整性的方法,通过计算文件的CRC值并与预先计算的CRC校验值进行比较,来判断文件是否发生变化,此类功能可以用于验证一个目录中是否有文件发生变化,如果发生变化则我们可以将变化打印输出,该功能可用于实现对特定目录的验证。首先实现文件与目录的遍历功能,递归输出文件或目录,在Python中有两种实现方式,我们可以通过自带的os.walk函数实现,也可以使用os.listdir实现,这里笔者依次封装两个函数,函数ordinary_all_file使用第一种方式,函数recursion_all_file使用第二种,这两种方式都返回_file列表,读者可使用列表接收输出数据集。 阅读全文
摘要:
OpenSSL 是一种开源的加密库,提供了一组用于加密和解密数据、验证数字证书以及实现各种安全协议的函数和工具。它可以用于创建和管理公钥和私钥、数字证书和其他安全凭据,还支持`SSL/TLS`、`SSH`、`S/MIME`、`PKCS`等常见的加密协议和标准。OpenSSL 的功能非常强大,可以用于构建安全的网络通信、加密文件和数据传输,还可以用于创建和验证数字签名、生成随机数等安全应用。它被广泛用于Web服务器、操作系统、网络应用程序和其他需要安全保护的系统中。 阅读全文
摘要:
Selenium是一个自动化测试框架,主要用于Web应用程序的自动化测试。它可以模拟用户在浏览器中的操作,如打开网页、点击链接、填写表单等,并且可以在代码中实现条件判断、异常处理等功能。Selenium最初是用于测试Web应用程序的,但也可以用于其他用途,如爬取网站数据、自动化提交表单等。Selenium支持多种编程语言,如Java、Python、C#等,同时也支持多种浏览器,如Chrome、Firefox、Safari等。 阅读全文
摘要:
BeautifulSoup库用于从HTML或XML文件中提取数据。它可以自动将复杂的HTML文档转换为树形结构,并提供简单的方法来搜索文档中的节点,使得我们可以轻松地遍历和修改HTML文档的内容。广泛用于Web爬虫和数据抽取应用程序中。 阅读全文
摘要:
Request库可以用来发送各种`HTTP`请求,该框架的特点是简单易用,同时支持同步和异步请求,支持`HTTP`协议的各种方法和重定向。它还支持`Cookie`、`HTTPS`和认证等特性。 `Request`库的使用非常广泛,可以用于网络爬虫、API调用、网站测试等场景。 阅读全文
摘要:
NPCAP 库是一种用于在Windows平台上进行网络数据包捕获和分析的库。它是WinPcap库的一个分支,由Nmap开发团队开发,并在Nmap软件中使用。与WinPcap一样,NPCAP库提供了一些API,使开发人员可以轻松地在其应用程序中捕获和处理网络数据包。NPCAP库可以通过WinPcap API进行编程,因此现有的WinPcap应用程序可以轻松地迁移到NPCAP库上。自定义数据包过滤其核心原理是使用`pcap_compile`函数,该函数用于编译一个过滤表达式并生成过滤程序。该函数可以把用户指定的过滤表达式编译成可被BPF(Berkeley Packet Filter)虚拟机处理的内部表示格式,从而可以快速过滤捕获的数据包,仅保留指定条件的数据包。 阅读全文
摘要:
NPCAP 库是一种用于在`Windows`平台上进行网络数据包捕获和分析的库。它是`WinPcap`库的一个分支,由`Nmap`开发团队开发,并在`Nmap`软件中使用。与`WinPcap`一样,NPCAP库提供了一些`API`,使开发人员可以轻松地在其应用程序中捕获和处理网络数据包。NPCAP库可以通过`WinPcap API`进行编程,因此现有的WinPcap应用程序可以轻松地迁移到NPCAP库上。与WinPcap相比,NPCAP库具有更好的性能和可靠性,支持最新的操作系统和硬件。它还提供了对`802.11`无线网络的本机支持,并可以通过`Wireshark`等网络分析工具进行使用。 NPCAP库是在`MIT`许可证下发布的,因此可以在免费和商业软件中使用。 阅读全文
摘要:
Scapy 是一款使用纯Python编写的跨平台网络数据包操控工具,它能够处理和嗅探各种网络数据包。能够很容易的创建,发送,捕获,分析和操作网络数据包,包括TCP,UDP,ICMP等协议,此外它还提供了许多有用的功能,例如嗅探网络流量,创建自定义协议和攻击网络的安全测试工具。使用Scapy可以通过Python脚本编写自定义网络协议和攻击工具,这使得网络安全测试变得更加高效和精确。网络端口扫描用于检测目标主机上开放的网络端口。端口扫描可以帮助安全专业人员识别存在的网络漏洞,以及识别网络上的服务和应用程序。在进行端口扫描时,扫描程序会发送特定的网络数据包,尝试与目标主机的每个端口进行通信。如果端口处于打开状态,则扫描程序将能够成功建立连接。否则,扫描程序将收到一条错误消息,表明目标主机上的该端口未开放。 阅读全文
摘要:
原生套接字抓包的实现原理依赖于`Windows`系统中提供的`ioctlsocket`函数,该函数可将指定的网卡设置为混杂模式,网卡混杂模式(`Promiscuous Mode`)是常用于计算机网络抓包的一种模式,也称为监听模式。在混杂模式下,网卡可以收到经过主机的所有数据包,而非只接收它所对应的`MAC`地址的数据包。一般情况下,网卡会根据`MAC`地址过滤数据包,只有`MAC`地址与网卡所对应的设备的通信数据包才会被接收和处理,其他数据包则会被忽略。但在混杂模式下,网卡会接收经过它所连接的网络中所有的数据包,这些数据包可以是面向其他设备的通信数据包、广播数据包或多播数据包等。混杂模式可以通过软件驱动程序或网卡硬件实现。启用混杂模式的主要用途之一是网络抓包分析,使用混杂模式可以捕获网络中所有的数据包,且不仅仅是它所连接的设备的通信数据包。因此,可以完整获取网络中的通信内容,便于进行网络监控、安全风险感知、漏洞检测等操作。 阅读全文
摘要:
GeoIP2是一种IP地址定位库,它允许开发人员根据`IP`地址查找有关位置和地理位置的信息。它使用`MaxMind`公司的IP地址数据库,并提供一个方便的Python API。GeoIP2可以用于许多不同的应用程序,例如网站分析、广告定位和身份验证。GeoIP2提供了许多不同的信息,例如国家、城市、邮政编码、经纬度、时区等等。它还可以使用IPv6地址进行查询。 阅读全文