认识SQL注入-程序员宅基地

技术标签: sqli靶场  数据库  SQL  sql  

认识SQL注入

什么是SQL注入(SQL Injection)

我们先从字面意思去理解,SQL是一种数据库查询语言,他是用来与数据库交互的语言,而注入就是向内部强行添加内容,他们组合起来,就是在SQL语句中强行注入任意内容,这些内容可能是数据,也可能是一串恶意的SQL语句,而攻击者就可以通过这些强行注入的数据或代码,去执行一些恶意的行为。用专业的话来描述就是,应用程序在向后台数据库传递SQL语句时,攻击者在传递SQL语句之前, 找到SQL注入点,并修改了这条SQL,从而实现攻击者间接操作数据库,得到本不能得到的数据或者其他操作。

为什么SQL注入如此可怕?

SQL注入的可怕之处在于它能够对数据库执行大量的非授权操作,从而给个人和组织造成严重损害。这种攻击手段在很多方面都能造成影响:

  1. 数据泄露:攻击者可以获取数据库中的敏感数据,如用户凭证、个人信息和财务记录等。
  2. 数据篡改:攻击者不仅可以读取数据,还能更改或删除数据。这可以导致信息失真,或者使整个系统变得不可用。
  3. 身份冒充和欺诈:通过窃取用户凭证,攻击者可以冒充其他用户,进行非授权的操作或交易。
  4. 系统控制:在某些特定配置下,成功的SQL注入可能导致攻击者获取更高级别的系统访问权限,进而控制整个服务器。
  5. 业务和名誉损害:一次成功的SQL注入攻击可能导致公司或组织遭受重大财务损失,以及长期的信誉损害。
  6. 法律责任:如果未能妥善保护用户数据,组织还可能面临法律诉讼和罚款。

哪里可能存在SQL注入

笼统的说sql注入存在于,一切与数据库交互的输入输出点。但是sql注入一把会存在以下几点中;

  1. URL参数:这种是针对与get方法,有很多数据库都是通过get方法去传递sql的关键值,它是一种不安全的方式

  2. HTTP头部:在头部中的 User Again、Referer、Cookie中都有与数据库直接交互的点

  3. HTML表单:HTML表单中大多数情况是以POST方法传递参数,但是攻击者如果使用抓包工具(bp)抓包分析,也可以轻而易举是进行注入攻击

SQL注入的分类

在SQL中,数据类型主要可分为数值型和字符型。识别这两者有助于我们了解可能出现的SQL注入类型。以下是对两者的解析和使用场景。

数值型SQL语句

数值型数据用于存储各种数值,如整数、浮点数和小数。例如,MySQL支持INT(整数)、FLOAT(浮点数)、DOUBLE(双精度浮点数)和DECIMAL(小数)等。

数值型数据在SQL语句中不需要引号:

SELECT * FROM table WHERE id=1;

这里,id=1指明了一个数值型条件。SQL的WHERE子句进行布尔判断,如果条件成立(真),则返回查询结果。例如,如果字段id包含值1,查询将返回相应的记录。

数值型数据可以进行数学运算,例如:

SELECT * FROM table WHERE id=1/1;  -- 除法
SELECT * FROM table WHERE id=1*1;  -- 乘法
SELECT * FROM table WHERE id=1+0;  -- 加法
SELECT * FROM table WHERE id=2-1;  -- 减法

字符型SQL语句

字符型数据主要用于存储文本和字符串,例如用户名或电子邮件地址。常见的字符型数据类型包括CHARVARCHARTEXTBLOB

字符型数据需要用引号括起来,这有助于精确解析SQL语句并提高执行效率。例如:

SELECT * FROM table WHERE name='John';

在SQL查询中,虽然字符型数据在底层有数值编码(如ASCII或UTF-8),但常用的是专门的字符串操作和函数。与数值型数据类似,WHERE子句也用于布尔判断。

如何寻找SQL注入

SQL补充知识

在SQL中还有三个用于逻辑计算的关键字,他们分别为ORANDNOT, 是用于组合或修改WHERE子句中条件的逻辑运算符。

  • OR 逻辑判断为
    • 运算符用于满足任意一个或多个条件的情况。只要其中一个条件为真,整个表达式就会返回真。
    • 当第一个条件为真时,就不会在判断第二个条件
  • AND 逻辑判断为
    • 运算符用于同时满足两个或多个条件的情况。只有所有条件都为真时,整个表达式才会返回真。
  • NOT逻辑判断为
    • NOT运算符用于反转条件的结果。如果条件为真,NOT会使其变为假,反之亦然。
    • NOT!=<>不一样,NOT 为逻辑判断,而后者为数学概念中的不等于

