文章总结: 文章讲述了一个短信内容篡改漏洞的发现过程。作者在测试系统的更改密码功能时,发现可以通过修改用户名参数来控制短信内容。虽然最初只能影响自己,但通过Fuzzing发现可以添加smsPhone参数向任意手机号发送可控内容的短信。这种漏洞在金融单位被视为高危,文章还提到了其他可能导致短信内容可控的情况。
综合评分: 87
文章分类: 漏洞分析,WEB安全,渗透测试,实战经验,安全测试
一次小问题引起的高危短信漏洞
原创
进击的HACK
进击的HACK
2025年12月11日 07:50
江苏
声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途给予盈利等目的,否则后果自行承担!如有侵权烦请告知,我会立即删除并致歉。谢谢!
文章有疑问的,可以公众号发消息问我,或者留言。我每天都会看的。
字数 889,阅读大约需 5 分钟
前言
在短信功能的安全测试中,不单单可以测试短信轰炸、验证码回显,有时候还会出现可以控制发送短信内容的情况。
比如,我前几天遇到的因为后端校验不规范,导致短信内容可“篡改”的情况。
测试过程
在登录系统后的个人中心,有一处更改密码的功能点。
1d53eb5274f4feccc543e97bd4887c78.png
测试短信发送接口,传入参数
{"type":"B"}
然后我的手机接受到了短信
短信验证码:xxxxxx,验证码五分钟内有效。尊敬的aaaa您好,……
这个aaaa引起了我的注意,因为我传入的参数并没有aaaa,其是我的用户名。那么是不是修改用户名就能实现短信内容的篡改了呢?
在系统前端,修改个人信息页面,用户名是不可修改的选项,但通过编辑个性签名抓包,将HTTP请求报文中添加username选项,即可更改。这属于是API批量分配,或者后端参数接受过多的问题。本身没什么危害,只能算是一个小问题。
但在这个短信发送里就成了问题。
用户名修改为
用户,您可能遭受攻击,为防止您的财产损失,请访问http://短链接,获取详细信息。\n
我重新发送短信,结果
短信验证码:xxxxxx,验证码五分钟内有效。尊敬的aaaa您好,……
还是没变。我又试了一次,情况一样。简单思考了一下,我发送短信的传参中没有用户名,很显然后端是从Cookie中的JSESSIONID拿到对应的session,从中获取的用户名,该session中对应的用户名并未更新。
那么,退出,重新登录,再次发送验证码即可。
收到的短信就成了
短信验证码:xxxxxx,验证码五分钟内有效。尊敬的用户,您可能遭受攻击,为防止您的财产损失,请访问http://短链接,获取详细信息。
您好,……
但这样发送短信,重启了只能是self-类型的漏洞,仅对自己有效有什么用处?低危都不一定认。除非是可以发送给任意手机号。
假设该API存在隐藏参数,就需要去Fuzzing这个参数是什么。这就要看运气了,不过我运气比较好,不然也不会有这篇文章了。
在登录页面,还有一处忘记密码,该接口不需要用户登录,其API和登录后的API相同,只是参数的区别
登录前
{"type":"A","smsPhone":"手机号"}
登录后
{"type":"B"}
简单对比,修改参数为
{"type":"B","smsPhone":"手机号"}
成功像指定的手机号发送验证码,并且短信内容可操控。
总结
正常来说,按照CVSS 4.0,普通用户权限 + 普通欺诈最多给个中危。但因为测试的公司是个金融单位,对短信类漏洞也比较看重,加上也有多次合作,给了个高危。
短信内容可控还有其他的情况,比如有的API发送短信的内容是从HTTP请求报文中获取的,比如手机号参数、模版参数等。
还有一种情况就是API或者JS文件中泄露了短信平台的密钥,通过短信平台的SDK可以给任意用户发送任意短信,而来源都属于相关公司。
欢迎加入知识星球,星球内容主要有:
1、公众号文章备份、工具分享。
2、常见问题的答疑、解决方案汇总在知识星球,作为便于搜索的知识库。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:进击的HACK 进击的HACK《一次小问题引起的高危短信漏洞》