网络安全常见漏洞类型总结

1、弱口令

原因: 与个人习惯和安全意识相关,为了避免忘记密码,使用一个非常容易记住的密码,或者是直接采用系统的默认密码等。
危害: 通过弱口令,攻击者可以进入后台修改资料,进入金融系统盗取钱财,进入OA系统可以获取企业内部资料,进入监控系统可以进行实时监控等。
防御:
设置密码通常遵循以下原则:
(1)不使用空口令或系统缺省的口令;
(2)口令长度不小于8 个字符;
(3)口令不应该为连续的某个字符或重复某些字符的组合。
(4)口令应该为以下四类字符的组合:大写字母(A-Z)、小写字母(a-z)、数字(0-9)和特殊字符。每类字符至少包含一个。如果某类字符只包含一个,那么该字符不应为首字符或尾字符。
(5)口令中不应包含特殊内容:如本人、父母、子女和配偶的姓名和出生日期、纪念日期、登录名、E-mail 地址等等与本人有关的信息,以及字典中的单词。
(6)口令不应该为用数字或符号代替某些字母的单词。
(7)口令应该易记且可以快速输入,防止他人从你身后看到你的输入。
(8)至少90天内更换一次口令,防止未被发现的入侵者继续使用该口令。

2、SQL注入

原因: 当Web应用向后台数据库传递SQL语句进行数据库操作时,如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或修改数据库中的数据。SQL注入的两个关键点:1、用户能控制输入的内容;2、Web应用把用户输入的内容带入到数据库中执行。
危害: 盗取网站的敏感信息、绕过网站后台认证、借助SQL注入获取系统权限。
防御:
(1)采用sql语句预编译和绑定变量 #{name};
(2)使用正则表达式过滤传入的参数;
(3)过滤字符串,如insert、select、update、and、or等。

3、文件上传

原理: 在文件上传的功能处,若服务端未对上传的文件进行严格验证和过滤,导致攻击者上传恶意的脚本文件时,就有可能获取执行服务端命令的能力,称为文件上传漏洞。
原因: 服务器的错误配置、开源编码器漏洞、本地上传上限制不严格被绕过、服务器端过滤不严格被绕过。
危害: 上传恶意文件、getshell、控制服务器。
防御: 白名单判断文件后缀是否合法、文件上传的目录设置为不可执行、判断文件类型、使用随机数改写文件名和文件路径、单独设置文件服务器的域名、使用安全设备防御。

4、XSS(跨站脚本攻击)

取名: XSS(Cross Site Scripting):跨站脚本攻击,为了不和层叠样式表(Cascading Style Sheets)的缩写CSS混合,所以改名为XSS。
XSS原理: 攻击者在网页中嵌入客户端脚本(通常是JavaScript恶意脚本),当用户使用浏览器加载被嵌入恶意代码的网页时,恶意脚本代码就会在用户的浏览器执行,造成跨站脚本的攻击。
危害: 盗取Cookie、网络钓鱼、植马挖矿、刷流量、劫持后台、篡改页面、内网扫描、制造蠕虫等。
防御: 对用户的输入进行合理验证、对特殊字符(如 、’、”等)验证。

5、CSRF(跨站请求伪造)

原理: CSRF(Cross-Site Request Forgery),跨站请求伪造。攻击者利用目标用户的身份,执行某些非法的操作。跨站点的请求,请求的来源可以是非本站;请求是伪造的,请求的发出不是用户的本意。
危害: 篡改目标站点上的用户数据、盗取用户隐私数据、作为其他攻击的辅助攻击手法、传播 CSRF 蠕虫。
防御: 检查HTTP Referer是否是同域、限制Session Cookie的生命周期,减少被攻击的概率、使用验证码、使用一次性token。

6、SSRF(服务器端请求伪造)

