常见的漏洞原理及防御方法

目录

一、暴力破解

原理:

危害:

防御:

二、RCE(远程代码执行)

原理:

危害:

防御:

系统命令执行函数

三、SQL注入

原理:

危害:

常用函数:

防御:

1.过滤输入内容,校验字符串

2、参数化查询(绑定变量,使用预编译查询)

3、安全测试,安全审计

4、SQL预编译

四、XSS

原理:

危害:

防御:

五、CSRF

原理:

危害:

防御:

六、Files Inclusion(文件包含)

原理:

危害:

防御:

七、目录遍历

原理:

危害:

防御:

八、SSRF

原理:

形成原因:

危害:

防御:

九、敏感信息泄露

原理:

危害:

防御:

十、反序列化

原理:

危害:

防御:

十一、XXE(XML注入攻击)

原理:

危害:

防御:

十二、文件上传

原理:

危害:

文件上传攻击的流量特征

防御:


一、暴力破解

原理:

暴力破解是一种基于试错的攻击方式,其中攻击者使用计算机程序或手工方法,通过尝试大量可能的用户名和密码组合来尝试破解密钥或密码。暴力破解攻击通常会在短时间内连续尝试多个密码,以尝试猜测正确的密码。

危害:

目的主机账号猜解成功后,攻击通常利用该账号做如下操作:

1、攻击者通过泄露账户非法登录主机,盗取用户数据;

2、攻击者通过泄露账户非法登录主机,注入病毒程序,执行挖矿或勒索,如gobleImposter勒索病毒、飞客蠕虫;

3、攻击者通过泄露账户非法登录主机,作为跳板机攻击其他主机;

防御:

一些防范暴力破解的方法包括:

1. 加强密码强度。选择一个足够复杂和随机的密码可以有效地抵御暴力破解攻击。建议使用大小写字母、数字和符号进行组合,并避免使用常见词汇、生日或其他易于猜测的信息。

2. 设置密码策略。统一管理密码策略并执行强制性密码更改可以有效减少暴力破解攻击。

3. 使用多重身份验证。与密码相比,多重身份验证措施(如指纹、面部识别、短信验证码等)更难被攻击者破解。

4. 防止暴力攻击。设置登录失败限制、锁定账户或者设置短暂的登录间隙等限制措施可以有效阻止暴力攻击。

5. 审计和监视。审计与监视可以及时发现暴力破解攻击,并采取相应的紧急措施。

总的来说,预防暴力破解的关键是制定恰当的安全策略和保持警觉,保证自身的账户和密码安全,并加强对系统和设备的保护。

二、RCE(远程代码执行)

原理:

传入 代码执行函数的变量,客户端可控,并且没有做严格的过滤。那么攻击者可以随意输入(注入,注射,Inject)他想要执行的代码,并且在服务器端执行。如果代码在服务器端执行成功,就认为存在代码注入漏洞,也就是RCE。

危害:

Web 应用如果存在远程代码执行漏洞(RCE)是一件非常可怕的事情,攻击者通过RCE 继承Web 用户权限,执行任意(PHP)代码。

如果服务器没有正确配置,Web 用户权限比较高的话,就可以读写目标服务器任意文件内容,甚至控制整个网站以及服务器。

防御:

下面是一些远程代码执行漏洞的防御方法:

1. 及时修补漏洞。对于已经发现的远程代码执行漏洞,应立即发布和安装补丁,以尽可能避免攻击者利用漏洞进行攻击。

2. 执行输入验证。输入验证是一项重要的安全措施,它可以确保用户输入的数据符合合理规范,并且不会包含恶意代码和语句。对于某些易受攻击的输入类型,例如

  • 尽量不要使用eval 等危险函数,如果使用的话一定要进行严格的过滤。
  • 在php.ini 配置文件中disable_functions 中禁用。
  • 参数的值尽量使用引号包裹,并在拼接前调用addslashes() 进行转义。
  • disable_functions = system,assert

