持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情
大家可以看一下我画的思维导图,更好理解一些。
前言:
SQL注入这个名词相信大家应该都听说过,但是理解还不是特别深刻。。作为web漏洞中最常见的漏洞之一,是黑客经常利用的漏洞,网站如果没有做好这方面的防御,后果不堪设想。那么我今天就来给大家说一下我对SQL注入的理解,权当抛砖引玉。如有相关错误,麻烦大佬指出。 毕竟学的是SQL注入,如果你对SQL语句都不了解,学起来一定很费劲。大家可以先学习一下sql语句
sql语句
注入常见参数
user():当前数据库用户 database():当前数据库名 version():当前使用的数据库版本 -@@datadir:数据库存储数据路径 concat():联合数据,用于联合两条数据结果。如 concat(username,0x3a,password)` group_concat():和 concat() 类似,如 group_concat(DISTINCT+user,0x3a,password),用于把多条数据一次注入出来 concat_ws():用法类似 hex()和 unhex():用于 hex 编码解码 load_file():以文本方式读取文件,在 Windows 中,路径设置为 \ select xxoo into outfile '路径':权限较高时可直接写文件 一些最重要的 SQL 命令 SELECT - 从数据库中提取数据 UPDATE - 更新数据库中的数据 DELETE - 从数据库中删除数据 INSERT INTO - 向数据库中插入新数据 CREATE DATABASE - 创建新数据库 ALTER DATABASE - 修改数据库 CREATE TABLE - 创建新表 ALTER TABLE - 变更(改变)数据库表 DROP TABLE - 删除表 CREATE INDEX - 创建索引(搜索键) DROP INDEX - 删除索引
以不同的用户登陆 ' UNION SELECT 1, 'anotheruser', 'doesnt matter', 1--
老规矩,先看概念
概念
SQL 注入是一种将 SQL 代码插入或添加到应用(用户)的输入参数中,之后再将这些参数传递给后台的 SQL 服务器加以解析并执行的攻击。攻击者能够修改 SQL 语句,该进程将与执行命令的组件(如数据库服务器、应用服务器或 WEB 服务器)拥有相同的权限。 如果 WEB 应用开发人员无法确保在将从 WEB 表单、cookie、输入参数等收到的值传递给 SQL 查询(该查询在数据库服务器上执行)之前已经对其进行过验证,通常就会出现 SQL 注入漏洞。
SQL注入分类
根据参数分类:字符型注入,数字型注入。
字符型注入:参数有一些其他的符号包着,比如单引号,双引号,小括号
数字型注入:参数没有符号包着。
根据提交方式:GET注入,POST注入,cookie注入,HTTP请求头注入。
GET注入:我们之前应该学过GET方式传参,就是直接在url后面加上要传参的内容。
POST注入:就是用hackbar传参来进行注入。
COOKIE注入:通过浏览器的:查看无障碍选项 ,来修改cookie
HTTP请求头注入:这个需要对HTTP请求的数据的包进行修改再发包。
根据注入的方法分类
根据注入方法分类:联合注入,报错注入,布尔盲注,宽字节注入,二次注入
联合注入:
1' union select 1,2,group_concat(schema_name) frominformation_schema.schemata--
报错注入:
UpdateXML(xml_target, xpath_expr, new_xml) xml_target:: 需要操作的xml片段 xpath_expr: 需要更新的xml路径(Xpath格式) new_xml: 更新后的内容
我们再来看看一下具体怎么操作:
一:判断注入点: and 1 =1 /and 1 =2 回显页面不同 单引号判断显示数据库错误
二:判断注入类型是整形还是字符型: 数字型: 1’:错误 1 and 1 =1 :正确 1 and 1 =2 : 错误 字符型: a' :错误 a' and '1'='1:正确 a' and '1 '='2:错误
三:判断查询列数 order by 参数=1' order by 1(以此增加,直至报错) 报错说明那一列不存在
四、判断显示位
五、获取所有数据库名
select group_concat(SCHEMA_NAME) from information_schema.SCHEMATA
下次我就来给大家讲一下实战环节。