当前位置: 首页 > news >正文

SQL注入-基础知识

目录

前言

一,SQL注入是什么

二,SQL注入产生的条件 

三,学习环境介绍

四、SQL注入原理

五,SQL中常用的函数 

六,关于Mysql数据库


前言


        在网络安全领域中,sql注入是一个无法被忽视的关键点,曾经多少的网站都因此被攻破,直到现在很多网站依旧存在很多sql注入的漏洞和风险点。Sql注入的原理简单,但变化和危害特别严重,属于“上有政策,下有对策”的风险点,也是从事渗透攻防必不可少的一个知识点。本人因近期学习渗透测试相关内容,特此记录学习过程中的笔记,若你也是刚入门渗透安全,或许会有帮助,也希望可以一起交流。

一,SQL注入是什么

SQL注入是一种常见的Web应用程序安全漏洞,攻击者利用该漏洞向应用程序的数据库中插入恶意的SQL查询,从而实现对数据库的非授权访问或执行未经授权的操作。

SQL注入攻击地点主要涉及在用户输入字段中插入或“注入”SQL代码,如果Web应用程序的安全措施不足,这些代码可以被包含在数据库查询中执行。攻击者通过这种方式可以读取、修改或删除存储在数据库中的数据,甚至执行其他恶意操作。这种攻击可能发生在任何接受用户输入并将其直接用于SQL查询的系统上,特别是在输入未经验证或转义的情况下。

防止SQL注入:应该采取参数化查询和存储过程的使用,以及对用户输入进行适当的验证和                            转,限制数据库权限和特权

二,SQL注入产生的条件 

  • 传递给后端的参数是可以控制的
  • 参数内容会被带入到数据库查询
  • 变量未存在过滤或者过滤不严谨

三,学习环境介绍

        我本次所有的sql注入笔记都基于sqli-labs靶场进行演示,链接如何安装sqli-labs靶场,sqlilabs是一个印度程序员写的,用来学习 sql 注入的一个游戏教程,sqlilabs需要apache+php+mysql的环境,我使用phpstudy搭建了集成环境

四、SQL注入原理

        首先让我们来看一个实例,这是sqlilabs的less-11中post注入的实例,也是我们平时碰到比较多的登录界面,有一个正确的用户名密码对均为Dumb,当我们输入后显示登录成功。

 显然这背后的sql逻辑代码为:

SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1;

         其中users表是该数据库中存储用户登录信息的表usernmae和password对应数据库用户名和密码的字段,而$uname和$passwd则是php网页中传入用户名和密码的两个参数。对应于我们使用Dumb登录时,mysql处理的语句就变为:

SELECT username, password FROM users WHERE username='Dumb' and password='Dumb' LIMIT 0,1; 

         这一句sql语句的含义为从users表中查询用户名和密码都为Dumb的用户(limit 0,1的含义则是控制查询结果,返回第一条记录),并把他的username和password字段值返回。sqlilabs数据库查看后发现执行成功,返回了Dumb的用户名和密码。         

         mysql查询后返回给php进行逻辑判断,存在记录,因此登录成功,若用户名或密码不正确,则查询不到记录,因此无法登录,这就是登录界面的基本原理,在正常情况下不会出现任何问题。

        现在有一个计算机专业的同学张三,他只知道Dumb的用户名,而不知道他的密码,但是他想登录Dumb的账号,是不是没有任何办法了呢?可能有人会说用暴力破解,确实对于这个实例可以暴力破解,但是如果有验证码该怎么办呢,是不是也没有办法了呢?此时张三灵机一动,不按套路出牌,他往用户名输入了这样的一串字符“Dumb’ #”,而密码随便输入了“123456”,这样居然成功登录了,返回和前面一样的界面!这就是最简单的一个sql注入,让我们来看看这里面发生了什么吧。当张三提交输入后,sql语句变成了:

SELECT username, password FROM users WHERE username='Dumb’#' and password='123456' limit 0,1; 

        把这一句sql语句可以直观的看出“#”起到了注释的作用将后面的语句全部注释,而将前面username字段参数的区间闭合,因此构成了一个正确的sql语句,等同于:

SELECT username, password FROM users WHERE username='Dumb’

          这一句sql语句的含义为从users表中查询用户名为Dumb的用户,且返回他的username和password字段值,这样屏蔽了对于密码的判断条件,因此成功登录。这便是最简单sql注入的原理了

五,SQL中常用的函数 

# 一些SQL注入常用的函数
version()                               # 查看数据库版本
database()                            # 查看当前数据库名
user()                                    # 查看当前数据库用户
system_user()                       #  查看系统用户名

concat()                                # 把数据库中的某列数据或某几列数据合并为一个字符串
group_concat()                     # 把数据库中的某列数据或某几列数据合并为一个字符串
@@datadir                           # 查看数据库路径
@@version_compile_os      # 查看操作系统

