首页
社区
课程
招聘
[原创]Web登录安全隐患分析和POC
发表于: 2012-9-28 22:00 29681

[原创]Web登录安全隐患分析和POC

2012-9-28 22:00
29681

这篇贴主要是分析了亚马逊,支付宝等登陆设计。指出登陆信息被截获并且用于重放攻击可能性,指出登陆设计存在改进空间。附近中是POC(Proof of Concept)程序,在浏览器内部抓取POST登陆信息,保存在c:\hijackhttp.txt中,亚马逊,支付宝的登陆信息可以明文重现。

正文

OWASP对web登录设计给出的建议包括密码要具有一定的长度和复杂度,正确的登录提示,始终使用TLS加密通道传输密码防止密码被截获等。参考:d17K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2G2N6$3q4K6M7q4)9J5k6h3!0J5k6#2)9J5c8X3W2F1k6r3g2^5i4K6u0W2M7r3S2H3i4K6u0r3b7i4g2@1K9r3g2F1N6r3W2U0j5i4c8A6L8$3&6Q4y4h3k6o6K9r3g2S2N6q4)9#2k6W2y4Z5k6h3g2@1
但是仅仅是加密通道传输登陆信息仿佛还是不够,因为即使是通过TLS加密的传输的登录信息也可能被截获。

登陆case分析:

首选看几个站点的登陆设计。
1.        亚马逊
亚马逊将用户登陆信息用户名和密码使用https传输。这里从截获的数据中可以清楚的看到登录email和相应的password。


2.        看雪论坛http://bbs.pediy.com/login.php?do=login
看雪论坛使用http明文传输登录信息,password做了一次MD5运算。由于MD5是不可逆的,理论上无法推出password。但对于黑客来说其实无需知道password具体是多少,用password的MD5值构造一个数据包模拟发送给服务器,同样可以收到有效的cookie信息成功登陆。这就是所谓的重放攻击。下图是登陆数据包,202cb962ac59075b964b07152d234b70是密码123的MD5值。


3.        淘宝/支付宝
淘宝,支付宝的非控件登陆和亚马逊的相同。直接将用户名和密码等登陆信息使用https传输。使用控件登陆时password进行了加密处理,但是经过分析得知控件加密时密钥是固定,只要password相同,加密后的密文永远不变。这意味着即使password被加密了,也不能抵御重放攻击。经过试验利用抓取的password密文构造数据包模拟登陆,确实可以登陆成功。



以上web登陆设计主要问题在于不能抵御重放攻击,一旦登陆信息被截取就可以被利用来登陆。像支付宝一控件登陆一样的,密钥永远不变的加密没任何意义。支付宝登陆密码加密,亚马逊登陆密码明文,他们的安全性相同,攻击利用难度相似。
然而遗憾的是登陆数据包是可以被截获的,即便使用了https加密通道。

截获数据包的方法

方法一:架设代理服务器比如Burp Proxy,然后设置浏览器使用代理服务器。这样浏览器所有的http以及https数据都会被Burp Proxy代理截获,并且可以查看https解密后的明文数据。当https数据被截获后,浏览器会验证主机的证书,证书验证不通过时浏览器会发出访问安全警告阻止用户继续访问。所以这种方法通常用于http和https数据包分析。Firefox的代理设置:



方法二:注入代码到浏览器进程中,从浏览器内部截取明文登陆数据。Firefox使用函数Pr_write()发送http数据,IE使用函数HttpSendRequest()发送http数据。只有hook相关函数就可以截取到http/https的明文数据。
我以Firefox为例做了实验,可以抓取网站的登陆信息。实验工具在附件中,有兴趣的可以自己测试。
Hook Pr_write。虽然网上有很多hook库,但都不够稳定。微软detours库是最好用最稳定的hook库。Hook Pr_write时不能简单替换前5个字节,因为它前2条指令并不是5个字节。Detours会反编译相关指令然后根据需要替换不通长度字节的指令,稳定性好。
中国大部分电脑上都装有360杀毒,而貌似360对各个代码注入路径都防的很死。进程注入不了,就改注入文件。修改firefox.exe或者相关DLL的PE导入表,从而加载hook的DLL. 附件中setdll.exe是命令行工具可以将指定DLL加入到PE文件导入表中。

改进方法:

