前言

转载自:常见的Web应用的漏洞总结(原理、危害、防御)

一、 SQL注入(SQL Inject)[OWASP TOP1 2017]:
1.原理:
SQL注入就是把SQL命令插入到Web表单然后提交到所在页面请求(查询字符串),从而达到欺骗服务器执行恶意的SQL命令。
它是利用现在已有的应用程序,将SQL语句插入到数据库中执行,执行一些并非按照设计者意图的SQL语句。
2.原因:
根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。基于此,SQL注入的产生原因通常表现在以下几方面:①不当的类型处理;②不安全的数据库配置;③不合理的查询集处理;④不当的错误处理;⑤转义字符处理不合适;⑥多个提交处理不当。
3.危害:
数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。
网页篡改:通过操作数据库对特定网页进行篡改。
网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。
数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。
服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。
破坏硬盘数据,瘫痪全系统。
4.防御:
(1)严格的数据类型
(2)字符转义
(3)使用预编译语句
(4)存储过程

二、 XSS(Cross-site Script)[OWASP TOP7 2017]
原理:
攻击者往Web页面里插入恶意html标签或者javascript代码。
分别是反射型XSS、持久型XSS和DOM XSS
危害:
(1)网络钓鱼,盗取各类用户的账号
(2)窃取用户Cookie,获取用户隐私,或者利用用户身份进一步执行操作
(3)劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账、强制发表日志等
(4)强制弹出广告页面,刷流量等
(5)进行恶意操作,例如任意篡改页面信息,删除文章等,传播跨站脚本蠕虫,网页挂等
(6)进行基于大量的客户端攻击,如DDOS攻击
(7)结合其它漏洞,如CSRF漏洞。
3.防御:
(1)代码里对用户输入的地方和变量都需要仔细检查长度和对”<”,”>”,”;”,”’”等字符做过滤;其次任何内容写到页面之前都必须加以encode,避免不小心把html tag 弄出来。这一个层面做好,至少可以堵住超过一半的XSS 攻击。
(2)避免直接在cookie 中泄露用户隐私,例如email、密码等等。
(3)通过使cookie 和系统ip 绑定来降低cookie 泄露后的危险。这样攻击者得到的cookie 没有实际价值,不可能拿来重放。
(4)尽量采用POST 而非GET 提交表单
三、 上传漏洞
原理
文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器,服务器未经任何检验或过滤,从而造成文件的执行。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。
危害
1)上传文件是Web脚本语言,服务器的Web容器解释并执行了用户上传的脚本,导致代码执行。
2)上传文件是Flash的策略文件crossdomain.xml,黑客用以控制Flash在该域下的行为(其他通过类似方式控制策略文件的情况类似);
3)上传文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行。
4)上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。
防御:
(1)文件扩展名服务端白名单校验。
(2)文件内容服务端校验。
(3)上传文件重命名。
(4)隐藏上传文件路径。
(5)文件上传的目录设置为不可执行
(6)单独设置文件服务器的域名
以上几点,可以防御绝大多数上传漏洞,但是需要跟服务器容器结合起来。如果解析漏洞依然存在,那么没有绝对的安全。
四、 文件解析漏洞
1.IIS 6.0解析利用方法有两种
(1)目录解析:/xx.asp/xx.jpg
(2)文件解析:wooyun.asp;.jpg
第一种,在网站下建立文件夹的名字为 .asp、.asa 的文件夹,其目录内的任何扩展名的文件都被IIS当作asp文件来解析并执行。
第二种,在IIS6.0下,分号后面的不被解析,也就是说wooyun.asp;.jpg会被服务器看成是wooyun.asp
还有IIS6.0 默认的可执行文件除了asp还包含这三种.asa、.cer、.cdx
2.Apache解析漏洞后缀名解析漏洞
Apache 是从右到左开始判断解析,如果为不可识别解析,就再往左判断直到识别。
3.PHP CGI解析漏洞
在默认Fast-CGI开启状况下,上传一个名字为wooyun.jpg,内容为

1
<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>

1
的文件,然后访问wooyun.jpg/x.php,(x.php不存在)在这个目录下就会生成一句话木马 shell.php。
4.%00截断漏洞
当程序在输出含有chr(0)变量时,chr(0)后面的数据会被停止,换句话说,就是误把它当成结束符,后面的数据直接忽略,这就导致漏洞产生

