/proxy-demo

JNU-网络信息安全综合实验-信息的安全传输

Primary LanguagePythonMIT LicenseMIT

Demo样例,请勿用于实际环境,不足之处欢迎指点和纠正,感激不尽

参考链接

理解socks5协议的工作过程和协议细节

写给开发人员的实用密码学

粘包拆包问题

alpha

浏览器与远程服务器直接通过socks5连接,socks5协议的数据都是未加密的明文,因此可以被监听(不考虑应用层的加密协议,仅针对传输层)


模拟172.17.0.1为浏览器,172.17.0.2为服务器

浏览器尝试与远程服务器握手,发送050100表明socks5协议,仅支持无密码认证方式

服务器选中一个方法返回给客户端,返回0500使用无密码认证方式

浏览器向服务器发送请求细节,包含域名和端口120.x.x.201:50735

服务器收到请求后,需要返回一个响应其中包含服务绑定的地址和端口

完成握手后,服务器开始进行中继

浏览器向服务器发送请求,服务器收到后,解析内容,如果是TCP请求,服务器向目标建立TCP连接,将所有数据转发到目标(即120.x.x.201:50735)

可以看到数据被明文传输

beta

浏览器连接本地客户端,本地客户端与远程服务器通过socks5连接,传输数据为未加密的明文,因此可以被监听(不考虑应用层的加密协议,仅针对传输层)

与alpha的差别在于将传输流程拆分,本地客户端在浏览器与远程服务器之间起到了桥梁的作用,为后面添加加密操作打基础

final

浏览器连接本地客户端,本地客户端与远程服务器之间的数据传输被加密,无法被监听


生成RSA文件

openssl genrsa -out private.key 2048
openssl rsa -in private.key -pubout -out public.pem

EDCH握手示例

客户端向服务器发送握手报文

服务器生成共享密钥并回应握手报文

客户端请求在经过RC4加密(密钥会该次EDCH握手协商得到的共享密钥)后发送到服务器

服务器解密后发送到目标地址

服务器接收目标地址的响应报文

响应报文在经过RC4加密(密钥会该次EDCH握手协商得到的共享密钥)后发送到客户端

客户端正确解密


文件发送测试,客户端加密

服务器解密并转发

目的地址正确接收文件