3. 安全编码规范。开发程序安全编码规范就能识别和消极迎战攻击。大致宗旨是在开发,设计阶段将安全纳入严密和系统的考虑中。

4. 安装安全软件。一些强大的安全软件,可以有效地检测和阻止攻击者利用远程代码执行漏洞的尝试。

5. 限制代码执行。处理用户提交到服务器的代码或者文件时,可以限制文件类型、大小、存储位置以及代码执行的环境,从而减轻攻击者通过远程代码执行漏洞入侵系统的可能性。

总体来说,预防远程代码执行漏洞需要从软件、安全实践等多个方面着手,建议用户在使用计算机系统时要保持警觉,保护好系统数据和用户隐私。

代码执行函数

eval()
assert()
preg_replace()
call_user_func()
call_user_func_array()
array_map()

命令执行函数

system()
exec()
shell_exec()
passthru()
popen()


三、SQL注入

原理:

SQL注入产生的原因是后台服务器在接收相关参数时未做好过滤直接带入到数据库中查询,导致可以拼接执行构造的SQL语句,从而在运行的应用程序中插入恶意的SQL代码,实现对数据库的未授权操作。

危害:

1. 盗取用户数据和隐私,这些数据被打包贩卖,或用于非法目的后,轻则损害企业品牌形象,重则将面临法律法规风险。

2. 攻击者可对目标数据库进行“增删改查”,一旦攻击者删库,企业整个业务将陷于瘫痪,极难恢复。

3. 植入网页木马程序,对网页进行篡改,发布一些违法犯罪信息。

4. 攻击者添加管理员帐号。即便漏洞被修复,如果企业未及时察觉账号被添加,则攻击者可通过管理员帐号,进入网站后台。

常用函数:

group_concat()

group_concat()是MySQL数据库中的一个聚合函数,它用于将一个表格中的多条记录按照某一个字段的值进行合并,并用指定的分隔符分隔开每一个值,最终返回一个字符串。

information_schema

information_schema并不存储实际数据,而是提供了一系列的视图和表,用于查询系统元数据信息。

报错注入

updatexml(),extractvalue(),floor() ,exp()

updatexml()、extractvalue()函数是 MYSQL 对 XML 文档数据进行查询和修改的 XPATH 函数;

eg:extractvalue(1,concat(0x7e,(select database())))

floor()函数是 MYSQL 中用来取整的函数。

(select 1 from (select count(*),concat(version(), floor(rand(0)*2))x from information_schema.tables group by x)a)

盲注

left()函数:left(a,b)从左侧截取a的前b位,正确则返回1,错误则返回0

regexp函数:select user()regexp'r' user()的结果为root,regexp为匹配root的正则表达式

从左至右进行匹配,如果匹配成功则返回1,匹配失败则返回0

like函数:匹配与regexp相似     select user() like 'r%' :匹配第一个字符是否为r

substr(a,b,c)  select substr() xxxx  substr(a,b,c)从位置b开始,截取a字符串c位长度

ascii()  将某个字符串转化为ascii值

防御:


1.过滤输入内容,校验字符串


过滤输入内容就是在数据提交到数据库之前,就把用户输入中不合法的字符剔除掉,可以使用编程语言提供的处理函数或自己的处理函数来进行过滤,还可以使用正则表达式匹配安全的字符串。

比如:使用preg_replace函数对单双引号进行过滤、str_replace函数对关键字进行过滤,

使用 mysqli_real_escape_string 函数接受两个参数:数据库连接对象和需要转义的字符串。它会对字符串中的特殊字符进行转义,将它们转换为在 SQL 语句中安全使用的形式。

2、参数化查询(绑定变量,使用预编译查询)


参数化查询目前被视为预防SQL注入最有效的方法,参数化查询是指在设计与数据库连接并访问数据时,在需要填入数值或者数据的地方,使用参数(Parameter)来给值。

简单总结,参数化能防注入的原因在于,语句是语句,参数是参数。

