草庐IT

常见十大漏洞总结(原理、危害、防御)

Mr_RyanXu 2023-03-28 原文

弱口令

产生原因

与个人习惯和安全意识相关,为了避免忘记密码,使用一个非常容易记住 的密码,或者是直接采用系统的默认密码等。

危害

通过弱口令,攻击者可以进入后台修改资料,进入金融系统盗取钱财,进入OA系统可以获取企业内部资料,进入监控系统可以进行实时监控等等。

防御

设置密码通常遵循以下原则:

(1)不使用空口令或系统缺省的口令,为典型的弱口令;

(2)口令长度不小于8 个字符;

(3)口令不应该为连续的某个字符(例如:AAAAAAAA)或重复某些字符的组合(例如:tzf.tzf.)。

(4)口令应该为以下四类字符的组合:大写字母(A-Z)、小写字母(a-z)、数字(0-9)和特殊字符。

每类字符至少包含一个。如果某类字符只 包含一个,那么该字符不应为首字符或尾字符。

(5)口令中不应包含特殊内容;

如本人、父母、子女和配偶的姓名和出生日期、纪念日期、登录名、E-mail 地址等等与本人有关 的信息,以及字典中的单词。

(6)口令不应该为用数字或符号代替某些字母的单词。

(7)口令应该易记且可以快速输入,防止他人从你身后看到你的输入。

(8)至少90 天内更换一次口令,防止未被发现的入侵者继续使用该口令。

SQL注入

产生原因

当Web应用向后台数据库传递SQL语句进行数据库操作时。如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或 修改数据库中的数据。

本质

把用户输入的数据当做代码来执行,违背了 “数据与代码分离”的原则。

SQL注入的两个关键点:

1、用户能控制输入的内容;

2、Web应用把用户输入的内容带入到数据库中执行;

危害

盗取网站的敏感信息

绕过网站后台认证

后台登陆语句:

SELECT*FROMadminWHEREUsername='user'andPassword='pass'

万能密码:‘or‘1’=‘1’#

借助SQL注入漏洞提权获取系统权限

读取文件信

防御

1、采用sql语句预编译和绑定变量  #{name}

其原因就是:采用了PrepareStatement,就会将SQL语句:“select id,name from user where id=?”预先编译好,也就是SQL引擎会预先进行语法分析,产生语法树,生成执行计划,也就是说,后面你输入的参数,无论你输入的是什么,都不会影响该SQL语句的语法结构了。因为语法分析已经完成了,而语法分析主要是分析SQL命令,比如:select、from、where、and、or、order by等等。

所以即使你后面输入了这些SQL命令,也不会被当成SQL命令来执行了,因为这些SQL命令的执行,必须先通过语法分析,生成执行计划,既然语法分析已经完成,已经预编译过了,那么后面输入的参数,是绝对不可能作为SQL命令来执行的,只会被当成字符串字面值参数。

2、使用正则表达式过滤传入的参数

3、过滤字符串,如insert、select、update、and、or等

文件包含

产生原因

文件包含:开发人员将可重复使用的内容写到单个文件中,使用时直接调用此文件

文件包含漏洞:开发人员希望代码更加灵活,有时会将包含的文件设置为变量,用来动态调用,由于这种灵活性,可能导致攻击者调用恶意文件,造成文件包含漏洞.

危害

敏感信息泄露

获取webshell

任意命令执行

相关函数

文件包含相关函数

常见绕过技巧

• URL编码

• 特殊字符

• %00截断

• 长目录截断

• 伪协议

伪协议

防御

• 设置白名单

• 过滤危险字符

• 关闭危险配置

• 限制文件包含的路径,比如只能包含某个目录内的

• 严格判断包含中的的参数是否外部可控,尽量不要使用动态包含

文件上传

原理

在文件上传的功能处,若服务端未对上传的文件进行严格验证和过滤,导致攻击者上传恶意的脚本文件时,就有可能获取执行服务端命令的能力,称为文件上传漏洞

文件上传

成因

• 服务器的错误配置

• 开源编码器漏洞

• 本地上传上限制不严格被绕过

• 服务器端过滤不严格被绕过

危害

• 上传恶意文件

• getshell

• 控制服务器

绕过方式

绕过方式

