SQL注入:
所谓的SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或请求页面的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
具体来说,它是利用现有应用程序,将恶意的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
SQL注入作用:
- 绕过登录验证:使用万能密码登录网站后台等
- 获取敏感数据:获取网站管理员帐号、密码等
- 文件系统操作:列目录,读取、写入文件等
- 注册表操作:读取、写入、删除注册表等
- 执行系统命令:远程执行命令
SQL注入分类:
1. 按照数据类型:
- 数字形(Integer)
- 字符型(String)
2.按返回结果:
- 显错注入(Error-Based)
- 盲注(Boolean/Time-Based Blind)
其他分类:
- POST注入:注入字段在POST数据中
- Cookie注入:注入字段在Cookie数据中
- 搜索注入:注入处为搜索的点
- Baes64注入:注入字符串需要经过base64加密
- 布尔型盲注:即可以根据返回页面判断条件真假的注入
- 时间延迟型盲注:即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断
- 报错回显型注入:即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中
- 联合查询型注入:可以使用union的情况下的注入
- 堆查询型注入:可以同时执行多条语句的执行时的注入
…
学习平台
–Metasploitable2
Metasploitable2是Metasploitable2团队维护的一个集成了各种漏洞弱点的linux主机(ubantu)镜像,方便广大安全人员进行MSF漏洞测试跟学习,免去搭建各种测试环境。
SQL注入中最常见利用的系统数据库,经常利用系统数据库配合union联合查询来获取数据库相关信息,因为系统数据库中所有信息都在这个数据库里面,比如所有数据库名、所有的表名、列名以及列名的数据库类型等
这里主要关注MYSQL系统数据库information_schema,关注系统数据库的columns表和schema表以及tables表
SCHEMATA表:提供了关于数据库的信息
COLUMNS表:给出了表中的列信息
TABLES表:给出了关于数据库中的表的信息
SQL函数是在SQL注入中用的比较多的,经常利用SQL函数来判断数据库的版本,当前用户,当前用户权限以及数据库的安装路径等等 如下图:
注入步骤
1.求闭合方式
一般的闭合方式包括 ‘ ’, “ ”,( ),{ } ,(‘ ’)等等
例如:
当输入/?id=1’ and 1=1 --+时页面显示时,页面显示正常输出时
当输入/?id=1’ and 1=2 --+时页面显示时,页面显示不输出时
说明该闭合方式正确,闭合方式为‘ ’,如果不对再一个个试闭合方式。
注:- -+的作用是将后面的代码注释掉
2.查询表的列数
使用order by +数字
/?id=1’ order by 10 --+
不出结果表示猜的数大了,则利用二分法减半再试
出结果了就表示猜对了
图中表明列数为3列
3.查询表的显示位
利用/?id=-1’ union all select +求出来的列数
为什么前面的id中是-1而不是1
因为在Metasploitable2的