Logout

安装

安装配置MySQL

下载

进入MySQL官网,依次点击:上方选项卡DOWNLOADS->页面底端MySQL Community Edition->MySQL Community Server,此时会来到以下这个页面:

配置my.ini

下载解压好以后,得到了文件夹mysql-8.0.12-winx64,进入该文件夹,此处为MySQL的根目录。 在此目录下创建文件my.ini,并在文件中输入以下代码。

[mysqld]
basedir ="D:\mysql\mysql-8.0.12-winx64"
datadir ="D:\mysql\mysql-8.0.12-winx64\data"
port=3333
server_id =10
character-set-server=gbk
character_set_filesystem=gbk
[client]
port=3333
default-character-set=gbk
[mysqld_safe]
timezone="CST"
[mysql]
default-character-set=utf8

输入完以后,保存时,请点击另存为,查看编码格式是否为ANSI,如果不是,请修改为ANSI,以免在后面的配置安装中出现错误。 basedir和datadir后跟随的路径,需要自行更改,即根据你安装的路径来修改。

配置环境变量(可选,但建议配置)

为了方便在其他路径下也能迅速打开MySQL,建议配置环境变量。 右击计算机->属性->高级系统设置->在高级选项卡下点击环境变量->找到PATH, 在末尾追加,注意是追加,不是覆盖,添加路径:D:\mysql\mysql-8.0.12-winx64\bin; 上述路径即你解压的路径,后面加上bin就可以了。 添加完毕后,确定,退出。

开始使用MySQL

进入C盘,依次进入Windows->System32,找到cmd.exe,以管理员身份运行,一定要注意,不能直接进入,一定是管理员身份,否则后面步骤会报错。 首先将MySQL加入到Windows的服务中,输入命令: mysqld --install; 会提示安装成功,Service successfully installed.,然后进入下一步。 此时,开始初始化数据库,输入:mysqld --initialize --user=root --console(看清楚是mysqld,不是mysql,多了个d),需要稍微等一段时间,此时正在创建data文件夹,同时能够在窗口看到一大串信息,找到关键词:[email protected],会发现关键词后会有一段复杂无规律的字符串,请务必记录下来!那是你稍后登录数据的初始密码! 上述步骤完成以后,就可以启动MySQL了。 输入:net start mysql,稍后你也可以用net stop mysql关闭MySQL服务。 然后就可以进入MySQL了,输入:mysql -u root -p,此时会要求你输入密码 而第一次登录的密码,就是刚才提到了原始密码,即毫无规律的字符串。

修改密码

mysql> set password for 用户名@localhost = password('新密码'); set password for [email protected] = password('123');

新建

mysql -u root -p grant all privileges on 数据库名.表名 to '新用户名'@'指定ip' identified by '新用户密码' ; grant all privileges on *.* to '新用户名'@'%' identified by '新用户密码' ; *.*表示对所有库所有表拥有权限 ,'%'表示对所有IP访问都有权限

sql注入

基础查询

seelect XXX0 from XXX1 where XXX2xxx1表 中查找 第XXX2行 ,列举出 第XXX0列

报错

The used SELECT statements have a different number of columns

union后面的select没有from,则必须列数和前一个select的相同 爆字段指匹配出列数

找到回显位置

SELECT 1,2,3...的含义及其在SQL注入中的用法 select语句在指明要查询的内容属性(如select id)后,要加from指明是从哪个数据库表中获得数据,在数据库环境中我们一般会先写一句use xxxdatabase,之后写select from语句直接加当前数据库中的表名就可以了。如果我们没有声明使用哪个数据库,也可以直接写 select xxxx from security.users(假设要从security数据库的users表中获取数据)

select直接加数字串时,可以不写后面的表名,那么它输出的内容就是我们select后的数字,这时我们写的一串数字就是一个数组(或1个行向量),这时select实际上没有向任何一个数据库查询数据

在SQL注入时,我们可以利用它来进行一个快速测试,在Union注入时,如果我们通过测试已经知道了前面语句的字段数,就可以写入union 注入语句,但存在一个问题,我们虽然可以通过注入获得想要的信息,但这些信息必须能够返回到我们手中,对于网页来说,如何能够让数据回显是至关重要的。例如一个网站的参数传递执行的查询有3个字段,很可能这些字段不是都显示在网页前端的,假如其中的1或2个字段的查询结果是会返回到前端的,那么我们就需要知道这3个字段中哪两个结果会回显,这个过程相当于找到数据库与前端显示的通道。

找出数据库名

1,2,3,4,5可能不是每个位置都会有回显,测试出哪里有回显后使用database()函数测试出数据库名

找到数据表名

Mysql 5 以上有内置库 information_schema,存储着mysql的所有数据库和表结构信息 select * from information_schema.tables where table_schema="zymDB"; information_schema.tables 指information_schema中的tables表,此表存放了所有表名, 包括其它库中的表 ; 从中找到行为 table_schema=zymDB 的所有数据 此数据中table_name为zymDB库的所有表名 select table_name from tables where table_schema="zymDB";

information_schema中的tables表存放所有的表名; information_schema中的columns表存放所有的列名和表名;

列举 table_schema,table_name,column_name 三列,从中找到 table_schema为zymDB的行, 从第1行(0开始)显示,连续6行;

group_concat 集合显示