1、漏洞介绍
1.1、定义:
- sql注入是通过sql命令插入到web表单提交,输入域名或页面请求中的查询字符串,最终达到欺骗服务器执行恶意sql命令的目的。具体来说,它是利用现有应用程序,将恶意的sql命令注入到后台数据库引擎执行的能力,它可以通过web表单中输入恶意sql语句得到存在安全漏洞的网站上的数据库信息,而不是让网站按照设计者意图去执行sql语句。
1.2、产生条件:
-
服务器未对客户端提交数据进行关键字过滤;
-
客户端提交的数据直接参与sql查询
1.3、漏洞危害:
- 攻击者通过sql注入可以获取数据库中的信息,包括管理员账户信息和普通用户账户信息,攻击者可以进一步寻找后台,利用获取的管理员账号登录,为进一步渗透服务器提供便利。
2、sqlmap简介
-
-u 指定注入url
-
–tables 猜测当前数据库所有表名
-
–dump 将获取到的内容保存到本地
-
-T 指定通过注入需要获取信息的表
-
–current-user 查询数据当前用户
-
–current-db 查询当前数据库名
-
-D 设定需要获取信息的数据库
-
–colums 查询指定表的所有列名
-
–os-cmd 利用诸如点,执行系统命令
-
–os-shell 利用注入点,写入shell
3、sql注入加固
3.1、参数化查询
-
在使用参数化查询的情况下,数据库服务器不会将参数的内容视为SQL的一部分来处理,而是在数据库完成SQL指令的编译后,才套用参数运行,因此就算参数中含有SQL关键字,也不会被数据库运行
例:匿名参数"?" UserName=?AND Password=?
@+参数名:UserName=@UserName AND Password=@Password
3.2、过滤特殊字符
- 使用正则表达式来筛选需要的字符串,过滤不需要的字符串