SQL Injection学习心得(1)
1,与SQL相关的知识点
-
schemata( ##库名##意为:提要,纲要,为schema的负数-)库存储用户创建的所有数据库的苦命,需要记住,该表中记录数据库库名的字段名为schemata_name(sql对大小写不敏感)
-
tables(##表名##意为:表)表中存储着该用户创建的所有数据库的库名和表名,需要记住,该表中,记录数据库库名和表名的字段名分别为:table_schema(table表来自于schemata库的表名)和table_name(在tables库中,这一行的数据库的名称)。
-
columns(##字段名##,意为柱)表存储的是该用户创建的所有数据库的库名,表名和字段名,为:table_schema(来自schema表中的数据库名称),table_name(来自table库中的名称),column_name(来自columns库中的名称)。
我理解为:类似于文件夹,大文件夹(schemata),中文件夹(tables),小文件夹(columns),文件分类越小越深,则可以看文件是从哪里来的,类table_name。
(可以参考:https://blog.csdn.net/zy15667076526/article/details/108941193)
2,mysql查询语句
1. select
2. limit:limit m,n(m是指记录开始的地方,从0开始表示从第一条记录开始;n是指-》取n条记录。如:limit 0,1;
3. where
4. 几个函数要记住
- database()当前网站使用的数据库
- version()当前的MYSQL版本
- user()当前MYSQL的用户
- 关键:group_concat()函数
5. 注释符:#或--空格(可以用+)或 /**/
6. 内联注释符
/*! code*/
3, union注入攻击(web安全原理剖析第97页)
1. id=-1 union select 1,2,3;
意为: 从表中选取数据,结果放在一个结果集中,进行合并。(因为库中没有-1的数据,所以会返回union select的结果)
2. union select 1,2,3;
返回2,3;意为:2,3的位置可以输入MySQL语句如:union select 1,database(),3;
但命令过长时,两端加括号
如可以将2改成:
(select table_name from information_schema.tables where table_schema='users' limit0,1;)
意为:select 数据库表名 from 数据库库名,(从根目录开始查找-目录形式)where 数据库库名=users。
3.group_concat('---',table_name),3 from information_schema.tables where table_schema='security' --+
4,sqlmap应用解题:
以sqlilabs第一关为例:
(https://www.cnblogs.com/ApricityJ/p/12804436.html)