前言:
终于是吧cracer的渗透教程看完了,
也终于是有点时间来整理这些凌乱的笔记了,
关于SQL注入后面会陆续把写的笔记整理成文章,敬请期待!
有什么疑问可以评论也可以直接私信
杂谈:
送给萌新的几句话:
SQL注入对于想学安全方面的人来说算是一个很基础的知识,
所以不要以为学完了SQL注入自己就是大神了,路还远着呢。
学习网络安全方面,实操很重要!很重要!很重要!
所以这方面的学习一定要以理论和实操相结合的方式,这样你才会真正有所收获和成长。
SQL注入方面的实操
线上可以去CTFhub,墨者,或者一些免费的线上靶场练练手(这里不提供了,自己勤快点)
线下可以自行搭建实验靶场,然后找诸如DVWA,Sqlilabs,等等环境(多动手很有用的)
怎么搭靶场可以参考我前面写的一篇文章
SQL注入
一.SQL注入原理:
进入网页里请求的数据要进入到数据库进行查询,如果查询语句不做限制就极有可能泄露数据库的数据
二.SQL注入分类:
按查询的类型分类:
- 数字型SQL注入:查询语句是这样的:select * from user where id=1
- 字符型SQL注入:查询语句是这样的:select * from user where name='lihua’
- 搜索型SQL注入:查询语句是这样的:select * from user where search like '%1%'
按http的提交方式可以分为:
- GET型注入
- POST型注入
- coookie型注入
- http请求头注入
- UserAgent注入
按效果可以分为:
- 报错注入
- 联合查询注入
- 盲注(又可分为布尔盲注和时间盲注)
- 堆查询注入
三.注入步骤:
1.首先判断是否有注入(例如利用1=1,1=2)
2.判断注入类型(例如加上‘’看是否报错)
3.判断数据库类型(构造不同的查询特征语句)
4.这一步众说纷纭,可以开始注入,也可先确定数据库权限再开始
5.查数据库的库名,表名,列名以及相应的数据
四. 数据库类型
目前主流的数据库有三种,Mysql,Ms sql servel,Oracle(Access暂且不提)
所以简单说说三种数据库的语句区别
(初学者也只能简单学习,想学好SQL注入这三种数据库还是要好好研究的)
注意1前面和最后的那个b后面没有’这个符号,因为要构成sql注入语句(设置成了字符型SQL注入)
- 1’ or ‘ab’='a+'b --------------MS SQLserver数据库,字符串连接,成功这返回永真条件
- 1’ or ‘ab’=‘a’'b ---------------Mysql数据库,字符串连接,成功这返回永真条件
- 1’ or ‘ab’=‘a’||'b -------------Oracle数据库,字符串连接,成功这返回永真条件
之后的注入就以Mysql注入为例
五.注入分类详解
1.按查询类型分类注入
(1)数字型:
例如:http://www.baidu.com/1.php?id=1
原理:注入点为数字存在于大多数网页中(一般为查看用户信息,查看文章)
1.数据库原型:
select * from 表名 where id=1
2.条件构造:
如果存在注入则可以构造select * from 表名 where id=1 and 1=1 (蓝色代表你的输入)
解析:1=1代表永真,所以代表的意义为:
1=1 and 这个页面是正确的
因此你访问页面是有效的,所以就成功了
(2)字符型:
例如:http://www.baidu.com/1.php?user=admin
原理:基本同数字型
1.数据库原型:
select * from 表名 where user=“admin”(数据库中可为单引号可为双引号)
2.条件构造:
如果存在注入则可以构造select * from 表名 where id=‘admin‘ and 1=1 ‘ (蓝色代表你的输入,注意最左边那个单引号不是你的输入)
或者这么构造:select * from 表名 where id=‘admin‘ and 1=1 ‘–+ (蓝色代表你的输入)(其中–+在sql中表注释,其他的Mysql注释还有/**/,#)
3.Q&A
Q:有人可能会问了,为什么标红的没有单引号呢?
A:因为是把admin赋值给user,然后user代入到mysql查询语句中,单引号只存在于Mysql,故在网页上不显示
Q:这个单引号怎么看不懂?
A: 看下图
(3) 搜索型:
例如:例如:http://www.baidu.com/1.php?keyword=xxx
原理:都差不多
1.数据库原型:
select * from 表名 where 字段 like ‘%xxx%’
2.条件构造:
如果存在注入则可以构造select * from 表名 where id=‘%xxx%‘ and ‘%1%’=’%1 %’(蓝色代表你的输入)
因为搜索型比较特殊,所以可以构造一个’%1%’=’%1%'的语句构成永真条件,
闭合的话根据数据库原型进行考虑即可
2.判断是否存在三种注入漏洞
(1)数字型
(2)字符型
(3)搜索型
待续…