3、安全测试,安全审计

下面是在开发过程中可以避免 SQL 注入的一些方法。

 3.1.避免使用动态SQL
避免将用户的输入数据直接放在SQL语句中,最好使用准备好的语句和参数化查询,这样更安全。

3.2.不要将敏感数据保留在纯文本中
加密存储在数据库中的私有/机密数据,这样可以提供了另一级保护,以防攻击者成功的排出敏感数据

3.3.限制数据库的权限和特权
将数据库用户的功能设置为最低要求;这将限制攻击者在设法获取访问权限时可以执行的操作

3.4.避免直接向用户显示数据库错误
攻击者可以使用这些错误消息来获取有关的数据库信息。

4、SQL预编译

以java为例,其中预编译使用preparestatement,对其进行语法分析,编译和优化,其中用户传入的参数用占位符?代替。当语句真正运行时,传过来的参数只会被看成纯文本,不会重新编译,不会被当做sql指令。

即使用占位符代替SQL语句中的变量,并将SQL语句和变量分开处理。通过将SQL语句与变量分开处理,可以避免SQL注入攻击

四、XSS

原理:

XSS(Cross Site Scripting)是指攻击者使用Web应用程序中的漏洞,将恶意脚本注入到合法网站中的方式。当受害用户访问这些带有恶意脚本的页面时,浏览器会执行,从而导致攻击者可以利用受害者的账户进行攻击和盗取信息等行为。

危害:

1、cookie劫持
通过XSS漏洞,我们可以轻易的将javascript代码注入被攻击用户的页面并用浏览器执行。
如果用户的cookie没有设置Httponly,在javascript中可以通过“document.cookie”来获取用户的cookie内容,并可以轻易的发送到任意黑客指定的地址。

2、CSRF:使用XSS可以实现CSRF,不过XSS只是实现CSRF的诸多途径中的一条。

3、XSS钓鱼

4、获取用户信息
获取浏览器和系统信息
浏览器的navigator对象可以暴露非常多的信息

5、XSS蠕虫


防御:

下面是一些防范XSS攻击的方法:

1. 输入验证。在开发应用程序时,开发人员应该对用户输入数据进行验证。例如,删除HTML标记,转义特殊字符等操作,防止恶意脚本注入。

2. 输出过滤。输出过滤是一种检查输出内容是否包含不受信任输入的技术。例如,使用HTML编码转义输入,并限制JavaScript运行的范围。

  • 标签过滤
  • 事件过滤
  • 敏感字符过滤
  • 设置httponly防止Cookie被获取

3. 避免使用内联脚本。内联脚本是一种内嵌在HTML标记内的JavaScript代码,容易被攻击者用来注入恶意代码。因此,应该尽可能避免使用内联脚本。

4. HttpOnly Cookie。可以让服务端向客户端返回一个仅限于http请求发送的cookie,为了防止脚本代码通过document.cookie来获取cookie。

5. 升级浏览器或插件。每个新版的浏览器或浏览器插件都会加入本地模式的做法,这种做法能够防止XSS攻击中的DOM污染问题。

总的来说,预防XSS攻击的关键是制定恰当的安全策略和保持警觉,保证自身的账户和密码安全,并加强对系统和设备的保护。

五、CSRF

原理:

CSRF(Cross-Site Request Forgery)攻击是指攻击者盗用了用户的身份,以用户的名义进行恶意操作的攻击。攻击者通过构造特定的HTML或JavaScript代码,在用户不知情的情况下,向合法网站发送伪造的请求,从而完成特定的恶意操作。

危害:

以受害者名义发送邮件,发消息,盗取受害者的账号,甚至购买商品,虚拟货币转账,修改受害者的网络配置(比如修改路由器DNS、重置路由器密码)等等。。造成的问题包括:个人隐私泄露、机密资料泄露、用户甚至企业的财产安全。

