WEB常见网络安全漏洞讲解
通过把SQL命令插入用户提交的数据中,改变代码原有SQL语句的语义,从而达到控制 服务器执行恶意的SQL命令。
可以插入SQL语句并执行
TOP-1 注入
漏洞案例
应用程序在下面存在漏洞的 SQL语句的构造中使用不可信数据: String query = " SELECT * FROM accounts WHERE custID='" + request.getParameter("id") +"'";
TOP-1 注入 防范
1 参数校验:
传递的参数做校验,如果不合法,直接拒绝请求。 1.1 如果是数字类型,判断是否为数字,如果不是,直接拒绝请求 1.2 如果有格式的类型(比如 日期,email,电话,身份证号码等等),判断是非符合格式,如果不符合格式,拒绝请求。 1.3 如果是字符串类型,没有特殊的格式,需要对字符串长度做校验,如果长度大于数据库该字段的定义长度,直接拒绝请求。
3数据库权限做限制
3.1 不能对业务账号开 select information_schema 权限。因为一旦某个漏洞被成功注入,information_schema库暴露所有库, 所有表,字段的定义。给sql注入者提供了便利,,, 注入者不需要猜测表结构,就能轻松获取所有表的定义,进而轻松获取所有 表的数据
攻击者在浏览器中将“ id ”参数的值修改成 10000’ or ’1’=’1。 如: /app/accountView?id= 10000’ or ’1’=’1 这样查询语句的意义就变成了从 accounts表中返回所有的记录。
SELECT * FROM accounts WHERE custID‘= 1000‘0 ;
提示错误 返回正确 返回错误 返回与name=petter相同
搜索型
单引号: /xx.asp?keyword=1’
提示错误
逻辑真假:/xx.asp?keyword=1%’ and ‘%’=‘ 返回查询1的内容
/xx.asp?keyword=1%’ and ‘%1’=‘ 无内容返回或不是1的内容
WEB常见安全漏洞讲解
应用程序安全风险
攻击者
攻击向量
安全漏洞
攻击
漏洞
攻击
漏洞
攻击
漏洞
漏洞
安全控制
技术影响
控制 控制
控制
资产 功能 资产
业务影响 影响 影响 影响
OWASP TOP 10 漏洞
1 注入
6 敏感信息泄露
2 失效的身份认证和会话管理 7 功能级访问控制缺失
3 跨站脚本
8 跨站请求伪造
4 不安全的直接对象引用
SELECT * FROM accounts WHERE custID‘=
‘;
TOP-1 注入
如何识别SQL注入
数字型 单引号: /xx.asp?id=1’ 逻辑真假:/xx.asp?id=1 and 1=1 /xx.asp?id=1 and 1=2 加减符号:/xxx.asp?id=2-1
提示错误 返回正确 返回错误 返回与id=1相等
字符型 单引号: /xx.asp?name=xx’ 逻辑真假:/xx.asp?name=xx’ and ‘a’=‘a /xx.asp?name=xx’ and ‘a’=‘b 加减符号:/xxx.asp?name=pet’+’ter
比如 姓名,数据库定义的事 varchar(12),如果输入超过12个字符,直接拒绝请求
2 使用 PrepareStatement。PrepareStament可以有效防御sql注入攻击。
PrepareStatement原理是:mysql执行树会根据预设的参数做转义,可以把注入的sql当作一个参数执行,而不会当作语句执行 php 应用, 可以使用PrepareStatement 替代 Statement写法。
3.2 各个业务账号只能访问自己业务的数据。这样即使某个漏洞被注入,也只是影响到该业务的数据,不会影响到其他业务的模块
TOP-2 失效的身份认证和会话管理
漏洞案例
案例 #1: 机票预订应用程序支持 URL重写, 把会话 ID放在URL里: /sale/saleitems;jsessionid=2P0OC2JDPXM0OQSNDLPSKHCJUN2JV ?dest=Ha waii 该网站一个经过认证的用户希望让他朋友知道这个机票打折信息。他将上面链接通过邮件发给 他朋友们,并不知道自己已经泄漏了自己的会话ID。当他的朋友们使用上面的链接时,他们将 会使用他的会话和信用卡。
案例 #2: 应用程序超时设置不当。用户使用公共计算机访问网站。离开时,该用户没有点 击退出,而是直接关闭浏览器。攻击者在一个小时后能使用相同浏览器通过身份认证。
案例 #3: 内部或外部攻击者进入系统的密码数据库.存储在数据库中的用户密码没有被加密, 所有用户的密码都被攻击者获得。
TOP-2 失效的身份认证和会话管理
9 使用含有已知漏洞的组件
5 安全配置错误
10 未验证的重定向和转发
TOP-1 注入
原因:应用程序缺少对输入进行安全性设 计。
方式:攻击者将一些包含指令的数据发送 给解释器,欺骗解释器执行计划外的命令。
危害:读取或篡改数据库的信息,甚至能 够获得服务器的包括管理员的权限。
TOP-1 注入
什么是SQL注入?
1. 用户身份验证凭证没有使用哈希或加密保护。 2. 认证凭证可猜测, 或者能够通过薄弱的的帐户管理功能(例如账 户创建、 密码修改、 密码恢复 , 弱会话 ID)重写。 3. 会话 ID暴露在 URL里 (例如 , URL重写) 。 4. 会话 ID容易受到会话固定( sessionfixaPon) 的攻击。??? 5. 会话 ID没有超时限制, 或者用户会话或身份验证令牌特别是单点 登录令牌在用户注销时没有失效。 6. 成功注册后 ,会话 ID没有轮转。 7. 密码、 会话 ID和其他认证凭据使用未加密连接传输。