SQL注入原理
SQL注入主要是开发人员在构建代码的时候,没有对用户输入的值的边界进行安全的考虑,导致攻击者可以通过合法的输入点提交一些精心构造的语句,从而欺骗后台数据库对其进行执行,导致数据库信息泄漏的一种漏洞。
把SQL命令插入到 Web表单递交 或 输入域名或 页面请求 的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
可能存在注入的地方:
URL 搜索框 登录框 cookies(cookie注入仅存在于ASP的程序中) 留言 修改资料 获取HTTP头的信息(client-ip , x-forward-of),订单处理(二次注入)等
SQL注入与XSS,CSRF
相同点:程序员的过滤疏忽。
异同点: XSS前端代码过滤,CSRF数据提交没做验证,SQL注入是在数据库语句被恶意执行
分类
注入的参数类型(按http请求方式):POST, GET, COOKIES, SERVER 其实只要值传到数据库的执行语句那么就可能存在sql注入。
按照变量:字符型(不能进行运算)、数字型(数字不需要单引号(')包围,能运算)
按注入方法:报错注入、延时注入、布尔型盲注、联合查询注入、多语句执行注入
SQL注入漏洞的攻击流程
- 注入点检测 :判断是否存在注入,关键看是否出现页面报错信息,如若报错证明其执行了你填写的SQL语句,比如给参数加单引号查看页面信息如若页面出现变化,说明该Web页面存在SQL注入,若没有出现变化,可能没有SQL注入,也可能有但需要特殊的方法绕过
数字类型,参数不用被引号括起来,如?id=1
其他类型,参数要被引号扩起来,如?name="phone"
(2)信息获取-通过注入点取期望得到的数据
环境信息:数据库的类型、版本,操作系统的版本,用户信息等
数据库信息:数据库名称,表,字段,字段内容(加密内容的破解)
(3)获取权限
获取操作系统的权限,通过数据库执行shell,上传木马程序。
总结
注入首先要找到 注入点。
使用联合查询语句时,需要将语句写在一个闭合的空间内,这个空间就是通过查找注入点并添加的一个闭合的引号内。
在网站中使用的查询语句在 MySQL 中都可以实现。
TIPS:GET AND POST
①GET方式中使用URL提交注入数据
②POST方式中使用抓包工具(如bp)修改POST数据部分提交注入
TIPS:常见的字符编码
单引号(')编码为:%27
空格编码为:+
加号(+)编码为:%2B
等号(=)编码为:%3D
TIPS:数据库常用语句
查询当前数据库 select database();
查询表:select table_name from information_schema.tables where table_schema='当前数据库'
查字段:
select column_name from information_schema.columns where table_name='表名'