一句话概括CSRF的危害:盗用受害者身份,受害者能做什么,攻击者就能以受害者的身份做什么。

  • 银行转账
  • 修改密码
  • 修改邮箱
  • 群发消息
  • 与XSS 漏洞相结合创建网站后台管理员账号

防御:

1. 输入验证。对于任何用户提供的内容,都进行相应的输入验证,包括表单内容,URL参数,cookie等。

2. 随机令牌。使用随机令牌可以防止CSRF攻击。在所有需要验证请求的地方,都要使用随机生成的token来验证请求的合法性。

3. 检查Referer头。检查Referer头是检测CSRF攻击的一种有效方法。Referer是一个HTTP头,可以查看请求从哪个页面发起的。

4. Cookie限制。在验证用户的身份时,要限制cookie的范围,只返还口令到合法站点。

5. 登录过期策略。过期策略可以有效地预防CSRF攻击。在合理时间内强制用户重新授权(如重新输入用户名/密码),以保证使用合法授权的用户才能提交请求。

总的来说,预防CSRF攻击的关键是建立合理的安全策略,采取相应的防范措施,避免出现漏洞并及时修补补丁。同时,在使用网站时,要保持警惕,不要点击不明来源和未授权的链接,定期更新操作软件和浏览器等措施。

六、Files Inclusion(文件包含)

原理:

文件包含漏洞指的是应用程序中存在的一种漏洞,允许攻击者将外部文件包含到应用程序执行的其中一个文件中。攻击者通过向应用程序提交一个经过注入的参数,使应用程序加载并执行攻击者的恶意文件,以达到攻击系统、获取敏感信息等目的。

在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,导致意外的文件泄露甚至恶意的代码注入。

危害:

1、读取web配置文件以及敏感的数据

2、web服务器的文件被外界浏览导致信息泄露;

3、与文件上传漏洞组合getshell,将恶意代码执行解析

一般来说,远程文件包含漏洞危害更大

防御:

1.实现输入验证。输入验证是防范文件包含攻击的一个重要措施。开发人员应该在程序中实现基本的输入验证,如限制文件上传大小和类型等。

eg:使用str_replace等方法过滤掉危险字符

2.减少对外部参数的依赖。攻击者利用文件包含漏洞的一个常见方式是向应用程序提交恶意的文件名或路径。因此,开发人员应尽量避免直接使用用户输入的文件名或路径,应该使用可靠的限制或约束方法来处理。

eg:配置open_basedir,防止目录遍历(open_basedir 将php所能打开的文件限制在指定的目录树中)

3.使用绝对路径。避免使用相对路径,而是使用绝对路径来引用代码文件。这样不仅可以避免一些无效操作,而且也可以确保函数调用的准确性。

eg:对上传的文件进行重命名,防止被读取

4.操作系统安全性。应该确保操作系统本身和Web服务器软件本身的安全性,注意内核漏洞修补,限制Web服务器软件访问的资源等。

eg:做好管理员权限划分,做好文件的权限管理,allow_url_include和allow_url_fopen最小权限化

5.应用程序安全性。应该对应用程序代码进行彻底的检测和审核,并且应该及时安装安全补丁和升级程序。

eg:php版本升级,防止%00截断

6.使用特定于语言的安全函数。许多现代编程语言都提供了一些用于文件读取和包含的安全函数。例如,在PHP中,可以使用include_once()和require_once()函数,这些函数是特别设计为避免文件包含漏洞。

总的来说,预防文件包含漏洞需要从输入验证、减少对外部参数的依赖、使用绝对路径、操作系统和应用程序安全性等角度来考虑。需要建立合理的安全策略,尽可能保护系统的安全性和稳定性,确保系统远离文件包含漏洞的影响。

用到的函数:

