avatar

某医院预约系统分析

一、为什么会有这次分析

马上要到开学日期了,学校要求所有人去医院🏥做核酸检测,而且要七天内的检测…… 虽然很烦,但是不做也不大行。

更有意思的事儿是当我打开医院的预约系统:

WechatIMG550

全部号满,猝🤦‍♂️🤦‍♂️🤦‍♂️🤦‍♂️

二、系统分析

既然这样,为了不半夜抢号,好好研究了一下这个预约系统。

在浏览过程中,我发现只有核酸检测的是可预约未来三天:

IMG_3413

但是,其他的科室都是可以预约未来14天。

WechatIMG552

于是,核酸检测很可能只是临时隐藏掉了其他天数的预约页面,也就是说,如果能将隐藏的页面恢复出来,那么就很有可能可以在预约还没有开放的时候进行预约操作。

三、抓包分析

在以上分析的基础上,开始使用Charles进行抓包分析。

在手机上配置好代理,电脑上允许手机的链接就可以开始抓包了

WechatIMG554

不出意外,服务器的返回结果的确是包含未来可预约天数的内容:

Screen Shot 2020-08-30 at 23.06.08

进一步的,预约页面的Http请求内容中包含一个字段rq

Screen Shot 2020-08-30 at 23.08.04

这个rq的内容是20200831,是日期的格式,如果我们想预约9月8日的号,只需要将20200831修改为20200908

理论上就可以成功到达一个并没有显示的页面。

四、修改测试

这里我们需要给这个地址加一个断点,这样可以在手机访问这个地址时自动截获内容,便于修改

Screen Shot 2020-08-30 at 23.11.13

这样,用手机重新访问这个地址,同时在电脑上修改这个日期为20200908

image-20200830231323238 image-20200830231342099

可以看到,返回日期中resourceId 已经显示了九月八日的预约信息。

这样,我们只需要确认挂号就可以成功挂上这一日的核酸检测号。

五、修复建议

这一漏洞的出现主要源于对预约程序没有进行日期的合法校验。

比如可以在后端服务器加上日期的检验,当访问非可预约日期时返回错误。

或者可以在请求数据包内容上加上md5或者其他校验码,这样也可以在一定程度上增加分析难度。

文章作者: echo.
文章链接: http://echo.cool/2020/08/30/%E6%9F%90%E5%8C%BB%E9%99%A2%E9%A2%84%E7%BA%A6%E7%B3%BB%E7%BB%9F%E5%88%86%E6%9E%90/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 极客实验室

评论