以下为此漏洞的初级知识分类
在这里,你将学到初级的SQL注入漏洞,如有想深入学习,请继续关注此博客,谢谢。
数据库的基本概念
数据库大致可以分为四点:
数据(Data):
在计算机中,各种我们所看到的字母,文字,字符串,语音,图片视频等统称为数据。数据库(DB)【Access、MYSQL、Oracle、MSSQL等】
是按照数据结构来组织、存储和管理数据的“仓库”数据库管理系统(DBMS)【Access、MYSQL、Oracle、MSSQL等】是一种操纵和管理数据库的软件,用于建立、使用和维护数据库。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。
结构化查询语言(SQL)【DQL、DDL、DML、TCL、DCL】是一种用于数据库查询和程序设计的语言,用于存取数据以及查询、更新和管理关系数据库系统
SQL注入原理
SQL注入攻击就是在一些涉及到SQL语句,也就是SQL 数据库查询的功能进行恶意构造语句执行SQL命令,或通过提供恶意的数据包执行恶意的SQL命令。一般情况下,往往是应用程序缺少对输入进行安全性设计。
SQL注入方法
攻击者将一些包含指令的数据发送给解释器,欺骗解释器执行计划外的命令。
SQL注入危害
读取或篡改数据库的信息,甚至能够获得服务器的包括管理员的权限。
SQL注入防御(日后另起一篇持续更)
1 、参数校验;2、对数据库权限做限制;3、使用 PrepareStatement等
SQL注入简易讲解
查询流程对比
一个正常的查询流程如下:
请求网站—>查看是否有查询语句—>语法检查—>从数据库里查询—>返回查询信息
注入攻击的流程如下:
构造SQL攻击语句—>查看是否有查询语句—>语法检查—>从数据库里查询—>返回查询信息—>通过返回信息进行进一步攻击查询或得到管理员权限进行入侵等。
常用测试语句
以下可用get或用post方式进行执行语句,过于简单,在此不做演示
- 单引号及or关键字
我们看下面的这句常用登陆查询语句如果我们构造 username=1′or′1′=′1password=1’or’1’=’1 ,或者在username查询成功后直接将paassword注释掉,这样就可以直接绕过进行登陆。1
SELECT * FROM Users WHERE Username='$username' AND Password='$password'
以下为代入的SQL语句:
1 | SELECT * FROM Users WHERE Username='1' OR '1'='1' AND Password='1'OR '1'='1' |
- 使用括号
我们看下面这个语句,我们可以先加个括号,然后把后面的password段注释掉,这样就达到了我们攻击的目的。以下为带入的SQL语句:1
SELECT * FROM Users WHERE((Username='$username')AND(Password=MD5('$password')))
1
username=1′or′1′=′1′))/∗password = 1
- Union查询SQL
利用Union可以进行连接查询,从而进一步得到信息,假设如下查询:那么我们设置ID的值为:1
SELECT Name, Phone, Address FROM Users WHERE Id=$id
那么整体的查询就会变为:1
$id =1 UNION ALL SELECT StudentNumber,1,1 FROM StudentTable
1
SELECT Name, Phone,Address FROM Users WHERE Id=1 UNION ALL SELECT StudentNumber,1,1 FROM StudentTable
SQL注入分类(日后另起一篇持续更)
- 手工注入
- 宽字节注入
- 盲注
- 时间盲注
- 报错盲注
- 布尔型盲注
- 其他注入
- 自动化注入—-sqlmap