前言
根据上述漏洞通报,对我们各产品的短信验证码限流逻辑排查,存在几个问题,总结如下:
一、未做限流
二、限流逻辑在并发情况下存在漏洞
三、限流逻辑不完备
问题具体描述
一、未做限流
存在大量接口未做限制,整改方案略。
二、限流逻辑在并发情况下存在漏洞
示例一
由于13,16行不是原子操作,存在并发情况下,count始终为0,形成短信轰炸效果。
整改建议
将读、写逻辑,替换为redis.incr()操作
三、限流逻辑不完备
现有各项目的限制,基本上只限制了重复"手机号"的发送,对于请求方的IP,未做限制。此漏洞会导致接口的盗刷。
建议将IP的请求数量也设为限制条件。
测试代码
import requests
import threading
url = "http://192.168.5.56:4224/appoint/apply/checkAndSendVerifyCode?activityID=1721446289622528000&userPhone="
def sendCode(i):
if(i%2==0):
phone = "17685837371"
else:
phone = "13148085727"
r = requests.get(url+phone)
print(r.json())
def main():
# 多线程发送
threads = []
for i in range(60):
t = threading.Thread(target=sendCode, args=(i,))
threads.append(t)
t.start()
for t in threads:
t.join() # 等待所有线程完成
if __name__ == "__main__":
main()