网络安全——使用RSA对称密钥对HTTPS数据包进行解码

综合渗透测试-使用RSA对称密钥对HTTPS数据包进行解码

第一步,打开网络拓扑,启动实验虚拟机。

第二步,整理当前所掌握的信息 

  

所有文件均位于Kali Linux桌面下的https目录中

资料准备完毕,正式开始实验。使用Kali Linux中的wireshark工具打开ssl.pcap,未经过解密的文件内容如下

第三步,在wireshark中分别找到clienthello、serverhello、clientkey exchange数据包,并将这些数据包中的client random,server random和Encrypted PreMaster的二进制数据提取出来。具体步骤如下:

选择要导出的字段,注意序号为14 的握手类型Client Hello (1)

Clienthello:(序号为14的数据包)

点击鼠标右键,选择导出分组字节流, 

以bin结尾的文件格式保存到output目录下,并将其命名为client_rand.bin,

Serverhello:(序号为6的数据包)

Encrypted PreMaster:(序号为18的数据包)

接下来以clienthello相同的方法依次导出client_rand.bin、server_rand.bin、premaster_encrypted.bin具体过程不再演示。

第四步,提前将client_rand.bin、server_rand、premaster_encrypted.bin及https/private.pem复制到桌面上方便后面的操作

在Kali中使用命令hexdump -C 目标文件依次查看这三个二进制文件的内容,

首先,我们来对premaster-encrypted.bin进行解密。利用已获得的私钥private.pem进行解密,解密命令为:openssl pkeyutl -decrypt -in ./premaster-encrypted.bin -inkey ./private.pem -out premaster-decrypted.bin,记得提前将private.pem、premaster-encrypted.bin移动到桌面目录下。

若未提示报错,则表示命令执行成功,将解密的数据存入到premaster-decrypted.bin文件中,用hexdump可查看。对于很多安全人员来说,得到了预备主密码就相当于已经实现了解密内容的最后一步。接下的步骤,我们通过预备主密码来计算主密码。

第五步,在通过预备主密码来计算主密码的过程中,仍需要利用Client Random和Server Random这两个随机数,使用命令cat client_rand.bin server_rand.bin > rand_c+s.bin

接下来,我们通过伪随机函数计算(PRF)计算主密码,伪随机函数计算程序需在windows下运行:

在进行运算之前我们首先将random_c+s.bin、premaster-decrypted.bin和PRF.exe复制到apache2的根目录下/var/www/html,使用命令service apache2 start启动apache2,删除/var/www/html/index.html文件,在win10中访问kali的站点

然后使用windows的Chrome下载该文件,具体步骤省略。通过以上命令计算得到master-secret.bin

注:PRF为网上共享的计算程序(https://github.com/lowleveldesign/diagnostics-tools/tree/master/PRF),利用该计算程序就可得到主密码文件master-secret.bin,在kali中开启ssh服务,然后使用Win10桌面上的WinSCP来连接,用于文件的上传和下载。回到kali中使用命令hexdump master-secret.bin,查看文件

第六步,接下来就可以利用主密码计算加密传输数据的对称密钥和其他参数了。在解密之前,需要生成rand_s+c.bin,与上一个文件不同的是client random和server random的顺序不一样如下

依照第五步的方法,我们利用RPF.exe对rand_s+c.bin进行解密,将解密后的文件命名为key-expansion.bin,同样解密之前将文件下载到桌面上备用,解密操作命令如下:

注:-n为指定生产文件的字节长度,实际上包含了6种信息后面会讲到。

操作结果如下:

在得到key-expansion.bin文件后,我们复制到kali中用hexdump来读取

通过上面的步骤我们就利用主密码生成了6种信息,分别是

我们发现将这里的字节数加起来刚好与key-expansion.bin文件的字节数136Byte相同,至此我们就得到了对称加密时所使用的的密钥,即客户端到服务器的对称密钥

第七步,至此我们已经可以用它来解密客户端到服务器的应用数据内容。在正式开始解密前,我们先参照第三步(导出client hello的二进制文件的方法)将客户端到服务端的应用层数据提取成二进制文件,步骤如下:

回到wireshark抓包软件中,使用过滤公式ip.dst==192.168.100.4,找出客户端发送给服务端的数据包,图中第24个数据包为要解密的内容,

将Encrypted Application Data导出为分组字节流——client_req.bin

得到client_req.bin待解密的二进制文件后,通过openssl来对该文件进行解密,解密之前先来看一下解密的所有命令:

其中,enc-aes-256-cbc前面我们已经知道了他是本次通信所使用的秘钥套件,具体可以查看第16个包的内容里的Cipher Suite字段中的值:

$c+s_key为客户端到服务器传送消息的密钥即key-expansion的值:

$iv_value是客户端到服务器方向的上一个消息,也就是第20个包中的

最后16 Byte的值即为iv值 (客户端Client→服务器Server)即下图所示的值:ed605d761378241c7add3c921022b268

执行完openssl命令后的结果为:

解密成功!

既然手动能解出来,那下一步就是自动化实现了,这也不难,openssl提供有C和Python开发库,复杂的密码算法不用我们来实现,调用API解密函数即可。

猜你喜欢

转载自blog.csdn.net/qq_48609816/article/details/125923010