安全测试的一些记录__基于fiddler工具

发布时间 2023-05-23 21:52:57作者: 娜娜99

工作中做了部分安全测试,这里记录执行安全测试时,遇到和学习到的一些内容,其中在安全测试时,也涉及到了fiddler工具的使用:

1、 公司的安全规范中,规定平台涉及到文件上传时,后台接口需要对文件大小、文件格式、文件名长度做接口限制。当然这种限制是肯定的,因为前端虽然会做这些限制,来防止用户上传一些大文件、非正确格式的文件。但其实接口也需要做限制,来防止用户通过接口的方式传一些不合规的文件。

但我测试的时候发现,接口是没有做限制的,但是图片上传到阿里云时,抓包发现,上传接口中的图片是做了加密的。因此个人认为,既然上传的图片已做了加密,那接口其实不做文件的限制也是可以的,因为假如恶意用户或其他攻击者想要上传一些恶意文件的时,首先需要知道图片的加密方式,需要能够获取到加密的密钥,才能对恶意文件加密后发送给服务端。用户无法得到加密方式,就没办法模拟上传文件

但和网络安全部的人去确认了一下,给出的回答是:这种图片加密是前端做的,攻击者只需要察看前端代码就可以看到加密方式,

于是我去前端代码中察看了一下,确实能看到:

打开f12, 点击soureces,里面就是前端的代码,然后可以搜索关键词:encrypt 就能搜索到文件加密的代码,如下图。可以看到用的是aes加密、ecb模式、pkcs7补全方式

然后就可以自己写python脚本来进行图片加密,加密的时候需要有密钥,一般如果实现简单的话,前端加密代码中会固定写死密钥。不过下面截图可以看到密钥是没有写死的。其实是通过后端获取的。所以需要先调接口获取密钥,然后通过密钥和python脚本将图片进行加密。加密后数据,模拟上传接口来上传图片即可。(理论就是这样, 后面我会把python脚本实现一下,看看能不能上传成功

2、 测敏感信息时,要求接口在传敏感信息时,对于一级敏感信息(密码、指纹信息、人脸信息等)接口中需要加密传输。如下图可以看到不是明文密码

 

对于二级敏感信息(身份证、手机号、地址、邮箱等)通过fiddler 抓包发现,这些信息是明文传输的。咨询了网络安全部门的人,说是只要保证二级敏感信息是https传输就可以,可以不对这种信息再单独加密

然后就很不理解,无论是不是https传输,但最终我还是通过抓包工具获取到了这些敏感信息啊。那就是没有安全性呀。很是疑惑为什么只要是https 传输就可以呢,

然后查询https的原理和fiddler截取https请求原理,大概明白了,https协议下传输的数据本身是加密传输的,我在fiddler 上虽然抓取到了请求可以看到是明文的,但是这是因为fiddler 抓取https 请求后对数据进行了解密然后展示出来的。而fiddler能够解密https请求的数据,是因为fiddler有伪造证书的能力。

这里一篇将https的文章,讲的很不错:https://zhuanlan.zhihu.com/p/43789231

大致的原理就是:首先https传输的原理,https传输重点的一点就是信息加密,加密需要密钥,而https采用的是非对称加密+对称加密相结合的方式:即服务器有公钥a 和私钥a, 通过公钥a加密的数据只能通过私钥a进行解密。服务器先把公钥a发给客户端—>客户端收到公钥a保存下来,以后给服务器发数据就用这个公钥a进行加密—>客户端随机生成一串数字X并通过公钥a进行加密并传给服务器—> 服务器接收到数据后通过私钥a解密出来这一串数据X并保存下来,以后服务器和客户端互发数据时就通过这串随机数进行加密和解密。按照这种方式,就可以保证密钥安全的送达到双方手里,保证了后续的加密通信。

但上述有个问题,假如服务端给客户端发公钥a 时,中间被黑客给截获了数据,然后黑客把公钥a 保存下来,然后黑客伪装成服务器发给客户端一个公钥b(此公钥b 对应的私钥b黑客肯定是知道的 ), 客户端收到公钥b后保存下来,生成一个随机数X并通过公钥b加密后发给服务器, 此时黑客再次截获数据,并通过私钥b 将加密了的随机数X解密出来保存下来,然后用公钥a对此随机数X加密后发给服务器。服务器通过私钥a解密出来随机数X保存下来。那之后客户端和服务器后面的通信,就通过随机数X进行加密和解密,但因为中间的攻击者也同样保存了随机数X,所以,截获的通信信息也就可以解密出来。

以上的问题,主要是因为,中间的攻击者截获了公钥,然后又伪装成服务器给客户端发了一个错误的公钥,那客户端接收到发来的含有公钥a 的数据,能证明就是服务器发过来的,那就可以解决此问题,而用的技术就是数字签名证书。(有这个证书,就能证明你就是你),就像身份证一样。浏览器(或客户端)会验证服务端发过来的证书与域名相吻合,避免冒充,这就是身份认证

Fiddler 有伪造证书的能力(服务器发回响应,Fiddler 获取到服务器的 CA 证书, 用根证书公钥进行解密, 验证服务器数据签名, 获取到服务器 CA 证书公钥。然后 Fiddler 伪造自己的 CA 证书, 冒充服务器证书传递给客户端浏览器),具体可以参考https://zhuanlan.zhihu.com/p/25591288  ;https://www.zhihu.com/question/395294859

 

最后又专门用wireshark抓包验证一下https请求中的数据 是否真的是加密了的,下方截图中,encrypted application data 后面的数据可以看到是加密的,application data protocol 后面写的是http-over-tls,指的是截获的此请求是https请求(https的全称就是http-over-tls)

 

然后再看一下wireshark 截获的http 请求,如下图,可以看到请求是明文传输的,并没有加密

 (不过,好像wireshark 也可以对https的数据进行解密,后续有需要的话,再查资料学习把)