sql注入 订阅
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。 [1] 展开全文
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。 [1]
信息
外文名
SqlInject
类    型
参数
类    别
平台层注入、代码层注入
中文名
sql注入
语    言
计算机语言
sql注入定义
SQL是操作数据库数据的结构化查询语言,网页的应用数据和后台数据库中的数据进行交互时会采用SQL。而SQL注入是将Web页面的原URL、表单域或数据包输入的参数,修改拼接成SQL语句,传递给Web服务器,进而传给数据库服务器以执行数据库命令。如Web应用程序的开发人员对用户所输入的数据或cookie等内容不进行过滤或验证(即存在注入点)就直接传输给数据库,就可能导致拼接的SQL被执行,获取对数据库的信息以及提权,发生SQL注入攻击。 [2] 
收起全文
精华内容
下载资源
问答
  • sql注入
    千次阅读
    2022-04-22 23:36:52

    1 SQL注入概述

    1.1 SQL注入简介

    定义:SQL注入就是指Web应用程序对用户输入数据的合法性没有判断,前端传入后端的参数是攻击者可控的,并且参数带入数据库查询,攻击者可以通过构造不同的SQL语句来实现对数据库的任意操作。

    动态SQL语句:一般情况下,开发人员可以使用动态SQL 语句创建通用、灵活的应用。动态SQL语句是在执行过程中构造的,它根据不同的条件产生不同的SQL 语句。当开发人员在运行过程中需要根据不同的查询标准决定提取什么字段(如select语句),或者根据不同的条件选择不同的查询表时,动态地构造SQL语句会非常有用。

    下面以PHP语句为例。由于这里的参数ID可控,且带入数据库查询,所以非法用户可以任意拼接SQL语句进行攻击。

    $query =”SELECT * FROM users WHERE id= $_GET['id']";
    

    注入流程:由于关系型数据库系统,具有明显的库/表/列/内容结构层次,所以我们通过SQL注入漏洞获取数据库中信息的时候,也依据这样的顺序。首先获取库名,其次获取表名,然后获取列名,最后获取数据

    1.2 SQL注入原理(掌握)

    目前,大多数Web编程语言提供了操作SQL的接口,以方便与数据库进行交互。但是在开发Web应用的过程中,由于忽视了代码的健壮性和安全性,攻击者可以构造巧妙的SQL语句从而获取到敏感数据,因此导致了SQL这种攻击方式的流行。
    SQL 注入漏洞的产生需要满足以下两个条件:
    (1)参数用户可控:前端传给后端的参数内容是用户可以控制的。
    (2)参数带入数据库查询: 未对用户可控参数进行足够的过滤,导致传入的参数拼接到SQL语句,且带入数据库查询。

    1.3 SQL注入漏洞的危害(掌握)

    (1)攻击者未经授权可以访问数据库中的数据,盗取用户的隐私以及个人信息,造成用户的信息泄露。
    (2)可以对数据库的数据进行增加删除操作,例如私自添加或删除管理员账号。
    (3)如果网站目录存在写入权限,可以写入网页木马。攻击者进而可以对网页进行篡改,发布一些违法信息等。
    (4)经过提权(利用mysql提权,有mof提权和udf提权)等步骤,服务器最高权限被攻击者获取。攻击者可以远程控制服务器,安装后门,得以修改或控制操作系统。

    2 SQL注入漏洞分类

    2.1 注入位置分类(掌握)

    根据SQL注入漏洞原理,在用户“可控参数”中注入SQL语法,也就是说WEB应用在获取用户数据的地方,只要带入数据库查询,都有可能存在注入,这些地方通常包括:

    (1)GET 数据

    (2)POST 数据

    (3)http请求头参数注入

    • HTTP Referer:是header的一部分,当浏览器请求网页时,会自动携带一个请求来源,如果后端存在交互,则会引发注入问题的产生。
    • User-Agent 请求头,该请求头携带的是用户浏览器的标识信息,如果此时带入数据库查询,则同样会触发注入问题的产生。
    • X-Forwarded-For:简称XFF头,它代表客户端,用于记录代理信息的,每经过一级代理(匿名代理除外),代理服务器都会把这次请求的来源IP追加在X-Forwarded-For中
    • Cookie:指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)
    • X-Real-IP:只记录真实发出请求的客户端IP。
    • Accept-Language:请求头允许客户端声明它可以理解的自然语言,以及优先选择的区域方言
    • HTTP_CLIENT_IP:该属性是PHP内置属性,同样取得的是客户端的IP,同样可控,如果带入数据库,则会产生注入问题。
      ……
      GET 、POST、 Cookie为与数据库进行交互时最常用的三种方法,一般称为GPC.与数据库有交互的地方均有可能存在注入。

    2.2 注入数据类型分类(掌握)

    数据类型分类来看,SQL注入分为数字型字符型

    (1)数字型注入:注入点的数据拼接到SQL语句中是以数字型出现的,数据两边没有单引号、双引号括起来。
    (2)字符型注入:注入点的数据两边有单引号、双引号括起来。
    因此在sql注入时判断是数字型注入还是字符型注入非常有必要,因为要考虑到单引号、双引号的闭合问题,sql注入语句要逃出引号的包围。

    2.3 注入手法分类(掌握)

    (1)union联合查询注入
    union查询注入是最基础的注入。在SQL中, UNION 操作符用于合并两个或多个 SELECT 语句的结果。union 查询注入利用 UNION 关键字可以追加一条或者多条额外的 SELECT 查询,并将结果追加到原始查询中。

    (2)盲注
    盲注指的是在不知道数据库返回值的情况下对数据中的内容进行猜测,实施SQL注入。主要分为布尔盲注基于时间的盲注

    (3)报错注入
    黑客攻击时常根据错误回显进行判断,但是现在非常多的Web程序没有正常的错误回显,这样就需要我们利用报错注入的方式来进行SQL注入了。

    (4)堆叠查询注入
    堆叠注入为攻击者提供了很多的攻击手段,通过添加一个新的查询或者终止查询,可以达到修改数据和调用存储过程的目的。

    (5)二次注入
    在将数据(一次注入的)存入到了数据库中之后,开发者就认为数据是可信的。在下一次进行需要进行查询的时候,直接从数据库中取出了脏数据,没有进行进一步的检验和处理,这样就会造成SQL的二次注入。比如在第一次插入数据的时候,数据中带有单引号,直接插入到了数据库中;然后在下一次使用中在拼凑的过程中,就形成了二次注入。

    (6)宽字节注入
    在使用PHP连接MySQL的时候,当设置“set character_set_client = gbk”时会导致一个编码转换的问题,这就是常说的宽字节注入。

    (7)base64注入
    base64注入是针对传递的参数被base64加密后的注入点进行注入。除了数据被加密以外,其中注入方式与常规注入一般无二。

    3 SQL语句基础

    为了更好地进行SQL注入,需要对SQL有所了解,在之前专栏学过的SQL基础语句后,此处对与SQL注入相关性较大的知识做一个温习。

    3.1 简介

    结构化查询语言(Structured Query Language,缩写SQL)是一种特殊的编程语言,用于数据库中的标准数据查询语言。1986年10越,美国国家标准学会对SQL进行规范后,以此作为关系式数据库管理系统(MYSQL、ACCESS、MSSQL、SQLSERVER、ORACLE)的标准语言。关系式数据库管理系统具有非常明显的层次结构,库名|表名|字段名|字段内容。

    3.2 注释

    mysql数据库的注释大概有以下几种:

    #
    -- (杠杠空格)
    /*......*/
    /*!......*/  内联查询
    

    3.3 MySQL 元数据库 information_schema 内容简介

    information_schema 数据库跟 performance_schema 一样,都是 MySQL 自带的信息数据库。其中 performance_schema 用于性能分析,而 information_schema 用于存储数据库元数据(关于数据的数据),例如数据库名、表名、列的数据类型、访问权限等。
    在这里插入图片描述
    在该数据库中,有三个表对SQL注入帮助较大,分别是schemata表、tables表、和columns表。.
    (1)schemata:记录当前 mysql 中所有数据库的信息。该表中字段名SCHEMA_NAME记录着所有数据库的名字。

    (2)tables存储 mysql 中的所有表的信息。该表主要字段名如下:

    • TABLE_SCHEMA记录该表属于哪个数据库。
    • TABLE_NAME记录该表的名字。

    (3)colunms存储 mysql 中所有字段信息。该表主要字段名如下:

    • TABLE_SCHEMA记录该字段名属于哪个数据库。
    • TABLE_NAME记录该字段属于哪个表。
    • COLUMN_NAME记录该字段名。
    • 在这里插入图片描述

    3.4 MySQL 常用函数

    可以利用select语句加上下列常用参数,来查询所需要的信息。比如select 1 <>2数据库将返回1,又比如select version()数据库将返回版本号 。常用参数如下,更多参数、运算符、函数参考文章《【SQL基础-2】SQL常用运算符及通配符》《【SQL基础-3】SQL常用函数

    (1)version() :返回当前数据库软件版本

    select version();
    

    在这里插入图片描述

    (2)database() :返回当前数据库名

    select database();
    

    在这里插入图片描述

    (3)user() :返回用户名

    select user();
    

    在这里插入图片描述
    (4)current_user() :返回当前用户名

    select current_user();
    

    在这里插入图片描述
    (5)system_user() :返回系统用户名

    select system_user();
    

    在这里插入图片描述
    (6)@@datadir :返回数据库路径

    select @@datadir;
    

    在这里插入图片描述
    (7)@@version_compile_os :返回操作系统版本

    select @@version_compile_os
    

    在这里插入图片描述
    (8)字符串截取函数left()、right()、 mid()/substring()/substr();字符串连接函数concat()、concat_ws()、 group_concat();ord()返回第1个字符对应ASCII编码;rand()返回0-1之间的随机浮点数;sleep()睡眠时间为指定的秒数。具体参考《【SQL基础-3】SQL常用函数》。

    4 总结

    (1)掌握SQL注入漏洞的原理;
    (2)掌握SQL注入漏洞的危害;
    (3)掌握SQL注入分类方式及各分类方式的类型;
    (4)加深SQL和数据库相关知识的理解。

    参考文献

    [1]《常见sql注入的类型
    [2] 《SQL注入及其危害、防御手段
    [3] 《十种MySQL报错注入
    [4] 《MySQL盲注:基于时间延迟注入9种方法
    [5] 《SQL注入-堆叠注入(堆查询注入)
    [6] 《MySQL 中的 information_schema 数据库
    [7] 《【SQL注入01】SQL注入漏洞简介、原理及类型

    更多相关内容
  • sql注入的常用方法: 1、服务端对前端传过来的参数值进行类型验证; 2、服务端执行sql,使用参数化传值,而不要使用sql字符串拼接; 3、服务端对前端传过来的数据进行sql关键词过来与检测; 着重记录下服务端进行...
  • SQL 注入天书.pdf

    2021-08-06 17:21:07
    SQL 注入学习天书
  • C# MVC 过滤器防止SQL注入
  • (1)主演示就是一张t_user表,利用常见的用户登录来模拟sql注入对后台数据的侵入 (2)数据库脚本 — postgresql DROP TABLE IF EXISTS "public"."t_user"; CREATE TABLE "public"."t_user" ( "id" int8 NOT ...
  • 什么是SQL注入攻击?引用百度百科的解释: sql注入_百度百科: 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有...
  • SQL注入 SQL Injection

    2019-03-19 22:13:38
    SQL注入的知识,SQL注入的知识, 国外的一本详细介绍了SQL注入的一本书
  • SQL注入攻击与防御

    2018-07-17 15:29:47
    SQL注入是Internet上最危险、最有名的安全漏洞之一,《SQL注入攻击与防御》是目前唯一一本专门致力于讲解SQL威胁的图书。《SQL注入攻击与防御》作者均是专门研究SQL注入的安全专家,他们集众家之长,对应用程序的...
  • SQL注入 FUZZ关键字 字典
  • sql注入字典fuzz

    2021-01-11 17:51:54
    sql注入字典fuzz
  • 超级sql注入工具

    2018-11-02 10:59:54
    超级SQL注入工具(SSQLInjection)是一款基于HTTP协议自组包的SQL注入工具,支持出现在HTTP协议任意位置的SQL注入,支持各种类型的SQL注入,支持HTTPS模式注入。 超级SQL注入工具目前支持Bool型盲注、错误显示注入、...
  • sql注入详细教程 寻找存在sql注入的网址 探测过滤 tamper 得到shell
  • SQL注入

    2020-12-14 17:22:12
    SQL注入 什么是SQL注入 所谓SQL注入,就是通过把SQL命令插入到表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台...
  • SQL注入漏洞演示源代码 更多免费资源请查看:http://download.csdn.net/user/php_fly
  • URL采集器,可以根据关键词采集,SQL注入器,傻瓜式找注入点,仅供学习使用,不能用于非法用途,大家可以根据需要下载
  • sql注入练习工具

    2018-11-08 19:00:32
    sql注入小工具 测试sql注入 安全类 仅供 学习参考使用
  • 适合刚学python和sql注入的人 import urllib2 import re
  • SQL 注入是一类危害极大的攻击形式...1. 演示下经典的SQL注入 我们看到:select id,no from user where id=2; 如果该语句是通过sql字符串拼接得到的,比如: String sql = “select id,no from user where id=” + id;
  • JAVA代码审计之SQL注入

    2021-06-14 01:28:42
    本章节课程主要从以下三方面详细的介绍了如何针对java代码中sql注入的审计方法及黑盒验证: 1、JDBC连接方式下sql注入的存在的形态及修复方法,like、in情况在如何安全使用预处理来防范sql注入 2、在使用Mybatis框架...
  • sql注入总结 语句精简 类型丰富 种类齐全 值得学习 欢迎借鉴
  • 防止sql注入工具类l

    2019-03-22 02:50:07
    NULL 博文链接:https://kaka100.iteye.com/blog/1004594
  • sql注入和xss攻击, springmv拦截器,可自由调整需要拦截的字符
  • mybatis如何防止SQL注入

    2018-01-05 14:25:10
    mybatis如何防止SQL注入
  • SQL注入基础和进阶.pdf

    2021-12-26 14:24:58
    SQL注入基础和进阶
  • SQL注入课程.pdf

    2021-01-25 15:39:37
    SQL注入课程
  • SQL注入攻击是一种已经长期存在,但近年来日益增长的安全威胁,《安全技术经典译丛:SQL注入攻击与防御(第2版)》致力于深入探讨SQL注入问题。  《安全技术经典译丛:SQL注入攻击与防御(第2版)》前一版荣获2009...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 305,445
精华内容 122,178
关键字:

sql注入

友情链接: SOD.zip