一家韩国游戏公司的登陆设计可以用来参考。登陆地址6fbK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6F1K9h3c8Q4x3X3g2F1j5i4k6W2M7W2)9J5k6h3y4G2L8g2)9J5c8X3&6A6k6r3I4G2k6$3W2F1i4K6u0W2L8r3!0Y4K9h3^5`.
他的登陆过程分为两步, 首先从fddK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3&6A6k6q4)9J5k6h3&6S2N6X3g2J5i4K6u0W2j5$3!0E0i4K6u0r3L8r3!0Y4K9h3&6Q4x3V1k6W2P5s2c8Q4x3V1k6C8k6i4W2K6i4K6u0W2L8X3S2F1 获取公钥加密key
然后利用上一步得到的key加密用户名和密码,提交加密后的用户名和密码到741K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3&6A6k6q4)9J5k6h3&6S2N6X3g2J5i4K6u0W2j5$3!0E0i4K6u0r3L8X3W2V1L8r3!0Y4K9h3&6Q4x3X3g2D9L8$3N6A6L8W2!0q4x3#2)9^5x3q4)9^5x3W2!0q4y4#2)9&6y4q4!0n7x3g2!0q4y4W2!0m8c8q4!0m8y4q4!0q4y4g2!0n7c8g2)9&6y4#2!0q4y4g2)9^5z5q4!0n7x3q4!0q4y4#2)9&6b7g2)9^5y4q4!0q4y4#2)9&6z5g2!0n7b7W2!0q4z5g2)9&6z5g2)9^5y4W2!0q4y4q4!0n7c8W2!0m8x3g2!0q4y4W2)9^5x3g2!0m8c8W2!0q4y4W2)9&6z5q4!0m8c8W2!0q4y4g2)9^5b7g2!0m8z5q4!0q4y4W2)9^5x3q4)9^5x3g2!0q4y4g2)9^5c8W2)9&6z5q4!0q4y4g2)9^5b7#2)9&6y4W2!0q4y4#2)9&6b7g2)9^5y4q4!0q4c8W2!0n7b7#2)9^5b7#2!0q4y4q4!0n7z5q4)9^5c8q4!0q4y4g2)9^5c8W2!0m8c8W2!0q4z5g2)9^5y4#2)9^5c8q4!0q4y4W2)9&6y4q4!0n7c8g2!0q4x3#2)9^5x3q4)9^5x3R3`.`.


[培训]科锐逆向工程师培训第53期2025年7月8日开班!

上传的附件:
收藏
免费 6
支持
分享
最新回复 (30)
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不得不顶!!楼主的思路值得借鉴!
2012-9-28 22:49
0
雪    币: 3503
活跃值: (276)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
图挂了? 字节补丁
2012-9-28 23:03
0
雪    币: 389
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
留名mark
2012-9-29 08:31
0
雪    币: 194
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
技术、思维、文笔都牛X
2012-9-29 09:01
0
雪    币: 266
活跃值: (279)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
没想到这么不安全
2012-9-29 09:05
0
雪    币: 72
活跃值: (60)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
7
https解密是怎么回事?能解密?没搞懂。
2012-9-29 09:58
0
雪    币: 72
活跃值: (60)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
8
Burp Proxy 抓取的包属于应用层级的包,是在本机做实验,可能会抓取到明文包,如果是在局域网路,混淆模式抓包,https应该是不可能明文,也不可能被解密的。如果验证可以本机wireshark抓包,才能确定是不是明文。
2012-9-29 10:00
0
雪    币: 1753
活跃值: (1060)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
9
图片怎么全部挂了·!?
2012-9-29 12:40
0
雪    币: 20
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
楼主说的方法好像没说HTTPS解密吧,只是说代码重放吧,没必要去解密,网站都是通过一个端口与服务器连接的,只要保正发送到服务器的验证信息是对的,那么,不管你在本机上是否使用了正确的帐号密码,服务器都会反回正确的信息吧!
     就像通关文碟一样,它产生的过程城门守卫不会去管,不管谁拿到那个通关文碟,只要服务器没确证通关文碟与持碟人是否是对应的,那么,守卫对于持有通关文碟的人就只能放行,而且守卫还不会有任何感觉意外,只会把他当成一个正常的过客进行处理。
     不过参考的解决方法很有趣,呵。。。分两次,第一次以不同的机器来分配不同的密钥,第二次才验证,而且第一次的密钥不接收还不行,不接收服务器就真接PASS了~
2012-9-29 12:43
0
雪    币: 8833
活跃值: (2419)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
11
其实只要能运行,有权限注入能hook,什么RSA动态key也没用,直接接受时本地给替换丫pubkey,然后发送时解密开然后再用官方的动态key加密发就好了~浮云啊~
只要能运行,能注入ok,能hook,别说web登录了,就客户端登录也一样,唉~
2012-9-29 13:09
0
雪    币: 324
活跃值: (113)
能力值: ( LV15,RANK:280 )
在线值:
发帖
回帖
粉丝
12
在网络上截获的https数据本身无法解密,比如wireshark抓https,密文,无解!
网络代理原理不一样,浏览器显示跟代理协商密钥,然后把数据发送给代理,代理解密数据后,再和真正的服务器协商密钥,最后把浏览器的数据发送给真正服务器。这个过程中代理当然能看到https中的密文数据了,不管代理是在本机还是在网络中。
2012-9-29 14:58
0
雪    币: 324
活跃值: (113)
能力值: ( LV15,RANK:280 )
在线值:
发帖
回帖
粉丝
13
是的,基于username/password的登陆认证没有完美安全的解决方案。所以OWASP说的是需要Multiple-Factors. 我这贴是想说登陆数据能抓取,能被利用,警钟长鸣
2012-9-29 15:03
0
雪    币: 73
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
又长见识了~~
2012-9-29 19:23
0
雪    币: 952
活跃值: (2151)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
https重放不了吧?这里指的是要注入dll到ie进程中抓取数据, 我觉得没意义,无论你用什么方法,在内存中总有某一时刻是明文,能被Hook抓取的
2012-9-29 19:39
0
雪    币: 33
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
楼主说的其实是一种密码验证方式,本质是在客户端就使用了md5散列进行密码验证,虽然解决了传输途中的加密,但是这样做的风险在于如果有人知道了密码的md5,那么他不需要破解该md5,直接使用md5散列值即可伪造cookie。针对这样的方式,其实服务器端可做salt,通过salt+md5 password的方式对其进行验证即可
2012-9-30 00:39
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
那楼主你说,有的网页你存他书签就可以登录,地址本身就包含密码,相当于密码,如果可以截取包,只要截取了链接就是可以登录的?不知道是不是这么回事?别告诉我链接也可以加密。
2012-9-30 01:18
0
雪    币: 8833
活跃值: (2419)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
18
md5如果是通过js计算的话,还是可以hook出来明文密码的~
反正用某些人常说的话:能运行能hook了,什么都是爆弱的~
2012-9-30 02:32
0
雪    币: 33
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
并不是谁的机器都是那么容易被hook的!如果真的那样了,那这个世界就太可怕了
2012-9-30 12:04
0
雪    币: 324
活跃值: (113)
能力值: ( LV15,RANK:280 )
在线值:
发帖
回帖
粉丝
20
请大家关注一下重点。不管登陆数据时怎样被截获,代理截获也好,hook截获也吧。
我关心的是现有大部分登陆设计,一但登陆数据被截获就很容易被重放利用。为什么不加大攻击利用难度呢? 安全无绝对,谁都不能保证百分百的安全,只能说是提供攻击难度和成本。很明显case韩国游戏登陆的安全性要高,利用难度更大。
再想想有多少从来没有过中病毒,病毒进入个人电脑的途径多了去,Oday漏洞经常在报,安装不明来源的破解安装包。一但进入电脑,修改注册表实现代理截获,修改普通的exe,dll实现hook很容易。在360的保护中,进程hook不容易,修改PE实现hook还是很容易的。
2012-10-1 11:09
0
雪    币: 324
活跃值: (113)
能力值: ( LV15,RANK:280 )
在线值:
发帖
回帖
粉丝
21
其实MD5+salt是理论上很好的方法,存在的问题就是你所说的某一时刻,明文依旧可以被hook获取。这时候就需要利用安全控件来解决问题了。支付宝安全控件登陆,无法抓取明文。所以MD5+SALT+安全控件是一个方案。
支付宝的问题是不需要抓取他的密码明文,因为他是固定密钥加密,密文密码永远不变,重放可行。
2012-10-1 11:19
0
雪    币: 8833
活跃值: (2419)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
22
支付宝的安全控件一样可以抓去,支付宝安全控件没用VMP保护自己的菊花,随便hook一下啥都知道了~倒是韩国某游戏的web登录安全控件很到位首先上XX保护,然后自身加强VM壳~~
2012-10-1 22:20
0
雪    币: 38
活跃值: (290)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
mark一下……
2012-10-4 04:36
0
雪    币: 46
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
https,重放的话,也是在本地 ,怎么感觉 意义不大。。想测试下,不在同一台机子,不同ip是否能登录成功~
2012-10-7 20:08
0
雪    币: 6
活跃值: (1167)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
问题在于不是动态加密,知道密文就可以回放。。这是致命的问题。
2013-7-23 19:19
0
游客
登录 | 注册 方可回帖
返回