黑客学习记录 -3 -SQL注入
字数
710 字
阅读时间
3 分钟
更新日期
2/6/2017
实验环境:MySql
Sql注入原理
- 通过
and
xor
等语句测试是否注入到了数据库 order by 1
order by 是按照某列的顺序来对数据表排序 1是列 通过这个可以知道表中有多少列union select
union特点是select要与前面的一致union select 1,2,3,4,5
sql就会返回1,2,3,4,5
可以将前面注入错误的内容,以便union select可以显示内容
exists()判断括号内的东西是否存在
id=1' and exists(select * from users)--+
查看存不存在users这个数据表
存在的话,下一步id=1' and exists(select password from users)--+
查看users这个表里存不存在password这个字段
可以看到这里是猜数据表和字段,要么是用字典去fuzz
很繁琐,有没有更好的办法呢?
有,Mysql有个元数据库 information_schema
information_schema
information_schema
是一个字典,
包含了整个 mysql
的所有信息,
本质上是一个 database
,
里面有三个表比较常用,
分别是 tables
和 columns
,还有 schemata
- information_schema.schemata
- 储存了所有数据库的信息,
- 字段:
schema_name
存放数据库名字
- information_schema.tables
- 储存了所有表的信息
table_name
//存放表格的名字table_schema
//存放表格所在的数据库名字
- information_schema.columns
- 储存了所有列的信息
column_name
//存放列的名字table_name
//存放表格的名字table_schema
//存放表格所在的数据库名字
for example
查找数据库有哪些数据库id=1' union select 1,schema_name,3,4,5 from information_schema.schemata--+
小节
网上有很多种sql注入的类型,什么数字型,字符型,搜索型…..
sql注入漏洞产生最根本的原因是什么?
是把用户输入的数据当做代码去执行,
白盒分析
get方法接收id,单引号包裹后,直接动态构造sql查询语句
黑盒分析
id=1 and 1=1
id=1 and 1=0
- 判断是否当作代码执行了
盲注&&显著
有的代码执行错误后不会返回任何信息,只有执行正确才会返回信息
- 显注是 :我问数据库问题,他巴拉巴拉给我一通说
- 盲注是:我问他问题,他只能回复是或者不是
- 用
exists()
,一样可以猜出数据表和其中字段 id=1 and exists(select password from users)--+
substr()
用来截取字符串id=1 and (substr(user(),1,1)>'a')--+
- 用substr截取每一位判断比较(ascii码比较) 通常使用
二分法
小节
- 注入的利用方法很多
- 报错注入
- 延时注入
sleep()