文件包含是一种常见的编程技术,它允许在一个文件中引入另一个文件的内容。不同的编程语言提供了不同的函数或指令来实现文件包含。下面是几种常见编程语言中用于文件包含的函数或指令:

  1. PHP: include 和 require

    • include 和 require 函数用于将一个文件包含到另一个文件中。
    • include 在包含过程中会发出警告(不会中止脚本的执行),而 require 会发出致命错误(会中止脚本的执行)。
    • 示例: include "filename.php" 或者 require "filename.php"
  2. Python: import

    • import 语句用于将一个 Python 模块引入到当前文件中。
    • 示例: import module_name 或者 from module_name import *
  3. JavaScript: import 和 require

    • 在较新的 JavaScript 版本中,可以使用 import 和 export 关键字来实现文件包含。
    • 在旧的 JavaScript 版本中,一般使用 require 或者其他类似的库来实现文件包含。
    • 示例: import module_name from 'path/module' 或者 const module_name = require('path/module')
  4. Java: import

    • import 语句用于将一个 Java 类或者包引入到当前文件中。
    • 示例: import package_name.ClassName
  5. C and C++: #include

    • C 和 C++ 使用 #include 预处理指令来实现文件包含。
    • 示例: #include "filename.h" 或者 #include <header_filename.h>

七、目录遍历

原理:

目录遍历(路径遍历)是由于web服务器或者web应用程序对用户输入的文件名称的安全性验证不足而导致的一种安全漏洞,使得攻击者通过利用一些特殊字符就可以绕过服务器的安全限制,访问任意的文件(可以使web根目录以外的文件),甚至执行系统命令。

危害:

1、读取的文件可能包括应用程序代码和数据、后端系统的凭据以及敏感的操作系统文件等。

2、在某些情况下,攻击者可能能够写入服务器上的任意文件,从而允许他们修改应用程序数据或行为,并最终完全控制服务器

防御:

以下是一些防范目录遍历漏洞的方法:

  1. 实现文件访问控制。可以使用文件解析器来限制非法访问。对访问请求进行筛选,以确保它们是安全的。使用.htaccess文件或服务器配置文件来限制文件访问权限。

  2. 利用应用程序和API安全。规定应用程序和API的安全策略,例如白名单,以限制用户可以访问的目录和文件。任何额外的数据在输入之前都应该根据类型和语义进行验证和过滤。

  3. 文件校验和验证。使用文件校验和技术来确认文件的完整性。确保受到修改的值必须重新计算哈希值。

  4. 文件名限制。在实现文件功能的时候,可以把文件名换成一个动态的随机字符串或者编码的值,以防过多信息暴露。

  5. 字符过滤。在检查字符串的时候,过滤所有特殊字符和HTML实体字符,以防止注入攻击。

总的来说,预防目录遍历漏洞的关键是保持进行输入验证、实现访问控制、应用程序和API安全性、文件校验和验证、字符过滤等多种措施来降低攻击者的入侵几率。同时需要定期更新系统、软件和组件的漏洞修复补丁,加强系统和设备的安全防护措施,注意数据和资产的备份,确保系统的安全性和稳定性。

八、SSRF

原理:

SSRF(Server-Side Request Forgery)攻击是指攻击者利用漏洞或者误用服务器端 HTTP 请求发送程序,欺骗服务器端执行攻击者指定的请求。SSRF 攻击可以导致攻击者突破本应用系统,发起攻击内网的其他系统。

形成原因:

SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。

危害:

1、端口扫描

2、内网Web 应用指纹识别

3、攻击内网Web 应用

4、读取本地文件

CSRF/SSRF常用函数(可能会造成漏洞的函数):fopen() , fsockopen(), curl_exec()

防御:

  1. 验证用户输入。首先,应该对用于请求 URL 的参数进行验证和过滤。最好采用白名单的方法限制允许的主机和 IP 地址,比如限制协议,仅允许http 或https 协议;限制IP,避免应用被用来获取内网数据,攻击内网;限制端口,限制请求端口为常用端口。

  2. 使用相对路径。另外,如果使用本地相对路径而不是 URL,可以减少 SSRF 攻击的可行性,因为攻击者不能指定 URL。

  3. 使用反向代理。使用反向代理并将外部请求路由至白名单中的主机/端点可以减少 SSRF 攻击风险。 此外,反向代理还可以缓存响应并限制数据传输量。

  4. 过滤输出,过滤返回信息,只要不符合要求的,全部过滤。

  5. 统一错误信息,让攻击无法对内网信息进行判断。

  6. 提高应用程序及数据库的安全性。升级应用程序、数据库和其他组件。应该对软件机密、敏感数据和网络访问的流量进行加密和安全测评,并实施身份验证和授权策略来保障系统的安全。