六,关于Mysql数据库

        在 MySQL5.0 版本后,MySQL 默认在数据库中存放一个information_schema的数据库,该数据库中包含了当前系统中所有的数据库、表、列、索引、视图等相关的元数据信息,是MySql自身信息元数据的存储库,我们需要记住三个表名,分别是 schemata,tables,columns。

schemata         # 存储的是该用户创建的所有数据库的库名,要记住该表中记录数据库名的                                字段名为 schema_name
tables           # 存储该用户创建的所有数据库的库名和表名,要记住该表中记录数据库 库名                           和表名的字段分别是 table_schema 和 table_name.
columns          # 存储该用户创建的所有数据库的库名、表名、字段名,要记住该表中记录                       数据库库名、表名、字段名为 table_schema、table_name、column_name
 

# 查询所有的数据库名
select schema_name from information_schema.schemata limit 0,1
# 查询指定数据库security中的所有表名
select table_name from information_schema.tables where table_schema='security' limit 0,1
# 查询指定数据库security中的指定数据表users的所有列名
select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1

相关文章:

SQL注入-基础知识

目录 前言 一,SQL注入是什么 二,SQL注入产生的条件 三,学习环境介绍 四、SQL注入原理 五,SQL中常用的函数 六,关于Mysql数据库 前言 在网络安全领域中,sql注入是一个无法被忽视的关键点&#xff0c…...

npx 有什么作用跟意义?为什么要有 npx?什么场景使用?

npx 是 npm 从 v5.2.0 开始新增了 npx 命令,> 该版本会自动安装 npx,如果不能使用就手动安装一下: $ npm install -g npxnpx 的作用 npm 只能管理包的依赖,npx 则可以快捷的运用包中的命令行工具和其他可执行文件&#xff0c…...

Docker搭建LNMP+Wordpress

目录 一.项目模拟 1.项目环境 2.服务器环境 3.任务需求 (1)使用 Docker 构建 LNMP 环境并运行 Wordpress 网站平台 (2)限制 Nginx 容器最多使用 500MB 的内存和 1G 的 Swap (3)限制 Mysql 容器写 /d…...

PCIE相关总结

1、概述 "PCIE 槽位" 指的是主板上的 Peripheral Component Interconnect Express (外围设备互联扩展)槽位。它是用于连接扩展卡(如显卡、网卡、声卡等)到主板的接口。PCI Express 是一种高速串行扩展总线标准&#xff…...

OpenCV 入门(五) —— 人脸识别模型训练与 Windows 下的人脸识别

OpenCV 入门系列: OpenCV 入门(一)—— OpenCV 基础 OpenCV 入门(二)—— 车牌定位 OpenCV 入门(三)—— 车牌筛选 OpenCV 入门(四)—— 车牌号识别 OpenCV 入门&#xf…...

C++基础-编程练习题2

文章目录 前言一、查找“支撑数”二、数组元素的查找三、爬楼梯四、数字交换五、找高于平均分的人 前言 C基础-编程练习题和答案 一、查找“支撑数” 【试题描述】 在已知一组整数中, 有这样一种数非常怪, 它们不在第一个, 也不在最后一个&…...

Linux下GraspNet复现流程

Linux,Ubuntu中GraspNet复现流程 文章目录 Linux,Ubuntu中GraspNet复现流程1.安装cuda和cudnn2.安装pytorch3.编译graspnetAPIReference 🚀非常重要的环境配置🚀 ubuntu 20.04cuda 11.0.1cudnn v8.9.7python 3.8.19pytorch 1.7.0…...

Linux——MySQL5.7编译安装、RPM安装、yum安装

文章目录 Linux——MySQL5.7编译安装、RPM安装、yum安装一、编译安装二、RPM安装三、yum安装 Linux——MySQL5.7编译安装、RPM安装、yum安装 卸载mysql # 查看是否安装了mysql [rootcsq ~]# rpm -qa |grep mysql mysql-community-server-5.7.36-1.el7.x86_64 mysql-community-c…...

LSTM递归预测(matlab)

LSTM(长短期记忆)递归预测原理及步骤详解如下: LSTM递归预测(matlab)代码获取戳此处代码获取戳此处代码获取戳此处 一、LSTM递归预测原理 LSTM是一种特殊的递归神经网络(RNN),它能够…...

计算机网络 备查

OSI 七层模型 七层模型协议各层实现的功能 简要 详细 TCP/IP协议 组成 1.传输层协议 TCP 2.网络层协议 IP 协议数据单元(PDU)和 封装 数据收发过程 数据发送过程 1. 2.终端用户生成数据 3.数据被分段,并加上TCP头 4.网络层添加IP地址信息…...

查看软件包依赖关系

列出软件包依赖文件列表 rpm -ql 命令用于列出已安装软件包的文件列表。它显示软件包中包含的文件及其对应的路径。 具体来说,-q 选项表示查询已安装的软件包,而 -l 选项表示列出软件包中的文件列表。 例如,如果要查看已安装的 nginx 软件…...

C++ 中 strcmp(a,b) 函数的用法

