一、逻辑错误漏洞
常见的逻辑漏洞:
1. 绕过授权验证
(1)水平越权:相同级别(权限)的用户或者同一角色的不同用户之间,可以越权访问、修改或者删除的非法操作。
(2)垂直越权:不同级别或不同角色之间的越权。
2. 密码找回逻辑漏洞
3. 支付逻辑漏洞
(1)商品数量为负数
(2)0元购买商品
4. 指定账户恶意攻击
主要就是封锁指定账户,图取其他利益。
二、代码注入
按照OWASP定义:在客户端提交的代码在服务器端接收后当作动态代码或嵌入文件处理。
以下漏洞可以视为代码注入:
(1)OS命令执行
(2)文件包含
(3)动态函数调用按照Wikipedia定义:客户端所提交的数据未经检查就让Web服务器去执行,这个范围比OWASP定义的代码注入范围要广阔的多。
以下漏洞可以视为代码注入:
(1)SQL注入
(2)XML注入
(3)XSS
(4)文件包含
(5)命令执行
(6)等。
1. XML注入
XML是 The Extensible Markup Language(可扩展标识语言)的简写。XML最初设计的目的是弥补HTML的不足,后来逐渐用于网络数据的转换和描述。XML的设计宗旨是传输数据,并非显示数据。
XML注入是通过改写XML实现的,与XSS跨站漏洞相似,此漏洞利用成功的关键点就是闭合XML标签。
修复:只需要将预定义字符进行转义即可。
2. XPath注入
XPath即为XML路径语言,XPath基于XML的树状结构,提供在数据结构树中寻找节点的能力。简单的说,XPath就是选取XML节点的一门语言。
通过XPath注入攻击,攻击者可以攻击XML,XPath与SQL注入的方式类似。
//user[username/text()='admin' and password/text()='admin888' or 1=1]
笔者建议,对于一些敏感信息,不要使用XML传输,如果一定要使用XML,建议尽量使用密文传输。
XPath注入的预防是比较简单的,没有防御SQL注入那么复杂。最重要的是对预定义字符的转换。
3. JSON注入
即就是在json中插入恶意字符,破坏json结构。
如:
正常为"password": "admin888"
,如果将password的值改为admin"888
,则结果为:"password": "admin"888"
。
防御:
只需要对其关键字符进行转义即可:"password": "admin\\"888"
。
4. HTTP Parameter Pollution(http参数污染)
- 请求url上会有重复参数的时候。
- 根据不同的语言和环境,对于http参数的重复字段的值取得不一样。
- PHP取须后一项,Servlet取第一项。
http参数污染经常用来绕过一些Web应用防火墙(WAF)。简单来说WAF在脚本还未接收到请求之前就开始对数据进行校验,如果未发现恶意代码,则交给脚本处理,如果发现恶意代码,就进行拦截,不再交给脚本处理。
例如:
某个WAF防火墙模版定义数据中不允许出现select关键字,WAF取值验证时可能会选择第一项参数值,而脚本取值与WAF则不同,这样就有可能绕过WAF的数据验证。
PHP: News.php?id=1&id=select username, password from admin--
WAF取id值为1,而PHP取id值为select username, password from admin--
ASP.net: news.aspx?id=1;&id=s&id=e&id=c&id=t
而ASP.net将会把多个相同参数项的值连接在一起,这样http参数污染就极有可能绕过某些WAF防火墙。