总的来说,为了预防 SSRF 攻击,需要在应用程序中采用多重的防范措施,例如验证用户输入、使用 local path、使用反向代理等。此外,还需要建立合理的安全策略,在全局范围内加强网络安全防护措施,通过相关的安全技术实现系统的安全性和稳定性。

eg:以php为例构造数组,将黑名单列表写入,如 file:// , dict:// ,gopher:// 检测到了使用str_replace()替换协议中的字符为空或替换成其它字符 也可以使用preg_replace()对特殊字符 “:” 或“/”进行过滤

九、敏感信息泄露

原理:

敏感信息泄露是指一些敏感信息(如用户、客户、员工或组织机密)未经athorization或其他足够的身份验证就被公开或者泄露给了非授权人员。由此引发的潜在危害包括用户隐私受损、组织声誉受损、法规合规及罚款问题等。

敏感数据包括但不限于:口令、密钥、证书、会话标识、License、隐私数据(如短消息的内容)、授权凭据、个人数据(如姓名、住址、电话等)等。

危害:

  1. 个人隐私泄露。例如身份证信息、财务信息、社交账号、婚姻状况、工作经历等个人信息被泄露,可能会对个人带来极大的麻烦和损失。

  2. 法律责任。敏感信息泄露违反了用户的个人隐私,可能导致用户的个人资料被其他人盗用,涉嫌侵犯用户权益,用户可以通过法律途径维护自己的合法权益。

  3. 企业信誉受损。当企业的客户数据遭受泄露,将直接影响客户对公司的信任度,使公司的声誉受损,可能会导致客户的流失和市场份额的下滑。

  4. 经济损失。敏感信息泄露可能导致公司的核心业务机密泄露,从而使投资和研发成果流失,给企业带来重大的经济损失。

  5. 法规合规问题。敏感信息泄露可能涉及到个人隐私和机密性数据的考虑,会导致公司的法规合规问题,引发执法和罚款问题。

总之,敏感信息泄露所带来的危害是非常严重的,因此需要企业从技术、管理、人员培训等多方面进行防范和加强控制,保护用户的隐私和机密数据,以保证企业的长远发展。

防御:

以下是一些防范敏感信息泄露的方法:

  1. 数据加密。将敏感信息进行加密存储,对于需要进行传输的敏感信息,也需要采用加密传输。

  2. 安全访问控制。数据的有效性需要在进行身份验证后才能访问,防止未授权的访问。可使用许可证/角色/策略等访问控制方法。

  3. 记录和跟踪。在系统中记录访问数据,并且需要实时跟踪数据访问情况,特别是在应用程序和其他系统中,记录敏感数据操作的历史记录。

  4. 强化网络和业务安全。对网络和业务系统进行定期的安全扫描和测试,确保敏感信息只可在安全环境下处理。

  5. 提高员工安全意识。员工训练和安全教育是防止敏感信息泄露的有力手段,员工需要了解不合规操作的危害,并加强社会工程学的意识。

  6. 及时更新安全补丁。及时更新软件和系统的安全补丁来缓解安全漏洞的风险。

总的来说,预防敏感信息泄露需要建立合理的安全策略,从数据加密、安全访问控制、记录和跟踪等方面措施来有效保护敏感数据的安全。同时,还需要加强网络和业务安全管理工作,提高员工安全意识等,综合应对敏感信息泄露对系统和组织的潜在影响和危害。

十、反序列化

原理:

反序列化是将一个序列化的对象或者数据流还原成原来的对象或者数据流的过程,它是一种常见的数据编码和传输的方式。反序列化攻击则是指攻击者在反序列化时利用漏洞或者恶意代码来执行非法操作,例如执行远程代码、读取或者修改敏感数据等。

危害:

  1. 远程代码执行。攻击者可以通过构造恶意数据,在系统中执行远程代码,并可能窃取敏感数据以及实现对整个系统的控制。

  2. 数据泄露。攻击者可能利用反序列化漏洞,窃取系统中的敏感数据和机密信息,对用户、组织和企业都会带来非常大的损失。

  3. 系统崩溃。攻击者可能通过构造特定的串,尝试引发系统崩溃,从而导致业务受阻、系统瘫痪等严重后果。

  4. 注入攻击。攻击者可能在系统中注入恶意代码,从而导致数据被篡改或者删除。

  5. 网络安全问题。反序列化攻击可能是远程攻击,攻击者可以借助漏洞进行入侵,对网络的安全带来严重威胁。

防御:

以下是一些防范反序列化攻击的方法:

1. 序列化和反序列化对象的限制。通过实现自定义的序列化和反序列化方法,可以限制特定的对象序列化或反序列化的能力。制定规则,指定哪些对象可以序列化,哪些对象不应该序列化。

2. 对输入进行校验和过滤。对于所有的输入数据都需要校验和过滤,确保只有被验证过的数据才会传递给反序列化方法。将使用白名单来明确允许的内容类型,并过滤掉所有非必须的内容类型。

3. 反序列化过程中应用黑名单。黑名单用于列出不能反序列化的类。它应该和序列化类一起使用以识别该类是否应该被序列化。

4. 使用安全的反序列化库。许多反序列化漏洞都与特定的反序列化库有关,并与细节的实现和设置有关。

5. 升级和更新系统,软件和组件。定期更新系统,软件和组件,以确保所有的漏洞都能得到及时修复和更新。及时更新补丁可以大大减少反序列化漏洞的利用。

总的来说,预防反序列化攻击需要建立合理的安全策略,从对象限制、输入过滤、黑名单,安全反序列化库等多个方面措施,来保护应用程序和系统的安全性和稳定性。同时还需定期更新系统和软件的补丁,加强安全管理和培训,以提高员工的安全意识和反应能力。

十一、XXE(XML注入攻击)

原理:

XXE(XML External Entity)攻击也被称为XML外部实体注入攻击,是一种针对XML解析器的攻击,攻击者利用XML解析器的漏洞,当服务端未经管控直接解析了来自客户端的XML数据,就会造成自定义的XML 外部实体解析,从而造成文件读取、命令执行、内网扫描等危害。

危害:

1. 数据泄露。攻击者可以通过XXE漏洞读取XML文件中的敏感数据,例如密码、个人身份证信息、信用卡信息等,导致用户隐私被泄露。

2. 拒绝服务攻击。攻击者可以利用XXE漏洞发送恶意请求,导致XML处理器陷入死循环或占用系统资源,从而使服务器无法正常工作,或导致系统瘫痪。

3. 远程代码执行。攻击者可以通过XXE漏洞在已授权的服务器上执行远程代码,导致服务器被完全控制,从而对用户和企业系统造成威胁。

4. 注入攻击。攻击者可以通过XXE漏洞向XML文档中注入恶意指令,攻击系统的漏洞,导致数据被篡改或破坏系统的完整性。

5. 网络安全问题。XXE攻击通常是远程攻击,可以通过开放的接口和端口进行访问,攻击者能够轻易地切入系统。

防御:

下面是一些防范XXE攻击的方法:

1.禁止使用外部实体。禁止使用doctype声明,或在doctype声明中使用entities,以便防止恶意实体进入XML文档中。

2.验证用户输入内容,对 SYSTEM、PUBLIC、ENTITY等关键字进行过滤。