原理: SSRF(Server-Side Request Forgery):服务器端请求伪造。该漏洞通常由攻击者构造的请求传递给服务端,服务器端对传回的请求未作特殊处理直接执行而造成的。
危害: 扫描内网(主机、端口)、向内部任意主机的任意端口发送精心构造的payload、攻击内网的Web应用、读取任意文件、拒绝服务攻击。
防御:
(1)统一错误信息,避免用户根据错误信息来判断远程服务器的端口状态;
(2)限制请求的端口为http的常用端口,比如:80、443、8080等;
(3)禁用不需要的协议,仅允许http和https;
(4)根据请求需求,可以将特定域名加入白名单,拒绝白名单之外的请求;
(5)后台代码对请求来源进行验证。

7、XXE(XML外部实体注入)

原理: XXE(XML External Entity Injection),即XML外部实体注入。XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致用户可以控制外部的加载文件,造成XXE漏洞。
危害: 任意文件读取、内网端口探测、拒绝服务攻击、钓鱼。
防御:
(1)使用开发语言提供的禁用外部实体的方法;
(2)过滤用户提交的XML数据,过滤关键词:<!DOCTYPE、<!ENTITY SYSTEM、PUBLIC。

8、RCE(远程命令/代码执行)

RCE(Remot Command/Code Execute),远程命令/代码执行。
远程命令执行: 用户可以控制系统命令执行函数的参数,也称命令注入;
远程代码执行: 用户输入的参数可以作为代码执行,也称代码注入;
命令执行可以看作是一种特殊的代码执行,代码执行相对会更加灵活。
原理: 应用程序中有时会调用一些系统命令函数,比如php中使用system、exec、shell_exec等函数可以执行系统命令,当攻击者可以控制这些函数中的参数时,就可以将恶意命令拼接到正常命令中,从而造成命令执行攻击。
危害: 命令执行漏洞,属于高危漏洞之一,也可以算是一种特殊的代码执行。
原因: 用户可以控制输入的内容、用户输入的内容被当作命令执行。
防御方式:
(1)尽量不要使用命令执行函数;
(2)客户端提交的变量在进入执行命令函数方法之前,一定要做好过滤,对敏感字符进行转义;
(3)在使用动态函数之前,确保使用的函数是指定的函数之一;
(4)对PHP语言来说,不能完全控制的危险函数最好不要使用。

9、反序列化漏洞

原因: 程序没有对用户输入的反序列化字符串进行检测,导致反序列化过程可以被恶意控制,进而造成代码执行、getshell等一系列安全问题。
危害:
(1)不安全的反序列化,主要造成的危害是远程代码执行;
(2)如果无法远程代码执行,也可能导致权限提升、任意文件读取、拒绝服务攻击等。
防御方式:
(1)应该尽量避免用户输入反序列化的参数;
(2)如果确实需要对不受信任的数据源进行反序列化,需要确保数据未被篡改,比如使用数字签名来检查数据的完整性;
(3)严格控制反序列化相关函数的参数,坚持用户所输入的信息都是不可靠的原则;
(4)对于反序列化后的变量内容进行检查,以确定内容没有被污染;
(5)做好代码审计相关工作,提高开发人员的安全意识。

10、组件未更新漏洞

原因: 组件未更新漏洞是指在应用程序或系统中使用了已知存在安全漏洞的第三方组件或库。攻击者可能利用组件的这些漏洞来对系统进行攻击与入侵。
修复方式:
(1)检查和更新:记录并评估组件并及时替换已知漏洞组件。
(2)监视漏洞:定期滚动使用组件,维护适当的升级计划,及时发现漏洞和补丁。
(3)安装新版本:下载和安装第三方组件的最新版本,通常这些版本都修复了之前版本的漏洞。
(4)代码审计:通过对组件源代码的分析和审核来检查是否存在其他漏洞,并为必要更新提供数据支持。
(5)网络隔离:可以使用网络隔离技术或虚拟容器来减少外部组件对应用程序或系统的影响。

11、未授权访问漏洞

**原因:**应用程序没有正确实施权限控制,过度宽松的文件和目录访问控制,或者允许攻击者访问并执行不应该被许可的敏感操作。
**修复方式:**修改应用程序代码,增加身份认证和权限控制机制、及时更改默认密码等。