防御

• 白名单判断文件后缀是否合法

• 文件上传的目录设置为不可执行

• 判断文件类型

• 使用随机数改写文件名和文件路径

• 单独设置文件服务器的域名

• 使用安全设备防御

XSS(跨站脚本攻击)

原理

XSS(Cross Site Scripting):跨站脚本攻击,为了不和层叠样式表(Cascading Style Sheets)的缩写CSS混合,所以改名为XSS

XSS原理:攻击者在网页中嵌入客户端脚本(通常是JavaScript的恶意脚本),当用户使用浏览器加载被嵌入恶意代码的网页时,恶意脚本代码就会在用户的浏览器执行,造成跨站脚本的攻击

危害

• 盗取Cookie

• 网络钓鱼

• 植马挖矿

• 刷流量

• 劫持后台

• 篡改页面

• 内网扫描

• 制造蠕虫等

防御

• 对用户的输入进行合理验证

• 对特殊字符(如 <、>、 ’ 、 ”等)以及<script>、javascript 等字符进行过滤

• 根据数据位置设置恰当的输出编码

• 根据数据将要置于 HTML 上下文中的不同位置(HTML 标签、HTML 属性、JavaScript 脚本、CSS、URL),对所有不可信数据进行恰当的输出编码;

• 设置HttpOnly属性

• 避免攻击者利用XSS漏洞进行Cookie劫持攻击

CSRF(跨站请求伪造 )

原理

CSRF(Cross-Site Request Forgery),中文名称:跨站请求伪造

原理:攻击者利用目标用户的身份,执行某些非法的操作

跨站点的请求:请求的来源可以是非本站

请求是伪造的:请求的发出不是用户的本意

危害

• 篡改目标站点上的用户数据

• 盗取用户隐私数据

• 作为其他攻击的辅助攻击手法

• 传播 CSRF 蠕虫

防御

1、检查HTTP Referer是否是同域

2、限制Session Cookie的生命周期,减少被攻击的概率

3、使用验证码

4、使用一次性token

SSRF(服务器端请求伪造)

原理

SSRF(Server-Side Request Forgery):服务器端请求伪造,该漏洞通常由攻击者构造的请求传递给服务端,服务器端对传回的请求未作特殊处理直接执行而造成的。

SSRF

危害

• 扫描内网(主机、端口)

• 向内部任意主机的任意端口发送精心构造的payload

• 攻击内网的Web应用

• 读取任意文件

• 拒绝服务攻击

防御

• 统一错误信息,避免用户根据错误信息来判断远程服务器的端口状态

• 限制请求的端口为http的常用端口,比如:80、443、8080等

• 禁用不需要的协议,仅允许http和https

• 根据请求需求,可以将特定域名加入白名单,拒绝白名单之外的请求

• 后台代码对请求来源进行验证

XXE(XML外部实体注入)

原理

XXE漏洞全称为 XML External Entity Injection,即XML外部实体注入

XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载, 导致用户可以控制外部的加载文件,造成XXE漏洞。

危害

• 任意文件读取

• 内网端口探测

• 拒绝服务攻击

• 钓鱼

防御

一、使用开发语言提供的禁用外部实体的方法

1.PHP:

libxml_disable_entity_loader(true);

2.JAVA:

DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance(); dbf.setExpandEntityReferences(false);

3.Python:

from lxml import etree xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

二、过滤用户提交的XML数据

过滤关键词:

<!DOCTYPE、<!ENTITY SYSTEM、PUBLIC

RCE

RCE(Remot Command/Code Execute),远程命令/代码执行

远程命令执行:用户可以控制系统命令执行函数的参数,也称命令注入

远程代码执行:用户输入的参数可以作为代码执行,也称代码注入

命令执行可以看作是一种特殊的代码执行,代码执行相对会更加灵活

远程代码执行漏洞

原理

代码执行(注入)漏洞:在web方面是指应用程序过滤不严,用户可以通过请求将代码注入到应用中由服务器执行,导致一系列不可控的后果。

危害--PHP为例

• 执行PHP代码

     获取服务器内容或相关信息;

• 让网站写shell

     利用执行PHP代码功能,往服务器中写入Shell脚本

• 控制服务器

     利用Shell脚本,上传大马,甚至控制服务器

