好几天没写博客了,今晚回来趁着给手机充电,总结一下最近一次拿下的 3 个中危漏洞。

先上张图:

以上三个漏洞都来自同一个功能系统,在审计 js 的过程中发现的两个 api 接口存在任意文件下载,以及后续深入测试功能点时发现的水平越权。

任意文件下载 1.0

访问该功能系统,审计 js 代码,发现一处可疑 api 接口:/photoshow.jsp?path=

根据名称,猜测该接口传入某图片路径,用于展示该图片,遂测试传入任意文件路径,尝试读取 /etc/passwd

/pros_ahdx/photoshow.jsp?path=/etc/passwd

成功读取到敏感文件,喜提中危一枚。

任意文件下载 2.0

继续审计 js 代码,又发现一处可疑接口:/filedownload.jsp

根据名称,这应该就是直接下载文件的接口了,尝试传入任意文件路径:/filedownload.jsp?path=/etc/passwd

成功弹出下载窗口,查看下载后的文件,成功获取敏感信息,又提中危一枚。

水平越权

抓完两个任意文件下载之后,接着审计其它功能点。在看到修改密码这项时,就在想是不是可能存在越权漏洞,于是跟进这项功能的实现。

查看 html 代码发现,当提交修改密码的请求时,调用了 tool.saveData() 这个函数,并传入当前对象和一个 api 接口地址。

跟进 tool.saveData() 函数,其内部调用了一次 $.ajax() 来发送请求,注意到发送请求时,data 参数是只携带了待修改用户的身份证号和新密码,并未携带鉴权信息!

于是尝试修改我自己的密码,同时抓包:

可以看到,请求体中包含以下信息:

  • Wid(未知参数)
  • Sfzh(身份证号)
  • Pwd(新密码)
  • Pwd 2(新密码)

修改成功后响应体中含有提示信息。

尝试修改 sfzh 参数,改为另一个人的身份证号(得到授权的情况下),再次发送请求包,发现依然可以成功修改密码。

尝试使用修改后的账号密码登录他人账号,发现密码被成功修改!再提一个中危!(本来想着这能给到高危了吧,结果只给了中危……)