SQL注入-基础知识

news/2024/10/18 2:35:05/

目录

前言

一,SQL注入是什么

二,SQL注入产生的条件 

三,学习环境介绍

四、SQL注入原理

五,SQL中常用的函数 

sql%E6%95%B0%E6%8D%AE%E5%BA%93-toc" style="margin-left:0px;">六,关于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      # 查看操作系统

sql%E6%95%B0%E6%8D%AE%E5%BA%93">六,关于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

http://www.ppmy.cn/news/1454997.html

相关文章

使用模板时模板的定义应该放到头文件

在使用函数模板之前,编译器必须看到不仅仅是一个声明,通常编译器需要完整的函数模板定义。换句话说,如果你在头文件中定义了一个模板,那么这个头文件必须包含该函数模板的主体。 假设需要在许多项目之间共用某个函数foo。通常情况…

牛客储物点的距离

链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 一个数轴,每一个储物点会有一些东西,同时它们之间存在距离。 每次给个区间[l,r],查询把这个区间内所有储物点的东西运到另外一个储物点的代价是多少&#xff1…

ES dsl查询filter(或must)和should并用时should子句不生效

记录下今天编码时遇到的问题,在filter和should同级并用的查询下,should子句并没有生效,只有filter子句生效。 例如以下dsl {"query": {"bool": {"filter": [{"term": {"status": 3}}],&…

区块链 | NFT 相关论文:Preventing Content Cloning in NFT Collections(一)

🐶原文: Preventing Content Cloning in NFT Collections 🐶写在前面: 这是一篇 2023 年的 CCF-C 类,本博客只记录其中提出的方法。 A Robust NFT Collection Functionality 我们将在本节中提出一个定义。在假设有恶…

期权如何开户的流程是什么样的?

今天期权懂带你了解期权如何开户的流程是什么样的?期权账户开户是指投资者向期权经纪商或金融机构提交申请,以便可以在期权市场上进行交易并持有期权合约的账户开设过程。 期权如何开户的流程是什么样的? 1. 投资者参与营业部提供的股票期权…

百川2模型解读

简介 Baichuan 2是多语言大模型,目前开源了70亿和130亿参数规模的模型。在公开基准如MMLU、CMMLU、GSM8K和HumanEval上的评测,Baichuan 2达到或超过了其他同类开源模型,并在医学和法律等垂直领域表现优异。此外,官方还发布所有预…

富格林:了解黑幕套路正规方法预防

富格林悉知,存于市场中的黑幕亏损,不仅扰乱市场秩序,还使得不少的投资者受害亏损,面对诱导黑幕陷阱,一定要注意采取正规的方法防范避免受害亏损。投资者在进入市场之前,可从黑幕案件中了解黑幕亏损原因&…

pcb沉金工艺有什么作用:为何它成为电子制造的必备工艺?

在电子制造业中,PCB(印刷电路板)的质量和性能对于产品的整体表现至关重要。沉金工艺因其能够显著提升pcb的焊接性能、耐腐蚀性和导电性能,已成为电子制造不可或缺的一部分。 一、沉金工艺的作用 1.焊接性能的提升:工…