• 直接获取shell

• 获取当前文件的绝对路径

    print__FILE__

• 读取服务器文件

    file_get_contents('C:\Windows\System32\drivers\etc\hosts')

• 在服务器写文件

    file_put_contents(文件名,内容)

漏洞查找方法

• 代码审计

     最主要的方式,借助代码审计工具,非常方便的审计出此类漏洞

• 已知的CMS漏洞

     已知的CMS,有很多每年都会爆出来很多此类的漏洞

• 页面传参查找

     针对页面有传参的地方,重点关注传入恶意代码尝试,概率相对较

防御方式(PHP)

• 尽量不要使用eval、assert等危险函数

• 如果使用危险函数的话,一定要对输入内容进行严格的过滤

• preg_replace 放弃使用/e修饰符

• 在php配置文件中禁用危险函数:disable_functions

远程命令执行漏洞

原理

应用程序中有时会调用一些系统命令函数,比如php中使用system、exec、shell_exec等 函数可以执行系统命令,当攻击者可以控制这些函数中的参数时,就可以将恶意命令拼接 到正常命令中,从而造成命令执行攻击。

命令执行漏洞,属于高危漏洞之一,也可以算是一种特殊的代码执行

命令注入漏洞产生原因有两点

1、用户可以控制输入的内容

2、用户输入的内容被当作命令执行

防御方式

尽量不要使用命令执行函数

客户端提交的变量在进入执行命令函数方法之前,一定要做好过 滤,对敏感字符进行转义

在使用动态函数之前,确保使用的函数是指定的函数之一

对PHP语言来说,不能完全控制的危险函数最好不要使用

反序列化漏洞

原理

原因是程序没有对用户输入的反序列化字符串进行检测,导致反序列化过程可以被恶意控制,进而造成代码执行、getshell等一系列安全问题。

反序列化

危害

• 不安全的反序列化,主要造成的危害是远程代码执行

• 如果无法远程代码执行,也可能导致权限提升、任意文件读取、拒绝服务攻击等

防御方式

• 应该尽量避免用户输入反序列化的参数

• 如果确实需要对不受信任的数据源进行反序列化,需要确保数据未被篡改,比如使用数字签名来检查数据的完整性

• 严格控制反序列化相关函数的参数,坚持用户所输入的信息都是不可靠的原则

• 对于反序列化后的变量内容进行检查,以确定内容没有被污染

• 做好代码审计相关工作,提高开发人员的安全意识

