SQL注入基础知识

本文详细介绍了SQL注入的不同类型,包括基于响应、数据类型和影响程度的分类,以及表单域、cookie和服务器变量的注入点。同时,讨论了系统函数如version()、user()在注入中的作用,以及字符串连接函数和union操作符的运用。文章还举例说明了SQL逻辑运算和注入流程,提供了猜数据库、表和列的内容的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、注入的分类

1.基于服务器收到的响应

  • 基于错误的SQL注入
  • 联合数据类型
  • 堆查询注入
  • SQL盲注(时间,布尔,报错)

2.基于处理输入的SQL查询(数据类型)

  • 字符串
  • 数字或整数

3.基于程度和顺序的注入(哪里受了影响)

  • 一阶注入
  • 二阶注入
    一阶注入直接对web产生影响,二阶注入间接对web产生影响

4、基于注入点位置

  • 表单域的位置注入
  • cookie注入
  • 通过服务器变量(基于头部信息的注入)

二、系统函数

  • version()—mysql的版本号
  • user()—用户名
  • database()—数据库
  • @@datadir—数据库路径
  • @@version_compile_os—操作系统版本号

1.字符串连接函数

  • concat(str1,str2,....)没有分割符的连接字符串
  • concat_ws(separet,str1,str2...)有分割符的连接字符串
  • group_concat(str1,str2...)连接一个组的所有字符串并用逗号隔开

2.一般用于尝试的语句

  • --+可用#来代替#编码后的结果是%23
  • or 1=1–+
  • ’ or 1=1–+
  • " or 1=1–+
  • ) or 1=1–+
  • ') or 1=1–+
  • ") or 1=1–+
  • ")) or 1=1–+
    一般的代码格式为:
 $id=$_GET['id']
 $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

一般考虑闭合前面的或者闭合后面的,一般采用两种思想闭合后面的引号或者注释掉,注释采用
--+或#(%23)

3.union操作符的介绍

union操作的符用于合并两个或多个select语句,两个语句的操作符需要拥有相同的列和数据类型。
SQL UNION语法

SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name

注释:默认选取不重复的值,如果想要重复的值使用union all

SQL 中的逻辑运算

举出一个例子进行说明:

select *from spirt where users="hello" and password="" or 1=1--+

and的优先级高于or,users and password =false而or 1=1恒为真。所以结果就恒为真了。
在这里插入图片描述

  1. select *from user where id=1 and 1=1;
  2. select *from user where id=1 && 1=1;
  3. select *from user where id=1 & 1=1;
    面1和2是一样的,3是按位相与。(&的优先级大于=)

注入流程

在这里插入图片描述
以下简述mysql的一些基本操作,用来检查数据库中的基本内容信息。

show databases;//检查有哪些数据库
use security;//使用security数据库
show tables;//查看security数据库中有哪些表
desc mails;//查看这个表的结构

mysql中有一个information_schema,存储着所有的数据库的相关信息。
一般我们利用该表可以进行一次完整的注入。
猜数据库

select schema_name from information_schema.schemata

猜某库的数据表

selece table_name from information_schema.tables where  table_schema="";

猜某表对所有列

select column_name from information_schema.columns where table_name="";

获取某列的内容

select *** from ***;

总结

原谅我这一生不羁放荡来自由。

CTF(Capture The Flag)是一种网络安全竞赛,旨在考察参赛者在网络安全领域的技能和知识。CTF中的SQL注入是一种常见的攻击技术,用于利用应用程序对用户输入的不正确处理而导致的安全漏洞。下面是CTF中SQL注入基础知识: 1. 什么是SQL注入SQL注入是指攻击者通过在应用程序的输入中插入恶意的SQL代码,从而绕过应用程序的验证和过滤机制,进而执行非法的数据库操作。攻击者可以通过SQL注入获取敏感信息、修改数据甚至控制整个数据库。 2. SQL注入的原理: SQL注入利用了应用程序对用户输入的不正确处理。当应用程序没有对用户输入进行充分验证和过滤时,攻击者可以通过构造特定的输入来改变原始SQL查询的语义,从而执行恶意操作。 3. SQL注入的类型: - 基于错误的注入:攻击者通过构造恶意输入,触发应用程序产生错误信息,从而获取敏感信息。 - 基于布尔盲注:攻击者通过构造恶意输入,利用应用程序对布尔表达式的处理方式,逐位猜测数据内容。 - 基于时间盲注:攻击者通过构造恶意输入,利用应用程序对时间延迟的处理方式,逐位猜测数据内容。 - 基于联合查询注入:攻击者通过构造恶意输入,利用应用程序对联合查询的处理方式,执行额外的查询操作。 4. 防御SQL注入的方法: - 使用参数化查询或预编译语句,确保用户输入不会被解释为SQL代码。 - 对用户输入进行严格的验证和过滤,包括输入长度、类型、格式等。 - 最小化数据库用户的权限,避免使用具有高权限的数据库账户。 - 定期更新和修补应用程序和数据库的安全补丁。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值