时间:2021-07-01 10:21:17 帮助过:4人阅读
针对几个著名的IT企业进行测试:
可以抓到明文密码:163邮箱,京东,12306,Acfun
可以抓到前端加密后的密码:百度贴吧,淘宝手机版
不可以抓:QQ邮箱,淘宝电脑版,Bilibili然后是几乎所有的小网站都不带https的,可以随便抓
本博客是带有https小绿锁的哦~(虽然没什么卵用)针对第二种情况,虽然抓不到明文密码,但是可以抓到Cookie,通过Cookie也是可以登录的
第三种情况是连网页都打不开 QAQ
使用HTTPS和在前端用JavaScript加密密码之后可以在一定程度上防止嗅探密码,但是即使你的Cookie是HTTP Only的也是能被嗅探到的。
那么怎样才能防止中间人攻击嗅探到密码?
或者说像BiliBili这样的网站使用的是什么黑科技?
中间人攻击的方法(别用来做坏事哦):
Ubuntu 14.04 在Wifi环境下实施中间人攻击偷取用户名和密码
嗅探的结果是:
针对几个著名的IT企业进行测试:
可以抓到明文密码:163邮箱,京东,12306,Acfun
可以抓到前端加密后的密码:百度贴吧,淘宝手机版
不可以抓:QQ邮箱,淘宝电脑版,Bilibili然后是几乎所有的小网站都不带https的,可以随便抓
本博客是带有https小绿锁的哦~(虽然没什么卵用)针对第二种情况,虽然抓不到明文密码,但是可以抓到Cookie,通过Cookie也是可以登录的
第三种情况是连网页都打不开 QAQ
使用HTTPS和在前端用JavaScript加密密码之后可以在一定程度上防止嗅探密码,但是即使你的Cookie是HTTP Only的也是能被嗅探到的。
那么怎样才能防止中间人攻击嗅探到密码?
或者说像BiliBili这样的网站使用的是什么黑科技?
B站 dologin 表单:
都是纯HTTP请求拦截很轻松
真正防止中间人除了HTTPS不要想别的,已经被无数的人证实过了。js加密纯粹掩耳盗铃一叶障目的事。
act:login
gourl:https://passport.bilibili.com/login/dologin
keeptime:2592000
userid:asfd
pwd:caGoN962DTSWqluWDKtUfj+l5RfDJEVQ7+y963RH/pWHs7xpJh/0mhSv73ma6TF8pxUuNiOqis6YQKGJYK1bTdvZBISbro4Iv2L9S0FWz8MF79I8Pq36uWdSyYaaTFTHOf2pn1UXWufqB/xCc4Jltl3unMNF26M2u7CFI//V2SQ=
vdcode:asdf
关键JS代码
window.$ = require("jquery");
require("jquery-autocomplete");
var popup = require("popup");
var qrcode = require('qrcode');
var mng = require("mng");
var crypt = require("jsencrypt"); <<<<<<<<<
require("jvalidate")($);
var captchaUrl = '/captcha';
https://static-s.bilibili.com/passport/seajs/plugin/jsencrypt.min.js
/**
* 加密passwd,返回加密后的passwd,加密失败返回null
* @param passwd
* @returns {*}
*/
function encryptPassword(passwd) {
if (passwd.length >= 88) {
return passwd;
}
var getKeyUrl = '/login?act=getkey';
mng.doGet(getKeyUrl, null, function (result) {
if (result && result.error) {
popup.alert.show('系统提示', '登录失败,服务端出现异常。');
passwd = null;
} else {
var jscrypt = new crypt.JSEncrypt();
jscrypt.setPublicKey(result.key);
var _encPwd = jscrypt.encrypt(result.hash + passwd);
passwd = _encPwd;
}
});
return passwd;
}
网络协议学得不怎么好,抛砖引玉
这个是 劫持了 TCP/IP 的流量吧, HTTP本来就是明文的,在HTTP协议上是做不了什么的,只能上HTTPS
猜测是第三种情况根本就没有给 HTTP的登录入口,要么HTTPS,要么就没法登录。
丢cookie没什么好办法,防丢密码可以考虑以下方法(该例子适用于数据库中的用户密码也是采用的md5加密):
1- 生成表单时产生一个随机key,这个key也同时保存在服务端(就像图形验证码)
2- 提交表单时先把密码md5,然后与key连接,再次md5,然后发送
3- 服务器端根据用户名取得密码,密码与key连接后md5并与提交的密码对比