有关常见十大漏洞总结(原理、危害、防御)的更多相关文章

  1. Tomcat AJP 文件包含漏洞(CVE-2020-1938) - 2

    目录1.漏洞简介2、AJP13协议介绍Tomcat主要有两大功能:3.Tomcat远程文件包含漏洞分析4.漏洞复现 5、漏洞分析6.RCE实现的原理1.漏洞简介2020年2月20日,公开CNVD的漏洞公告中发现ApacheTomcat文件包含漏洞(CVE-2020-1938)。ApacheTomcat是Apache开源组织开发的用于处理HTTP服务的项目。ApacheTomcat服务器中被发现存在文件包含漏洞,攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件。该漏洞是一个单独的文件包含漏洞,依赖于Tomcat的AJP(定向包协议)。AJP自身存在一定缺陷,导致存在可控

  2. SPI接收数据异常问题总结 - 2

    SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手

  3. git使用常见问题(提交代码,合并冲突) - 2

    文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g

  4. ruby - 将对象设置为 nil 是否很常见? - 2

    我正在构建一个应用程序,想知道是否将未使用的对象设置为nil是生产级编码中的常见做法。我知道这只是垃圾收集器的提示,并不总是处理对象。 最佳答案 根据这个thread如果您使用完一个成员对象,将其设置为nil将引发被引用对象被垃圾回收。如果它是局部变量,方法exit将做同样的事情。也就是说,如果您要求将成员显式设置为nil,我会质疑您的设计。 关于ruby-将对象设置为nil是否很常见?,我们在StackOverflow上找到一个类似的问题: https://

  5. ruby - 变量赋值后的 if 语句 - 有多常见? - 2

    我最近与一位同事讨论了以下Ruby语法:value=ifa==0"foo"elsifa>42"bar"else"fizz"end我个人并没有看到太多这种逻辑,但我的同事指出,这实际上是一种相当普遍的Rubyism。我试着用谷歌搜索这个主题,但没有找到任何文章、页面或SO问题来讨论它,这让我相信这可能是一种非常实际的技术。然而,另一位同事发现语法令人困惑,而是将上面的逻辑写成这样:ifa==0value="foo"elsifa>42value="bar"elsevalue="fizz"end缺点是value=的重复声明和隐式elsenil的丢失,如果我们想使用它的话。这也感觉它与Ruby

  6. 什么是0day漏洞?如何预防0day攻击? - 2

    什么是0day漏洞?0day漏洞,是指已经被发现,但是还未被公开,同时官方还没有相关补丁的漏洞;通俗的讲,就是除了黑客,没人知道他的存在,其往往具有很大的突发性、破坏性、致命性。0day漏洞之所以称为0day,正是因为其补丁永远晚于攻击。所以攻击者利用0day漏洞攻击的成功率极高,往往可以达到目的并全身而退,而防守方却一无所知,只有在漏洞公布之后,才后知后觉,却为时已晚。“后知后觉、反应迟钝”就是当前安全防护面对0day攻击的真实写照!为了方便大家理解,中科三方为大家梳理当前安全防护模式下,一个漏洞从发现到解决的三个时间节点:T0:此时漏洞即0day漏洞,是已经被发现,还未被公开,官方还没有相

  7. 常见网络安全产品汇总(私信发送思维导图) - 2

    安全产品安全网关类防火墙Firewall防火墙防火墙主要用于边界安全防护的权限控制和安全域的划分。防火墙•信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过。防火墙是一个由软件和硬件设备组合而成,在内外网之间、专网与公网之间的界面上构成的保护屏障。下一代防火墙•下一代防火墙,NextGenerationFirewall,简称NGFirewall,是一款可以全面应对应用层威胁的高性能防火墙,提供网络层应用层一体化安全防护。生产厂家•联想网御、CheckPoint、深信服、网康、天融信、华为、H3C等防火墙部署部署于内、外网编辑额,用于权限访问控制和安全域划分。UTM统一威胁管理(Un

  8. Simulink方法总结和避坑指南(一)——Simulink入门与基本调试方法 - 2

    文章目录一、项目场景二、基本模块原理与调试方法分析——信源部分:三、信号处理部分和显示部分:四、基本的通信链路搭建:四、特殊模块:interpretedMATLABfunction:五、总结和坑点提醒一、项目场景  最近一个任务是使用simulink搭建一个MIMO串扰消除的链路,并用实际收到的数据进行测试,在搭建的过程中也遇到了不少的问题(当然这比vivado里面的debug好不知道多少倍)。准备趁着这个机会,先以一个很基本的通信链路对simulink基础和相关的debug方法进行总结。  在本篇中,主要记录simulink的基本原理和基本的SISO通信传输链路(QPSK方式),计划在下篇记

  9. 关于Qt程序打包后运行库依赖的常见问题分析及解决方法 - 2

    目录一.大致如下常见问题:(1)找不到程序所依赖的Qt库version`Qt_5'notfound(requiredby(2)CouldnotLoadtheQtplatformplugin"xcb"in""eventhoughitwasfound(3)打包到在不同的linux系统下,或者打包到高版本的相同系统下,运行程序时,直接提示段错误即segmentationfault,或者Illegalinstruction(coredumped)非法指令(4)ldd应用程序或者库,查看运行所依赖的库时,直接报段错误二.问题逐个分析,得出解决方法:(1)找不到程序所依赖的Qt库version`Qt_5'

  10. ruby - 如何在 Ruby 中进行防御性编程? - 2

    这是问题的一个完美示例:ClassifiergembreaksRails.**原始问题:**作为一名安全专家,让我担心的一件事是Ruby没有与Java的包隐私平行的东西。也就是说,这不是有效的Ruby:publicmoduleFoopublicmoduleBar#factorymethodfornewBarimplementationsdefself.new(...)SimpleBarImplementation.new(...)enddefbazraiseNotImplementedError.new('ImplementingClassesMUSTredefine#baz')end

随机推荐