一次有趣的账户接管漏洞挖掘

VSole2021-09-18 09:09:21

这是一枚弱加密配合IDOR利用,从而导致完全接管他人帐户的漏洞。

为了方便称呼,以后咱们就统一叫白帽子小哥为“小白”好了。

最近小白同学经常读到一些帐户接管漏洞的文章,他们通常是利用“X-Forwarded-Host”头来窃取用户Token从而进行账户接管,于是乎小白也想着动手尝试尝试,他在某个漏洞赏金平台中接受了一项赏金任务,并尝试寻找帐户接管漏洞。当然,他成功了!

漏洞存在于“密码重置”功能,通过该功能可以完全接管任意帐户,且无需用户进行任何交互。

第1步:

用户通过"example.com/php/login_or_password_forget",在输入用户个人ID和姓名后,开始请求重置密码;

第2步:

他们的用户ID和姓名得到验证后,将生成一个“state”参数,像下面这样:

STATE=eJxdkN1OwzAMhd8lDzA1XffT9GpMDE2gdmKTuIxM4paILilJJhBo747DfjRxlfhzYp9zGpHPBduaryiXzqN8wdeVhz1%2BOv8utxEiMsHFTxATwcJfWYEoEpgKppxtTZfIOJGSSG%2FQRmkGVgXBC8H4ZDYq8hHnfMSnZaL0r3cKekwFTUUrH%2B7SnXT0YLsDdP9aRxo1E6y96hrAR4ueVY3Iy1v1i81abk7Ny8loIWkjKQcLe1bVNDrPBHuDIHuEYGwnyUf0oCKrXkWWhFPfo3KdNd%2Bob6k0FiOt34cLJTvy4wD9FZANCVp7DCFtO4vfPS%2Fq7WK5Wze13DWP93WyOM4FgxJn7VgrBS2fTzVqzDLFVY4cs2Le6vSuTMmESL5P0RT8bHrjXWt68j0M8sl1xjZ%2BAyFQSHrlfOdidJbyO%2F4CvKKcYg%3D%3D55840ad4a2f32819aa5da2cf48288290

第3步:

在这一步中,厂商将向用户注册的电子邮箱发送密码重置链接,如下所示:

https://example.com/php/login_or_password_forgotten?k=789c0dc8610a80200c06d0bbec049bc9d26f870921834192a4ffa2bbd7fbf90a029e810c9adeea98a5753287a844e16555b1016150bfafc3cfbaf94eff2450e494a2e640f67ebc89137aade927d25a020ab2535ab4b5c9dc4fd1

第4步:

用户通过点击重置链接后跳转至修改密码界面进行密码更改。

有趣的部分

这个“?k”参数看起来有不是有点眼熟?小白将其粘贴至CyberChef(经常打CTF比赛的一定对这款工具不陌生吧)中,小白惊讶的发现它确实是一个加密+压缩的字符串:


这段字符串首先使用zlib压缩,然后再进行16进制转换。

经过CyberChef解密后的字符串中,小白发现了两个重要变量“profile_id”和“timeStamp”,于是小白立即建立了另一个账号,尝试伪造第二个账户令牌,以期望重置这个账户的密码,伪造的字符串如下:

789c0dc8510a85201005d0bdcc0ac6f25da6eb62427806034992fe457bb7df93b9f0e9dc28c36be923d726c919107ec0aa40ea0c4a69f775f85976ffcb2746891a610693f44ebe171387

但是很遗憾,点击重置链接后,提示该链接不可用。

转折

如果仔细观察,我们会发现原始令牌和伪造的令牌长度是不一致的:

原始令牌和伪造的令牌相差了32个字符,这是一个很大的问题,因为服务器肯定不会接受任意32个字符,但是两个令牌被解密后,却是相同的值,即:

