首页 > 数据库 >【学习中】sql注入-数字型注入

【学习中】sql注入-数字型注入

时间:2023-09-22 14:44:06浏览次数:37  
标签:结果 MySQL 数字型 sql table 注入 id schema

随笔里的内容都是个人理解,如果有不对的地方,还望各位大佬多多指正。

一、理论基础

1、什么是数字型注入

数字型注入攻击主要针对应用程序中的数字参数,攻击者通过修改参数值来欺骗应用程序执行非法操作。这类攻击通常发生在应用程序的输入验证不严密的地方,例如在 SQL 查询中直接使用用户输入的数据,而不对输入数据进行过滤或转义。数字型注入攻击可能导致数据泄露、篡改或删除等后果。

2、SQL

union:SQL 的"UNION"操作符用于将两个或多个 SELECT 语句的结果组合成一个结果集。使用 UNION 时,各个 SELECT 语句必须返回相同数量的列,并且这些列的数据类型也必须相同。(这句话很重要)

database()是 MySQL 中的一个系统函数,用于返回当前操作的数据库名。

version()是 MySQL 中的一个系统函数,用于返回 MySQL 服务器的版本信息。

group_concat() 是 MySQL 中的一个聚合函数,它可以将多个行的某个字段值连接成一个字符串。这在需要将具有相同键值的多个记录合并为一个记录时非常有用。

3、SQL注入产生的原理

可控变量

带入数据库查询

变量未存在过滤或过滤不严谨

4、靶场

Pikachu漏洞练习平台

5、工具

burpsuite

 

二、注入思路

1、确认注入点

(1)使用burpsuite抓取请求数据,请求为post,id为可控变量

 (2)id=3 后面多输入一个单引号 '

 (3)提交请求后,发现SQL相关的报错,这里我们可以获得两个信息

①数据库为mysql,但是版本未知

②根据报错信息推测,后台执行的sql可能是这样

select xxx from table_name where id=$id
id传入的value为3',则sql变成了

select xxx from table_name where id=3'
这时的报错是
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near ''' at line 1

 

ps:这里为什么后台sql不会是下面这样呢

select xxx from table_name where id='$id'
id传入的value为3',则sql变成了

select xxx from table_name where id='3''
这时的报错是
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near ''3''' at line 1

 

 

 

(4)id=3 后面加上 and 1=1,然后查看页面返回

 

 

 页面返回正常

 

(5)id=3 后面加上 and 1=2,然后查看页面返回

 

 页面返回id不存在

到这里就说明and后面的sql是可以被执行的,并且这里存在数字型注入漏洞

 

2、确认返回结果的列数

 我理解这里所做的事情是在为下一步做铺垫

这里使用order by 来确认sql执行的结果有几列,判断的逻辑是order by 后面跟上数字,就是按照第几列来排序,如 order by 4 就是按照第4列进行排序,如果第4列不存在,则报错如下

 

 

就这样不停尝试,就可以确认sql执行后的表有几列,这里可以使用二分法来逐步缩小范围。

 

3、页面找返回结果展示的地方

上面确认了后台sql执行后的结果为2列,这时候要考虑如何才能看到这部分数据,或者说怎么才能让这部分数据展示在页面上

 

 姓名和邮箱这两部分内容会根据id变化,所以我们继续测试,想办法把我们需要的数据通过这里展示出来

这里我尝试构造sql

 我们通过union将前后两个sql的查询结果合并了起来。结果都打印了出来,这样我们把1和2的位置确定了,后面就是通过这两个位置我们来展示sql执行的结果

 这里有一个地方需要注意,如果页面不支持显示多个结果,比如这里显示了两个hello和两个email,我们可以将id改成负数或者加上 and 1=2,目的是屏蔽id查询到的结果,让页面只显示我们输入的sql语句的内容。

 

 上面两个结果都是一样,见下图

 基本上这条路通了,应该就可以查到很多信息了。

4、找数据库和版本

 

 

 结合上面的信息我们知道,后台为mysql数据库,版本为8.0.26-0ubuntu0.20.04.2,当前所使用的库名为pikachu

5、找数据表

 mysql中information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式。什么是元数据呢?元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。

所以我们可以通过information_schema库来查找表和字段

TABLES表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。是show tables from schemaname的结果取之此表。

COLUMNS表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns from schemaname.tablename的结果取之此表。

select table_name from information_schema.tables where table_schema='pikachu';

 使用group_concat 将结果变成一个字符串

select group_concat(table_name) from information_schema.tables where table_schema='pikachu';

 所以,请求中sql构造如下

 我们已经获取到了数据表

 

6、找字段名

 找字段和上面的逻辑一样,我们去查询information_schema.columns

这里users表,我们推测应该保存用户密码

所以,sql构造如下

 结果如下:

 

7、获取目标信息

 还是同样的逻辑,我们就可以获取用户以及密码了

