目录
如果错过互联网,与你擦肩而过的不仅仅是机会,而是整整一个时代。
基本概念
广泛应用于非法获取网站控制权,是发生在应用的数据库层上的安全漏洞。
通过给 web 表单的输入区域或页面请求注入一些特殊字符,恶意欺骗服务器执行 SQL 命令。在数据库增删查改的过程中,对外部的数据未进行检查而使用时,就可能会产生 SQL 注入漏洞。
注入位置
- 表单提交:任何需要提交的表单都可能被注入而使攻击者得到用户在表单上做的更改。比如在登陆页面注入“用户名= ”or“ ‘1’ = ‘1’ ”,服务器就会默认攻击者和真正的用户权限相同,使攻击者可以在数据库上对此表进行增删查改,甚至直接删除表单。
- URL参数提交:连接数据库使用 root 账户或者动态构建 SQL 指令都会给攻击者提供机会。
- HTTP请求头部一些可以修改的值:如 User-Agent , Cookie , Referer 等。当头文件可以修改,能带进数据库进行查询且数据库对输入信息不会进行过滤时,则可注入。
User-Agent:获取User-Agent可以知道用户使用的浏览器版本,操作系统等,并将其保存到数据库中。
Cookie:cookie是服务区端用来记录客户端的状态的,保存在浏览器中。
Referer:Referer是告诉服务器该网页是从哪个网页链接过来的,以便服务器工作。
注入类型
- 按数据库分:Access,MsSQL,MySQL,Qracle,DB2 等;
- 按注入点类型分:数字型,字符型,搜索型;
- 按提交方式分:GET,POST,Cookies,HTTP 头,XFF 等;
- 按执行效果分:布尔盲注,时间盲注,报错盲注,联合注入等。
注入点的查找
一般在数据交互的地方均可注入。
数字型注入:地址结尾处是 xxx = 一个数字,则可进行注入。如对 http://www.baidu.com/news.php?id=1 的注入可为 selet * from news where id=1 and 1=1 。
字符型注入:地址结尾处是 xxx = 一串字符,则可进行注入。如对 http://www.baidu.com/news.php?id=admin 的注入可为 selet * from news where id=admin and 1=1' ' 。
搜索型注入:在搜索数据时没有进行参数过滤使地址中存在" keyword = 关键字",有的也可能直接在搜索栏里提交。如对 http://www.baidu.com/news.php?keyword = ''社会'' 的注入可为selet * from news where keyword = ''社会'' % 'and 1=1- ' 。
防范方法
- 动态构造 SQL 时,把所有的单引号替换为双引号,删除用户输入的连字符,限制查询数据库的权限。
- 限制表单或查询字符串的输入长度。
- 检查用户输入的合法性,在用户端和服务器端都确定输入的内容只包含合法的数据。
- 将用户名和密码等数据进行加密。
- 应用的异常信息尽量少给提示或者直接自定义错误信息对原始的错误信息提示进行包装。
- 检查提取数据查询返回的结果记录的数量,如果超出本应返回的数量,有可能已被 SQL 注入。
SQL注入并不只是对数据库的攻击行为,更是对整个攻击链条涉及到对操作系统、注册表、系统文件、脚本、插件控件、数据、数据库相关等的覆盖 。SQLMAP深度解析及使用手册 - FreeBuf网络安全行业门户