【C 中 strcmp(a,b) 函数的用法】 ● 若 len(a)>len(b)&#xff0c;则返回1。 ● 若 len(a)len(b)&#xff0c;则返回0。 ● 若 len(a)<len(b)&#xff0c;则返回-1。【C 中 strcmp(a,b) 函数的用法代码一】 #include <bits/stdc.h> using namespace std;int main…...

Servlet(一些实战小示例)

文章目录 一、实操注意点1.1 代码修改重启问题1.2 Smart Tomcat的日志1.3 如何处理错误 一. 抓自己的包二、构造一个重定向的响应&#xff0c;让页面重定向到百度主页三、让服务器返回一个html数据四、表白墙4.1 约定前后端数据4.2 前端代码4.3 后端代码4.4 保存在数据库的版本…...

【JVM】垃圾回收机制(Garbage Collection)

目录 一、什么是垃圾回收&#xff1f; 二、为什么要有垃圾回收机制&#xff08;GC&#xff09;&#xff1f; 三、垃圾回收主要回收的内存区域 四、死亡对象的判断算法 a&#xff09;引用计数算法 b&#xff09;可达性分析算法 五、垃圾回收算法 a&#xff09;标记-清除…...

C++中的priority_queue模拟实现

目录 priority_queue模拟实现 priority_queue类定义 priority_queue构造函数 priority_queue类push()函数 priority_queue类pop()函数 priority_queue类size()函数 priority_queue类empty()函数 priority_queue类top()函数 仿函数与priority_queue类模拟实现 仿函数 …...

【Kafka】1.Kafka核心概念、应用场景、常见问题及异常

Kafka 是一个分布式流处理平台&#xff0c;最初由 LinkedIn 开发&#xff0c;后成为 Apache 软件基金会的顶级项目。 它主要用于构建实时数据管道和流式应用程序。它能够高效地处理高吞吐量的数据&#xff0c;并支持消息发布和订阅模型。Kafka 的主要用途包括实时分析、事件源、…...

LTE的EARFCN和band之间的对应关系

一、通过EARFCN查询对应band 工作中经常遇到只知道EARFCN而需要计算band的情况&#xff0c;因此查了相关协议&#xff0c;找到了他们之间的对应关系&#xff0c;可以直接查表&#xff0c;非常方便。 具体见&#xff1a; 3GPP TS 36.101 5.7.3 Carrier frequency and EAR…...

解决问题:Docker证书到期(Error grabbing logs: rpc error: code = Unknown)导致无法查看日志

问题描述 Docker查看日志时portainer报错信息如下&#xff1a; Error grabbing logs: rpc error: code Unknown desc warning: incomplete log stream. some logs could not be retrieved for the following reasons: node klf9fdsjjt5tb0w4hxgr4s231 is not available报错…...

【C语言】预处理器

我们在开始编写一份程序的时候&#xff0c;从键盘录入的第一行代码&#xff1a; #include <stdio.h>这里就使用了预处理&#xff0c;引入头文件。 C预处理器不是编译器的组成部分&#xff0c;但是它是编译过程中一个单独的步骤。简言之&#xff0c;C预处理器只不过是一…...

QtConcurrent::run操作界面ui的注意事项(2)

前面的“QtConcurrent::run操作界面ui的注意事项&#xff08;1&#xff09;”&#xff0c;末尾说了跨线程的问题&#xff0c;引出了Qt千好万好&#xff0c;就是跨线程不好。下面是认为的最简单的解决办法&#xff1a;使用QMetaObject::invokeMethod&#xff08;相比较信号-槽&a…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言&#xff1a;我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM&#xff08;Java Virtual Machine&#xff09;让"一次编写&#xff0c;到处运行"成为可能。这个软件层面的虚拟化让我着迷&#xff0c;但直到后来接触VMware和Doc…...

Vue3中的computer和watch

computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...

Qt的学习(一)

1.什么是Qt Qt特指用来进行桌面应用开发&#xff08;电脑上写的程序&#xff09;涉及到的一套技术Qt无法开发网页前端&#xff0c;也不能开发移动应用。 客户端开发的重要任务&#xff1a;编写和用户交互的界面。一般来说和用户交互的界面&#xff0c;有两种典型风格&…...

数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)

目录 &#x1f50d; 若用递归计算每一项&#xff0c;会发生什么&#xff1f; Horners Rule&#xff08;霍纳法则&#xff09; 第一步&#xff1a;我们从最原始的泰勒公式出发 第二步&#xff1a;从形式上重新观察展开式 &#x1f31f; 第三步&#xff1a;引出霍纳法则&…...

2025-05-08-deepseek本地化部署

title: 2025-05-08-deepseek 本地化部署 tags: 深度学习 程序开发 2025-05-08-deepseek 本地化部署 参考博客 本地部署 DeepSeek&#xff1a;小白也能轻松搞定&#xff01; 如何给本地部署的 DeepSeek 投喂数据&#xff0c;让他更懂你 [实验目的]&#xff1a;理解系统架构与原…...