获取所有用户

 

获取admin用户的密码

 

 

 8、解密

e10adc3949ba59abbe56e057f20f883e  32位,有可能是md5加密,尝试使用下方网站解密,解密后的结果为123456

https://www.cmd5.com/

标签:结果,MySQL,数字型,sql,table,注入,id,schema
From: https://www.cnblogs.com/ops-blog/p/17720381.html

相关文章

  • php js+laravel+mysql手术麻醉临床信息系统
    医院手麻系统源码 技术架构:phpjs+laravel+mysql vue2elementB/S网页版手术麻醉临床信息系统有着完善的临床业务功能,能够涵盖整个围术期的工作,能够采集、汇总、存储、处理、展现所有的临床诊疗资料。通过该系统的实施,能够规范麻醉科的工作流程,实现麻醉手术过程的信息数字......
  • SQL Server 编程
    SQLServer编程示例查询结果存入变量DECLARE@fserviceuseridVARCHAR(50);SELECT@fserviceuserid=a.fdevicecodeFROMdbo.tdmsdeviceaWHEREa.frowid='1'--结果,2023050001select@fserviceuserid 查询结果拼接并存入变量DECLARE@fserviceuseridVARCHAR(5000......
  • MySQL高级SQL语句之多表连接
    目录MySQL高级SQL语句1.实际操作1.1新建表1.2查看表及内容1.3通配符1.4函数1.4.1数学函数:1.4.2聚合函数:1.4.3字符串函数:1.5语句1.5.1GROUPBYsql语句的执行顺序1.5.2HAVING1.5.3别名1.6查询1.6.1子查询1.6.2EXISTS1.7表连接1.7.1innerjoin内连接1.7.2leftjoi......
  • MySQL中的Statistics等待
    【作者】吴宙旭,携程数据库专家【问题描述】线上我们偶尔会碰到MySQL的状态是statistics.但如果出现大量的statistics等待,会引起MySQL性能急剧下降。官方的文档对这个状态的解释如下:Theserveriscalculatingstatisticstodevelopaqueryexecutionplan.Ifathreadis......
  • nods中mysql时间相差8小时
    前言最近在做自己的一个记账项目,后端nestjs中使用typeorm的mysql。当添加记录时,发现所以时间都相差了8小时。后面查了一下资料发现因为默认timezone是用UTC的。所以只需要设置成我们自己的时区即可。解决方法ormconfig.json{"type":"mysql","host":"localhost","po......
  • Exam DP-300: Administering Microsoft Azure SQL Solutions 微软Azure SQL Solutions
    作为该考试的考生,您应具备构建数据库解决方案方面的主题专业知识,这些解决方案旨在支持使用数据库构建的多种工作负载:企业内部SQLServerAzureSQL服务您是一名数据库管理员,负责管理使用SQLServer和AzureSQL服务构建的内部部署和云数据库。作为Azure数据库管理员,您......
  • PG-DBA培训16:PostgreSQL负载均衡分发与双主HA架构
    一、风哥PG-DBA培训16:PostgreSQL负载均衡分发与双主HA架构本课程由风哥发布的基于PostgreSQL数据库的系列课程,本课程属于PostgreSQL主从复制与高可用集群阶段之PostgreSQL负载均衡分发与双主HA架构,学完本课程可以掌握PostgreSQL高可用负载均衡解决方案,PostgreSQL+Keepalived流复制......
  • PG-DBA培训17:PostgreSQL连接池管理与代理分发
    一、风哥PG-DBA培训17:PostgreSQL连接池管理与代理分发本课程由风哥发布的基于PostgreSQL数据库的系列课程,本课程属于PostgreSQL主从复制与高可用集群阶段之PostgreSQL连接池管理与代理分发,学完本课程可以掌握PostgreSQL连接池管理与代理分发之Pgbouncer,Pgbouncer连接池技术基础,Post......
  • PG-DBA培训19:PostgreSQL高可用集群项目实战之Patroni
    一、风哥PG-DBA培训19:PostgreSQL高可用集群项目实战之Patroni课程目标:本课程由风哥发布的基于PostgreSQL数据库的系列课程,本课程属于PostgreSQL主从复制与高可用集群阶段之PostgreSQL高可用集群项目实战之Patroni,学完本课程可以掌握Patroni运行架构与基础知识,PostgreSQL+Patroni集......
  • PG-DBA培训20:PostgreSQL逻辑复制技术与项目实战
    一、风哥PG-DBA培训20:PostgreSQL逻辑复制技术与项目实战本课程由风哥发布的基于PostgreSQL数据库的系列课程,本课程属于PostgreSQL主从复制与高可用集群阶段之PostgreSQL逻辑复制技术与项目实战,学完本课程可以掌握PostgreSQL逻辑复制基础与架构,PostgreSQL逻辑复制配置之内置默认,Post......