首先希望大家能看一下这个文档 漫谈移动银行-马传雷.pdf_免费高速下载

———
这个问题评价就是你可以不懂,但是请保持谦虚。

说一下技术吧,首先奥卡姆剃刀说是手机客户端是非常安全的,即使是在不安全的wifi下。但是请看腾讯安全应急响应中心的这个文章,腾讯安全应急响应中心。那些app只是认为自己是安全的,但是实际上是在裸奔。当然这不是https的问题,这是程序员的问题。

良好的设计不一定被良好的实现。理论上的安全和实际的安全中间还隔着很多编码失误和半铫子专家。
-tombkeeper

然后是这个文章某手机银行被中间人劫持攻击的实际案例,还是上面那个漏洞,只是tsrc没说具体哪些app有漏洞,这个文章明确的说到了就是银行的手机客户端。

关于使用这个漏洞能不能获取明文密码的问题,这个要看情况了,因为上面提到的这个手机银行的客户端是在本地进行二次加密然后https发送的,理论上截获也没办法破解,但是实际上这个app还存在其他的几个漏洞,通过那些漏洞就能获取到密钥,有密码被解密的可能性。其实也不用这个麻烦,里面那个app的密文重放漏洞,根本不用解密就有可能以后随时拿着以前的密文来登陆你的账号。

当然app还存在很多其他的安全问题,请看
招商银行网银定向xss通杀网页、PC端及手机APP(可定向窃取信息钓鱼种马)
民生银行Android手机客户端敏感信息泄露
光大银行Android手机客户端密码明文泄漏

说完客户端,我们来看看网页版网银,地址是招商银行 手机银行网页版

function SubmitControl(sAction, sClientNo) {
	。。。省略一大堆。。。
SubmitControl.prototype.submit = function() {
    var sXmlReq = "";
    if (BSGetElementIgnoreError("TransID_New") != null) {
        this.addFieldByElementId("TransID_New");
    }
    for (var i = 0; i < this.m_fields.length; i++) {
        var sName = (this.m_fields[i])[0];
        var sValue = (this.m_fields[i])[1];
        if ((sName != null) && (sValue != null)) {
            sValue = sValue.replace("%", "%25");
            sValue = sValue.replace("<", "%3C");
            sValue = sValue.replace(">", "%3E");
            sValue = sValue.replace("+", "%2B");
            sXmlReq += "<" + sName + ">" + sValue + "</" + sName + ">";
        }
    }
    var oForm = BSGetElement(this.m_id);
    var oClientNo = BSGetElement("ClientNo");
    var oCommand = BSGetElement("Command");
    var oXmlReq = BSGetElement("XmlReq");
    oForm.action = this.m_action;
    oForm.method = this.m_method;
    oForm.target = this.m_target;
    oCommand.value = this.m_command;
    oClientNo.value = this.m_clientno;
    oXmlReq.value = sXmlReq;
    oForm.submit();
}

这里很明显的就能看到是没有任何本地加密的,只是手动的进行了一下encode,抓包显示也是这样的。注意最后面的111111,那个就是密码。

这个时候问题就来了,通过https直接发送明文密码其实无可厚非,因为假设https是安全的情况下,黑客也是无法获取到你的明文密码的。如果https是不安全的,密码进行加密也没用,黑客还可以获取你的cookies,能给你植入js呢。

至于 @redrain root 具体使用的是什么技术,我也不知道,可能是sslstrip(利用sslstrip和ettercap突破ssl嗅探密码),这个还是希望各位大神指教。

但是还是简单介绍一下sslstrip
直接去攻击https协议找到漏洞然后拿到数据?貌似有点不大可能(虽然出了Heartbleed_百度百科陈皓:由苹果的低级Bug想到的),但是我们能不能绕过https,让你去使用http呢?

用户HTTP=>hacker的代理=>HTTPS网站

图片来自于WiFi流量劫持—— 截获支付宝账号 这个博客也写的很好,还说到了几种别的攻击方法。

当服务器要求重定向到https网站,那么这个应答就不返回给用户了,而是黑客模拟用户去访问https资源,然后把数据放回给用户,这样,在用户看来,他访问的就是个https的站点,但数据返回都是明文传输的,以此来达到截获明文信息的目的。简单的说就是让你的https变成了http。这时候给你植入一个js或者替换一下密码框,so easy。

—————
补充:
还有几个问题希望能思考一下,
1 你电脑上的证书都是可信的么?各种客户端没有给你安装证书么?最近听说微软账号被劫持是怎么回事?出现证书错误是怎么回事?

2 有一些其他渠道的窃取你的账号密码的想到过么,比如电脑端的木马病毒(这个相当多),dns问题,验证码的暴力破解,你的账号密码或者密保邮箱被社工,安卓的webview挂马漏洞,ios的safair远程代码执行,各种root和越狱,混乱的app市场和山寨rom,软件。

3有些东西真的适合给你说出来么?听说前端时间有黑客能在同网段内远程root你的手机呢,还听说GeekPwn第一天就有一劫持https的0day呢。

— 完 —

本文作者:virusdefender

【知乎日报】
你都看到这啦,快来点我嘛 Σ(▼□▼メ)

此问题还有 68 个回答,查看全部。

分享到