1、前提:在某次安全服务项目中,通过越权漏洞,看到了系统内其他账号的信息。测试过程中,给了两个测试账号,此次越权通过高权限账户进行。于是就有了下面的奇思妙想,最终拿到了某个部门老大的账号。也算是收获不小。告知用户以后,用户修改了初始密码,然而却导致更多的用户沦陷,当然也包括了刚开始沦陷的那个部门老大的账户。
这里用到了在内网渗透测试当中常用的密码喷洒技术,只不过常规的密码喷洒技术,是多个用户名和多个密码,此处一个密码对应多个用户名。登录所需的realmName则根据越权得到的账号信息进行猜测。
2、登录数据包讲解:
下面数据包为正常登陆时的数据包,这里会校验account、password、realmName三个参数,当三个参数的值均匹配的时候,就会登入系统,在服务端的response包里面会返回一个token值。
当account或password参数错误时,服务端的response包返回:账号或密码错误。
当realmName值错误时,服务器端的response包返回,用户不存在
综合上面三个数据包,可以看出登录时服务端校验了account、password、realmName三个参数,三个参数分别是用户名、密码和企业注册域名,企业注册域名以下简称登录域。并且校验顺序中,登录域的参数realmName排在第一位。
3、从泄露的账号信息去寻找规律:
从上述泄露信息中,car001到car005很明显可以从中找到规律。这里已知的账号为:
用户名:shentouceshiaaa
密码:aaaaa
登录域:stcs
用户名:shentouceshibbb
密码:aaaaa
登录域:rmw
从已知账号中可以发现,登录域的命名规则为某个名字的缩写。这里大胆猜测,也可能为单词。所以上述的car001到car005账户的登录域应该为car。尝试构造数据包如下:
响应包中中errmsg值:账号或密码错误。这证实了我们的想法。以此类推,对泄露的信息进行整理,如下图所示(这里截图不是很全,更全的见后面):
爆破成功的数据包:
询问项目经理以后,得到授权尝试登录:
登录成功以后,再次分析以及尝试登录,但是其他账号没有登录成功。登录信息总结如下:
得到授权的时候,项目经理表示这是对方测试部门的老大的账户,好家伙。直捣黄龙呀,这是。
4、 总结:整个过程中,最重要的环节是数据包的分析以及登录域的猜测。漏洞挖掘跟渗透测试还是息息相关的,一些看似高深的技术在被吃透以后,可以灵活运用在日常漏洞挖掘过程中,当然最重要的就是要细心收集信息、多观察以及对收集到的信息可以灵活运用。
5、 扩展:后续客户修改了密码,但是修改密码的方式有点神奇。统一修改所有用户的时候,将测试账号和内部使用的账号一律修改为统一密码。此时如果测试账号的密码泄露,则系统内所有已知的用户均沦陷。用户修改密码的时候往往只会关注密码本身的强度是否符合要求,却忘记了密码管理的策略问题。
告知用户以后,用户做了设定。若当前帐户密码为设置的初始密码,则必须修改为符合要求的密码。后续再改为初始密码,再次登录是仍会要求更改。
我们如果跳出这次渗透测试以后来看,发现企业的密码管理策略问题还是蛮大的。至少这次遇到的企业客户密码管理策略很不正确。这种不正确的密码策略,导致某账号沦陷以后,其他大部分账号也会沦陷。
在内网渗透中,横向的时候,往往就是通过拿到一组账号密码,对内网设备进行测试,从而获取很多机器的权限或者服务的权限。
在密码被获取以后修改密码应该注意以下事项:
1)给外部测试的账号和内部正常的账号分开设置。
2)内部设置了统一的账号以后,让员工在最快时间内登录并重新设置新的符合要求的密码,无论后续修改多少次,只要其中有一次密码跟初始密码相同,登录后必须强制要求更改密码。