3.使用防火墙:使用防火墙来防止外部恶意请求袭击,保护系统安全的安全边界。或者使用成熟的 WAF 之类的安全工具配置 XXE 输入规则。

4.使用安全解析器:使用安全的解析器来替代不安全的XML库,尽可能减少漏洞的存在和范围。

十二、文件上传

原理:

在文件上传处,服务端未对文件的格式和内容进行严格的验证,导致恶意文件上传(如 webshell、可执行文件、压缩炸弹等),从而造成服务端被远控、命令执行、资源耗尽等风险。

危害:

  1. 恶意文件上传:攻击者可以通过恶意文件上传来上传恶意软件、病毒、木马等有害文件到服务器,从而危害服务器和其他用户的设备和数据。

  2. 文件覆盖:攻击者可能会通过文件上传功能覆盖服务器上的现有文件,导致数据丢失或破坏。

  3. 文件执行:如果服务器上的文件上传功能没有适当的检查和限制,攻击者可以上传包含恶意代码的文件,并通过执行这些文件获得对服务器的远程访问权限。(一般情况下需要配合文件执行使用,常见的是图片马)

  4. 安全漏洞利用:文件上传功能如果存在安全漏洞,攻击者可以利用这些漏洞绕过访问控制、执行未授权的操作,甚至获得服务器或应用程序的完全控制权限。

  5. 泄露敏感信息:如果上传的文件包含敏感信息(如个人身份信息、银行账号等),攻击者可以从服务器获取这些文件并进行非法使用或泄露。

文件上传攻击的流量特征

1.正常文件上传的特征。如 Content-Type、upload 等,大多数情况会是 POST 请求;
2.特殊的文件后缀。如脚本语言后缀(.php、.js、.sh、.py等)、动态网页后缀(.asp、.jsp等)、可执行文件后缀(.exe等)、代码包后缀(.jar、.war等)、其他特殊后缀(.php.123、py.png等疑似利用解析漏洞的后缀)
3.Content-Type 与文件后缀不匹配。这是一种比较常见的文件类型绕过手段。
4.特殊符号与编码。如\、00、\0等截断符号
5.Data 的大小偏大。尤其是上传文件为压缩文件时。

防御:

  1. 文件类型验证:对上传的文件进行严格的文件类型验证。限制仅允许上传特定的文件类型,通过白名单机制过滤无效文件类型。避免接受脚本文件、可执行文件或其他潜在的危险文件类型。

  2. 文件内容检查:在接收和保存上传文件之前,对文件内容进行检查。通过对文件进行过滤、解析和验证,确保文件内容符合预期和合法。例如,可以验证图像文件的文件头、文件大小,或使用安全的图像处理库对图像进行重新编码和压缩。

  3. 文件大小控制:设置合理的文件大小限制,限制允许上传的文件大小。这可以防止恶意上传过大的文件,占用服务器资源或导致拒绝服务攻击。

  4. 文件名安全处理:对上传文件的文件名进行安全处理,避免包含特殊字符、路径信息或恶意代码。最好对文件名进行重命名,使用安全的命名规则,避免可能的路径遍历攻击。

  5. 存储位置安全:将上传的文件存储在安全的位置,避免直接存储在可以被公开访问的目录下。最好将上传文件存储在非网站根目录或受限制的目录中,并设置适当的权限和访问控制策略,以限制对上传文件的直接访问。

  6. 输入验证和过滤:对用户输入进行严格的验证和过滤,确保上传文件的元数据和其他相关信息符合预期。避免接受恶意构造的输入,例如包含恶意脚本代码的文件名或其他注入攻击。

  7. 安全日志记录:记录和审计文件上传操作,包括上传的文件名、大小、上传者等重要信息。这可以用来追溯和检测上传恶意文件的行为。

  8. 定期更新和漏洞扫描:及时更新应用程序和相关组件,以修复已知的安全漏洞。定期进行漏洞扫描和安全评估,及时发现和修复潜在的文件上传漏洞。

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

故事讲予风听

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值