SQL Injection学习心得(1)

1,与SQL相关的知识点

  1. schemata( ##库名##意为:提要,纲要,为schema的负数-)库存储用户创建的所有数据库的苦命,需要记住,该表中记录数据库库名的字段名为schemata_name(sql对大小写不敏感)

  2. tables(##表名##意为:表)表中存储着该用户创建的所有数据库的库名和表名,需要记住,该表中,记录数据库库名和表名的字段名分别为:table_schema(table表来自于schemata库的表名)和table_name(在tables库中,这一行的数据库的名称)。

  3. 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)

posted @ 2022-02-14 20:30  B1smarck  阅读(30)  评论(0编辑  收藏  举报