五、 CSRF(Cross-Site Request Forgery)
1.原理:
CSRF是一种夹持用户在已经登陆的web应用程序上执行非本意的操作的攻击方式。相比于XSS,CSRF是利用了系统对页面浏览器的信任,XSS则利用了系统对用户的信任。

由上图分析我们可以知道构成CSRF攻击是有条件的:
  1、客户端必须一个网站并生成cookie凭证存储在浏览器中
2、该cookie没有清除,客户端又tab一个页面进行访问别的网站
2.危害
攻击者利用会话劫持达到自己的目的,比如转账、积分等
3.防御
(1) GET、POST的正确使用
(2) 利用验证码(在一定的情况下使用,但是为了防止客户产生不好印象,尽量不用)
(3) Referer Check(HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。但服务器并非任何时候都能取到referer、保护客户隐私,不作为预防主要手段)
(4) Anti CSRF Token:
为每一个表单生成一个随机数秘钥,并在服务器端建立一个拦截器来验证这个token,如果请求中没有token或者token内容不正确,则认为可能是CSRF攻击而拒绝该请求。

六、 DDos攻击 分布式拒绝服务(Distributed Denial of service Attack)
1.原理
攻击者想办法让目标服务器的磁盘空间、内存、进程、网络带宽等资源被占满,从而导致正常用户无法访问。
攻击者进行拒绝服务攻击,实际上让服务器实现两种效果:一是迫使服务器的缓冲区满,无法接收新的请求;二是使用IP欺骗,迫使服务器把合法用户的连接复位,影响合法用户的连接。
攻击者是使用傀儡机(俗称“肉鸡”,受病毒木马操控的计算机或服务器)作为攻击平台,通过大量伪装合法的请求占用大量网络资源,以达到使指定目标的网络或服务瘫痪中断。
2.危害:
服务器瘫痪、用户无法正常访问。
3.类型
(1)SYN Flood攻击:这种攻击方法是经典最有效的DDoS方法,主要是通过向受害主机发送大量伪造源 IP 和源端口的 SYN 或 ACK 包,导致主机的缓存资源被耗尽或忙于发送回应包而造成拒绝服务,可通杀各种系统的网络服务。这种攻击由于源头都是伪造的,所以追踪起来比较困难。但是,该攻击实施起来有一定难度,需要大量高带宽的僵尸主机。
(2)TCP 全连接攻击:这种攻击是为了绕过常规防火墙的检查而设计的。一般情况下,常规防火墙大多对于正常的 TCP 连接是放过的,但是很多网络服务程序能接受的 TCP 连接数是有限的。TCP全连接攻击就是通过许多僵尸主机不断地与受害服务器建立大量的 TCP 连接,直到服务器的内存等资源被耗尽而被拖跨, 从而造成拒绝服务。种攻击的特点是可绕过一般防火墙的防护而达到攻击;缺点是需要找很多僵尸主机,且僵尸主机的IP 是暴露,易被追踪。
(3)刷 Script 脚本攻击:这种攻击是跟服务器建立正常的TCP连接, 并不断的向脚本程序提交查询、 列表等大量耗费数据库资源的调用。一般来说, 提交一个指令对客户端的耗费和带宽的占用是几乎可以忽略的,而服务器为处理此请求却可能要从上万条记录中去查出某个记录,这种处理过程对资源的耗费是非常大。攻击者只需通过代理向目标服务器大量递交查询指令,只需数分钟就会把服务器资源消耗掉而导致拒绝服务。这种攻击的特点是可以完全绕过普通的防火墙防护, 轻松找一些代理就可实施攻击;缺点是对付只有静态页面的网站效果会大打折扣,并且会暴露攻击者的IP地址。
4.防御:
(1)采用高性能的网络设备
(2)尽量避免NAT的使用(NAT需要对地址来回转换,转换过程中需要对网络包的校验和进行计算,因此浪费了很多CPU的时间)
(3)充足的网络带宽保证
(4)升级主机服务器硬件
(5)把网站做成静态页面
(6)增强操作系统的TCP/IP栈
(7)安装专业抗DDOS防火墙
附:IP Spoof: 即IP地址欺骗,是一台主机设备冒充另外一台主机的IP地址,与其它设备通信,从而达到某种目的技术。属于IP Spoof类的攻击还有TCP 半连接攻击,也就是SYN Flood攻击