Dream梦想博客

一个热爱网络的90后的博客

黑客学习记录 -3 -SQL注入

实验环境: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()

打赏

点赞