在使用这三个逻辑判断符时,要注意的是 NOT的优先级是最高的,AND的优先级第二,OR的优先级最低,在使用多重判断时,可以添加()来明确地指定运算的优先级

寻找SQL注入漏洞通常涉及对目标应用程序的多方面分析,以下是一些常用的方法:

推理猜测

这是最直观的方式,直接在输入框或URL参数中插入特殊字符(例如单引号 '),看是否有异常响应或者错误信息,这样可以初步判断是否存在SQL注入点。

报错猜测

有些Web页面在出现SQL错误时会直接把错误信息展示给用户。这样的错误信息通常会泄露数据库的结构或者查询的细节,这给攻击者提供了有价值的信息。

例如,在输入框输入 test' OR '1'='1,如果应用没有做适当的处理,可能会触发数据库的报错信息。

Web响应

观察应用程序在不同输入情况下的行为变化。如果输入特殊字符或构造特定的SQL查询片段导致应用程序行为明显不同,也可能是SQL注入的迹象。

盲注

在某些情况下,应用程序并不会直接显示错误信息,这时可以尝试使用布尔盲注或时间盲注等高级技术来判断是否存在SQL注入点。

  • 布尔盲注:构造特定的SQL查询,使应用在查询结果为真或假时有不同的反应。

    例如,输入 admin' AND 1=1--admin' AND 1=2--,观察应用程序的反应是否不同。

  • 时间盲注:通过构造使数据库延迟响应的SQL查询,来判断是否存在SQL注入。

    例如,输入 admin' OR IF(1=1, SLEEP(5), 0)--,如果数据库延迟了5秒才响应,那就可能存在SQL注入。

总结

理解SQL注入的重要性是提高自己编程技能和网络安全意识的关键一步。我计划通过使用SQLi靶场,一个为学习和实验设计的安全环境,逐步扩展对SQL注入的了解。这将使我有机会亲手尝试各种SQL注入攻击方法,并深入了解如何防范这些风险。这样的实践经验对我来说是宝贵的,它不仅能提高我的编程能力,还能帮助我建立健全的网络安全观念。通过这种方式,我期望能够更全面地掌握SQL注入,从而在未来的编程路上更加稳健和安全。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44369049/article/details/133874805

智能推荐

oracle 12c 集群安装后的检查_12c查看crs状态-程序员宅基地

文章浏览阅读1.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态

解决jupyter notebook无法找到虚拟环境的问题_jupyter没有pytorch环境-程序员宅基地

文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境

国内安装scoop的保姆教程_scoop-cn-程序员宅基地

文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn

Element ui colorpicker在Vue中的使用_vue el-color-picker-程序员宅基地

文章浏览阅读4.5k次,点赞2次,收藏3次。首先要有一个color-picker组件 <el-color-picker v-model="headcolor"></el-color-picker>在data里面data() { return {headcolor: ’ #278add ’ //这里可以选择一个默认的颜色} }然后在你想要改变颜色的地方用v-bind绑定就好了,例如:这里的:sty..._vue el-color-picker

迅为iTOP-4412精英版之烧写内核移植后的镜像_exynos 4412 刷机-程序员宅基地

文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机

Linux系统配置jdk_linux配置jdk-程序员宅基地

文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk

随便推点

matlab(4):特殊符号的输入_matlab微米怎么输入-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入

C语言程序设计-文件(打开与关闭、顺序、二进制读写)-程序员宅基地

文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。‍ Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。

Touchdesigner自学笔记之三_touchdesigner怎么让一个模型跟着鼠标移动-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动

【附源码】基于java的校园停车场管理系统的设计与实现61m0e9计算机毕设SSM_基于java技术的停车场管理系统实现与设计-程序员宅基地

文章浏览阅读178次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot + mybatis + Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。_基于java技术的停车场管理系统实现与设计

Android系统播放器MediaPlayer源码分析_android多媒体播放源码分析 时序图-程序员宅基地

文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;amp;gt;Jni-&amp;amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图

java 数据结构与算法 ——快速排序法-程序员宅基地

文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法