“a:2:{s:9:”timestamp”;i:1614104013;s:10:”profile_id”;s:8:”40884692";}”.

这让小白同学非常沮丧??,于是他开始查看更多关于Zlib压缩的文章,在经历了2小时的各种阅读后,小白同学发现Zlib包含了一个ADLER32校验值,如果你在使用Adler-32_checksum()函数后,将会得到“BC89137A”,并且这个校验值会存在于原始令牌中,在Zlib中,该校验值之后的所有内容都不是压缩流的一部分,因此将会被忽略,这就是为什么两个令牌即使在长度不同,也会产生相同结果的原因!

所以是时候挑战这个32位的字符串了,因为所有与令牌相关的工作一般都会客户端进行,所以小白同学尝试在JS文件中寻找线索。

在查看了几个小时的JS文件后,小白发现了一处“/php/user”的URL,于是他尝试爆破目录,最终小白找到了“https://example.com/php/user/example/”,该URL有一个名为“transctionToken”的字符串,实际上这正是要找的最后32位字符串的内容。

拼接

是时候将字符串进行拼接了,由于每次刷新页面时“Transaction _Token”都会发生变化,于是小白同学写了一个Python脚本来自动化整个过程,于是他成功的生成了“受害者“账户的令牌,并利用重置链接,更改了该用户的密码。

心得

  • 如果有令牌,那么就存在被破解的可能
  • 不要忘记JS文件,因为这些文件往往包含了有关Web的重要信息
  • 试着在一些社区询问技术细节,有时会有你惊喜的结果
  • 相信你的直觉,比别人多做一点!
漏洞漏洞挖掘
本作品采用《CC 协议》,转载必须注明作者和本文链接
src漏洞挖掘浅谈
2023-02-20 11:22:13
信息收集就说到这里,信息收集的主要目的就是扩大可利用面,10000万个资产你可能碰到弱口令,但1个资产你肯定没有弱口令挖掘前篇前边已经讲了信息收集,在测试前为了能高效的挖掘src,就需要有数据进行测试,这个数据就是我们常说的字典,字典怎么来,整理,收集,经验,积累。金额,数量都是可以篡改的地方小结挖掘src漏洞最主要还是挖掘逻辑漏洞,无非就是耐心,细节,多留意数据包的可疑数据,数据包所实现的功能。
首先要上分那么一定是批量刷漏洞,不然不可能上得了分的,然后呢,既然要批量刷漏洞。两种思路:1.审计通用性漏洞2.用大佬已公布的漏洞思路1难度较大,耗时也较长。思路2难度适中,就是需要写脚本或者使用别人已经写好的脚本。这是泛微继与微信企业号合作后,又一个社交化管理平台的落地成果。简单的说,一般比较大的企业都会用这个平台来做一些钉钉或者微信接口对接泛微OA的功能。
关于漏洞的基础知识
2022-07-20 09:44:23
黑客可以通过修改事件完成的顺序来改变应用的行为。所以,进行有效的验证是安全处理文件的重要保证。这种类型的漏洞有可能是编程人员在编写程序时,因为程序的逻辑设计不合理或者错误而造成的程序逻辑漏洞。这种类型的漏洞最典型的是缓冲区溢出漏洞,它也是被黑客利用得最多的一种类型的漏洞
网络安全漏洞(以下简称“漏洞”)作为信息通信网络中在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,随着经济社会信息化、网络化、数字化和智能化程度的加深,对国家网络安全的影响也日益加剧。世界各主要国家和组织为了切实提升国家网络安全防护能力,围绕漏洞的研究、收集和利用,纷纷建立国家级漏洞通报平台或漏洞数据库。日本于2003年开始建设“日本漏洞通报”(JVN)平台;美国于 2005 年开始建设“
细说从0开始挖掘cms-
2022-08-17 16:26:57
确立目标挖洞的第一步首先是确立一个目标,也就是找个cms来挖,这里可以通过github,gitee或者谷歌百度直接去搜cms。或者cnvd查看相应的信息,通过查看相应的信息可以提高我们挖洞的效率,我们从中可以知道该项目已经存在漏洞,我们到时候挖就可以看看相应的地方会不会还存在漏洞或者避免挖到别人挖过的漏洞。本次挖掘漏洞是ofcms,首先先下载一下源码,然后解压丢一边,回到网页来看一下项目文档。
最后对响应的匹配,使用正则识别id命令之后的结果。成功扫描出CVE-2022-1388F5 BIG-IP API Unauthenticated RCE漏洞漏洞的请求也变异无误,最后的响应中也是执行了id命令。案例二:利用Scalpel工具挖掘多个0day漏洞Scalpel工具使用较为灵活,通过对检测目标变异响应的check,可以发现检测目标中未知的安全问题。同时发现某Apache开源项目的CVE漏洞,报告被该团队接受并正在修复,尚未披露。
攻击者可在无需认证的情况下,通过构造特殊的请求,触发反序列化,从而执行任意代码,接管运行ForgeRock AM的服务器。本文从漏洞挖掘的角度分析其中的技术细节,也将公开一些其他的反序列化点。
对于公益SRC来说,想要冲榜就不能在一个站上浪费大量时间,公益SRC对洞的质量要求不高,所以只要 花时间,还是可以上榜的。在对某站点进行测试SQL注入的时候,先通过一些方式测试是否可能存在漏洞,然后可以直接sqlmap一把梭,也可以手工测试,然后提交漏洞。任意注册算是低危漏洞,不过也有两分。不管是进行SRC漏洞挖掘,还是做项目进行渗透测试,又或者是打红蓝对抗,一定要做好信息收集。
VSole
网络安全专家