当前位置: 首页 > 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…...

黑马程序员HarmonyOS4+NEXT星河版入门到企业级实战教程笔记

HarmonyOS NEXT是纯血鸿蒙&#xff0c;鸿蒙原生应用&#xff0c;彻底摆脱安卓 本课程是基于harmony os4的&#xff0c;与next仅部分api有区别 套件 语言&框架 harmony os design ArkTs 语言 ArkUI 提供各种组件 ArkCompiler 方舟编译器 开发&测试 DevEco Studio 开发…...

嵌入式全栈开发学习笔记---C语言笔试复习大全13(编程题9~16)

目录 9.查找字符数组中字符位置&#xff08;输入hello e 输出2&#xff09;&#xff1b; 10、查找字符数组中字符串的位置&#xff08;输入hello ll 输出3&#xff09;&#xff1b; 11、字符数组中在指定位置插入字符&#xff1b;&#xff08;输入hello 3 a 输出heallo…...

https网站安全证书的作用与免费申请办法

HTTPS网站安全证书&#xff0c;也称为SSL证书&#xff0c;网站通过申请SSL证书将http协议升级到https协议 HTTPS网站安全证书的作用 1 增强用户信任&#xff1a;未使用https协议的网站&#xff0c;用户访问时浏览器会有“不安全”弹窗提示 2 提升SEO排名&#xff1a;搜索引擎…...

自动化测试再升级,大模型与软件测试相结合

近年来&#xff0c;软件行业一直在迅速发展&#xff0c;为了保证软件质量和提高效率&#xff0c;软件测试领域也在不断演进。如今&#xff0c;大模型技术的崛起为软件测试带来了前所未有的智能化浪潮。 软件测试一直是确保软件质量的关键环节&#xff0c;但传统的手动测试方法存…...

centos7 基础命令

一、基础信息&#xff1a; 查看IP地址&#xff1a; ip add 重启网络服务&#xff1a; service network restart 查看网卡配置&#xff1a; cat /etc/sysconfig/network-scripts/ifcfg-ens33 启动网卡: ifup ens33 查看内存: free -m 查看CPU&#xff1a; cat /proc/cpuin…...

【设计模式】之单例模式

系列文章目录 【设计模式】之责任链模式【设计模式】之策略模式【设计模式】之模板方法模式 文章目录 系列文章目录 前言 一、什么是单例模式 二、如何使用单例模式 1.单线程使用 2.多线程使用&#xff08;一&#xff09; 3.多线程使用&#xff08;二&#xff09; 4.多线程使用…...

3d模型实体显示有隐藏黑线?---模大狮模型网

在3D建模和设计领域&#xff0c;细节决定成败。然而&#xff0c;在处理3D模型时&#xff0c;可能会遇到模型实体上出现隐藏黑线的问题。这些黑线可能影响模型的视觉质量和呈现效果。因此&#xff0c;了解并解决这些隐藏黑线的问题至关重要。本文将探讨隐藏黑线出现的原因&#…...

共享购:全新消费模式的探索与实践

在消费模式日益创新的今天&#xff0c;共享购模式以其独特的消费与收益双重机制&#xff0c;吸引了众多消费者的目光。这一模式不仅为消费者带来了全新的购物体验&#xff0c;也为商家和平台带来了可观的收益。 一、会员体系&#xff1a;共享购的基石 在共享购模式下&#xff…...

Java集合 总结篇(全)

Java集合 集合底层框架总结 List 代表的有序&#xff0c;可重复的集合。 ArrayList -- 数组 -- 把他想象成C中的Vector就可以&#xff0c;当数组空间不够的时候&#xff0c;会自动扩容。 -- 线程不安全 LinkedList -- 双向链表 -- 可以将他理解成一个链表&#xff0c;不支持…...

Dubbo分层架构深度解析

引言 Dubbo作为一款备受欢迎的高性能、轻量级的Java RPC框架&#xff0c;在现代分布式系统中扮演着至关重要的角色。随着互联网行业的快速发展&#xff0c;服务间的通信变得越来越频繁&#xff0c;这也使得对于高效、可靠的远程通信方案的需求变得愈发迫切。在这样的背景下&am…...