如何判断 webapp 是否以明文形式传输我的密码?

信息安全 验证 密码 密码管理 饼干
2021-08-24 13:43:11

我正在尝试查看 webapp 是否以某种明文形式传输密码。问题是网络应用程序没有使用 https!这就是为什么我想知道我的密码是以明文形式发送的。

我在浏览器中发现了一个 cookie,其中包含以下内容:

usr=waytodoor&mdp=3C5115ECB18725EBFFF4BB11F9D17798358477D6E11E0188D54BAB80C86D38D41A16F76D8D0B253445774484FB1AE22E9FC13E257CFB9E7B7466F1BA5417EA004FCBB4E7965CA571819146A148EED15A2AEA6E47D9DF338B534264FBC99A57952212629BA79BB34BE9C8C60B73F1F681EE872C64

据我所知,usr 是我的用户名,mdp(法语中的“mot de passe”表示密码)。

那么,cookie 的 mdp 字段是我的密码(如果是这种情况,我怎么能“解密”它?),还是只是某种令牌?密码长度为 7 个字符。

我试图将它从十六进制或基数 64 转换,但没有运气。

编辑:包含未使用 HTTPS 的声明。

EDIT2:网站是学生的网站。密码由学校在年初提供。我们无法改变它们。

我怀疑有些学生正在 ARP'ing 学校网络。我尝试尽快断开与网站的连接以使 cookie 无效,但我想知道他们是否可以从 cookie 中找到密码。

4个回答

询问您的密码是否被加密有两个原因:

  1. 您担心网站的安全性。
  2. 您担心密码的安全性。

关于站点安全,没有 HTTPS,实际上就没有。您应该将与该站点的每次通信都视为公开的,并假设攻击者可以假装是您。请小心使用该网站。

关于密码的安全性,没有 SSL,这并不重要。有人可以窃取您的会话 cookie 并在不知道您的密码的情况下冒充您。因此,请务必不要在其他网站上重复使用密码(或曾经重复使用任何密码),以防止本网站上的密码泄露危及您在其他网站上的帐户。

编辑为了回应您对ARP 欺骗的担忧,如果没有 SSL,他们可能会建立MiTM一旦他们这样做了,他们就可以看到 cookie。如果没有对网站进行更深入的检查,我无法告诉您 cookie 是否会泄露您的密码。也许它是安全加密的,也许不是。也就是说,一旦他们拥有 MiTM,他们就可以更改发送到您浏览器的 JavaScript。这将允许他们更改线路上发送的内容,从而获取您的密码。而且,虽然没有进一步检查我无法确定,但在我看来,该 cookie 就像通过哈希漏洞. 如果是这种情况,那么他们就没有必要窃取您的密码,因为 cookie 的值与密码一样好。所有这一切归结为,没有 SSL,就没有安全性。

你得到的是 232 个十六进制数字,或 116 个字节的数据。它不是任何正常编码的纯文本字符串。它可能是您密码的哈希值,可能是您的加密密码,也可能只是某种容易可逆的混淆。或者它可能与您的密码完全不同,例如会话标识符。它可以是任何东西。在不知道您的密码或 webapp 使用的代码的情况下,很难分辨。

但是,如果您担心密码在网络上时的安全性,那真的没关系。重要的是您使用 HTTPS。* 如果您使用 HTTPS,那么您和服务器之间发送的所有内容都将被加密。如果您不这样做,则无论您尝试在客户端上进行何种加密,都无法保证中间人无法窃取您的密码。

通常,向服务器发送密码时使用的唯一加密是 HTTPS 提供的加密。

也就是说,将密码保存在 cookie 中(无论是否为明文、加密、散列或只是混淆)是一个坏主意。任何有权访问您计算机的人都可以窃取 cookie,如果 cookie 不是 HTTP-only,则也可以使用 XSS 漏洞来窃取它。

*鉴于它是良好的 HTTPS - 证书有效,您使用现代版本的 TLS 等。同样的警告始终适用。

当您想窃听 Web 浏览器和服务器之间的通信时,您通常可以使用 Web 浏览器的开发工具(通常的热键:F12)来做到这一点。大多数浏览器都会有某种网络选项卡,其中当前网站和互联网之间的所有网络通信都以明文形式记录。

当您在那里的任何地方找到您的明文密码并且它不是 https 连接时,这是一个不好的迹象(当它https 时,浏览器将向您显示未加密的数据,即使它在在线发送时是加密的)。

但即使你在那里找到一个加密/散列密码,你也不知道它是否是好的密码学。您通常只能通过使用密码分析技术来判断,直到您弄清楚加密是如何工作的,或者您是否对网站上的 javascript 代码进行逆向工程以了解它是如何工作的。

这就是您通常调查的方式。如果它是您密码的哈希,那么您可以使用哈希函数测试您的密码并比较输出。这个特定的(假设的)哈希字符串有 232 个十六进制数字,等于 928 位。这是用于 SHA-1 加密的 RSA-280 数字的确切大小(以及许多其他 RSA 数字,因此如果不尝试该功能就无法确定)。

https://en.wikipedia.org/wiki/RSA_numbers#RSA-280

RSA-280 有 280 个十进制数字(928 位),到目前为止还没有被分解。

您可以打开网页源代码,尝试找到与 SHA-1 相关的模块(在本例中),然后找到其中的哈希函数,然后使用浏览器开发工具或 node.js 之类的执行它这:

console.log(hashingFunction('yourpass'))

然后就看输出是不是一样的232个字符。请注意,找到散列函数可能很棘手,它可能会被混淆,在页面加载很久后下载等等,显然你需要一些 JavaScript 知识。