某次内部渗透测试的时候遇到登录处无图形验证码、频次等限制机制,这种是需要整改的,但是如果没挖到有效的漏洞可能就会被开发小哥哥挑战,让人整改也就没底气,遂进一步利用了下。
业务系统在开发测试阶段基本上都会使用一些常用的测试数据,用户手机号也不列外,基本上不大会使用真实手机号,而是一些简单的测试手机号来进行调试。
手机号是由11位存数字组成,前三位是网络识别号,中间四位是地区编码,最后四位是用户号码。
编写脚本生产特殊手机号字典
a = ['11111111', '00000000','22222222','33333333','44444444','55555555','66666666','77777777','88888888','99999999','12345678']
b = ['0000','1111','2222','3333','4444','5555','6666','7777','8888','9999']
c = ['0000','1111','2222','3333','4444','5555','6666','7777','8888','9999']
d1 = ['134','135','136','137','138','139','147','150','151','152','157','158','159','178','182','183','184','187','188']
d2 = ['130','131','132','145','155','156','185','186','176','175']
d3 = ['133','149','153','180','181','189','177']
phone = list()
for i in d1:
for n in a:
_ = '{}{}'.format(i, n)
phone.append(_)
for i in d2:
for n in a:
_ = '{}{}'.format(i, n)
for i in d3:
for n in a:
_ = '{}{}'.format(i, n)
for i in d1:
for n in b:
for m in c:
_ = '{}{}{}'.format(i, n, m)
phone.append(_)
for i in d2:
for n in b:
for m in c:
_ = '{}{}{}'.format(i, n, m)
phone.append(_)
for i in d3:
for n in b:
for m in c:
_ = '{}{}{}'.format(i, n, m)
phone.append(_)
with open('/Users/w2n1ck/Desktop/info/phone.txt','a') as f:
for i in phone:
f.write(str(i) + '\n')
代码比较简单,看下就懂了,情况不全,可自行添加Payload。
生成手机号如下
登录界面如下
很奇葩的一点是由于之前存在爆破,故整改时小哥哥把“密码登录”流程去掉了,但是接口验证还能使用,只不过无法登录了。但是可以利用这个验证接口判断手机号是否存在
成功爆破出存在的手机号。
使用短信验证码登录,由于没有做验证码失效及防爆破机制,导致可爆破短信验证码。
成功爆破出短验证码,登录系统。
编写报告,又可以高高兴兴、理直气壮的找小哥哥谈理想了。
公众号回复:phone,获取特殊手机号字典