Web漏洞知识浅析
该文章是在拜读研究安全的赵显阳前辈出的书《Web渗透与漏洞挖掘》写的,文章只是很浅的介绍了何为漏洞、Web漏洞的分类、以及然后挖掘漏洞。
一、什么是漏洞
1、漏洞是指一个系统存在的弱点或缺陷,系统对特定威胁攻击或危险事件的敏感性,或进行攻击威胁的可能性。
2、漏洞可能来自应用软件或操作系统设计时的缺陷或编码时产生的错误,也可能来自业务在交互处理过程中的设计缺陷或逻辑流程上的不合理之处。
3、这些缺陷、错误或不合理之处可能被有意、无意地利用,从而对一个组织的资产或运行造成不利影响,如信息系统被攻击或控制、重要资料被窃取、用户数据被篡改、系统被作为入侵其他主机系统的跳板等。
4、从目前发现的漏洞来看,应用软件中的漏洞远远多于操作系统中的漏洞,特别是 Web 应用系统中的漏洞更是占信息系统漏洞中的绝大多数。
二、Web漏洞的分类
(一)SQL 注入
SQL 注入就是通过把 SQL 命令插入到 Web 表单,递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令的目的。
(二)XSS(跨站脚本攻击)
1、跨站脚本攻击(Cross Site Scripting,缩写为 XSS),为了不与层叠样式表(Cascading
Style Sheets )的缩写 CSS 混淆,故将跨站脚本攻击缩写为 XSS。
2、XSS 是一种经常出现在 Web 应用中的计算机安全漏洞,其允许恶意 Web 用户将代码植入到提供给其他用户使用的页面中,这些代码包括 HTML 代码和客户端脚本。攻击者利用 XSS 漏洞进行非法访问控制——例如同源策略(Same Origin Policy)。这种类型的漏洞由于被黑客用来编写危害性更大的网络钓鱼(Phishing)攻击,所以广为人知。
3、对于跨站脚本攻击,黑客界的共识是:跨站脚本攻击是新型的“缓冲区溢出攻击”,而 JavaScript
是新型的“ShellCode”。
(三)文件上传
1、文件上传漏洞是指用户上传一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。这种攻击方式是最为直接和有效的,有时几乎不具有技术门槛。
2、“文件上传”本身没有问题,有问题的是文件上传之后服务器怎么处理、解释文件。如果服务器的处理逻辑做得不够安全,则会有严重的不安全隐患。
(四)文件下载
可以下载网站所有的信息数据,包括源码、网站的配置文件等信息。
(五)目录遍历
如果 Web 设计者设计的 Web 内容没有恰当的访问控制,允许 HTTP 遍历,攻击者就可以访问受限的目录,并可以在 Web 根目录以外执行命令。
(六)本地文件包含(Local File Include)
1、这是 PHP 脚本的一大特色,程序员们为了开发方便常常会用到包含。
比如把一系列功能函数都写进fuction.php 中,之后当某个文件需要调用时就直接在文件头中写上一句<?php include("fuction.php");?>
,然后调用内部定义的函数。
2、本地包含漏洞是 PHP 中一种典型的高危漏洞。由于程序员未对用户可控的变量进行输入检查,导致用户可以控制被包含的文件名,当被成功利用时可以使 Web Server将特定文件当成 PHP 脚本执行,从而导致用户获取一定的服务器权限。
(七)远程文件包含
服务器通过 PHP 的特性(函数)去包含任意文件时,由于要包含的文件来源过滤不严,可以包含一个恶意文件,而我们可以构造这个恶意文件达到渗透系统的目的。几乎所有的 CGI 程序都有这样的 Bug,只是具体的表现方式不一样罢了。
(八)全局变量覆盖
1、register_globals 是 PHP 中的一个控制选项,可以设置成 Off 或者 On,默认为 Off,决定是否将EGPCS(EGPCS 是 Environment、GET、POST、Cookie、Server 的缩写)变量注册为全局变量。
2、如果打开 register_globals,客户端提交的数据中含有 GLOBALS 变量名,就会覆盖服务器上的$GLOBALS 变量。
(九)代码执行
由于开发人员编写源码时没有针对代码中可执行的特殊函数入口做过滤,导致客户端可以提交恶意构造语句,并交由服务器端执行。Web 服务器没有过滤类似system()、eval()、exec()等函数是该漏洞攻击成功的最主要原因。
(十)信息泄露
由于代码编写不严谨或应用固有的功能,造成网站服务器信息被非法获取,但这只是一个低危漏洞。
(十一)弱口令
弱口令的危害就犹如你买了一个高级保险箱,什么刀斧工具都破坏不了它,但遗憾的是你把钥匙挂在了门上。常见的弱密码出现在个人邮箱、网游账号、系统口令等环境。
(十二)跨目录访问
开发人员没有正确地限制能够访问存储系统的网页路径。通常,跨目录攻击的受害者大多是社交网站,或者是全球性的 Web 服务器。因为在同一个 Web 服务器上可能为不同的用户或部门分配不同的目录。例如,每个 MySpace 用户都有一个个人的网络空间。此时,如果使用 Cookie 或者 DOM 存储,就可能产生跨目录攻击。
(十三)缓冲区溢出
缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。利用缓冲区溢出攻击会导致程序运行失败、系统宕机、重新启动等后果。更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权进而进行各种非法操作。
(十四)Cookies 欺骗
1、Cookies 能够让网站服务器把少量数据储存到客户端的硬盘,或从客户端的硬盘读取数据。当你浏览某网站时,由 Web 服务器置于你硬盘上一个非常小的文本文件,它可以记录你的用户 ID、密码、浏览过的网页、停留的时间等信息。当你再次来到该网站时,网站通过读取 Cookies 得知你的相关信息,就可以做出相应的动作,如在页面显示欢迎你的标语,或者让你不用输入 ID、密码就可以直接登录等。
2、从本质上讲,它可以看作是你的身份证。但 Cookies 不能作为代码执行,也不会传送病毒,为你所专有,且只能由提供它的服务器来读取。保存的信息片断以“名/值对”(Name-Value Pairs)的形式储存,一个“名/值对”仅仅是一条命名的数据。Cookies 欺骗就是修改其中保存的信息,从而实现某些特殊的目的。
(十五)反序列化
如果服务端程序没有对用户可控的序列化代码进行校验,而是直接进行反序列化使用,并且在程序中运行一些比较危险的逻辑(如登录验证等),那么就会触发一些意想不到的漏洞。比如经典的有 Weblogic 反序列化和 Joomla 反序列化漏洞。
(十六)CSRF(跨站请求伪造)
攻击者通过用户的浏览器注入额外的网络请求,破坏一个网站会话的完整性。浏览器的安全策略是允许当前页面发送到任何地址,因此也就意味着当用户在浏览其无法控制的资源时,攻击者可以控制页面的内容来控制浏览器,发送其精心构造的请求。
(十七)命令注入
系统对用户输入的数据没有进行严格过滤就运用,并且使用 bash 或 cmd 执行。
三、漏洞挖掘常用的方法
(一)SQL注入
1、对于注入漏洞,通常我们在 URL 后加单引号即可判断是否有注入漏洞。
如http://www.isafe.cc/list.asp?id=1
后加单引号,即 http://www.isafe.cc/list.asp?id=1’
,
这时服务器会把 1’代入数据库查询,然后页面报错,而对于不同的数据库错误信息也不一样。
2、对于不报错的页面,可以使用 and 1=1 和 and 1=2,并根据页面返回内容判断是否有注入。
如果 and 1=1 和 and 1=2 返回的页面内容不同,则可以断定存在注入。比如,第一次提交的 URL http://www.isafe.cc/list.asp?id=1 and 1=1
页面有返回内容,而第二次提交的 URL http://www.isafe.cc/list.asp?id=1 and 1=2
页面没有完整的内容,则可以断定存在 SQL 注入。
3、对于有些特定的 Web 页面后端查询,比如 Update、Delete、Insert 等,可以使用Sleep 等 函 数 ( 数 据 库 不 同 则 函 数 不 同 ) 进 行 SQL 注 入 , 比 如 提 交 URL
http://www.isafe.cc/list.asp?id=1 and sleep(5)
,如果页面等待几秒钟才返回,则可以断
定存在 SQL 注入。
4、SQL 注入一般有基于报错的注入、基于布尔值的注入和基于时间的注入。
(二)XSS(跨站漏洞)
跨站漏洞一般出现在 Web 浏览器端,分为反射型、存储型等,跨站可用来盗取其他用户的 Cookie,虽然没有 SQL 注入危害大,但也被业界评为高危漏洞,一般在URL 后加入<script>alert(“www.isafe.cc”);</script>
,如果页面有弹框,则表示存在跨站漏洞。
(三)文件上传
1、文件上传漏洞一般视情况而定,有些是中间件的漏洞如:apache、nginx、iis 等。
2、对于 apache 上传 1.php.bak 这样的文件是可以作为 PHP 文件执行的(某些版本),对于 nginx 上传 1.jpg 文件,访问 http://www.isafe.cc/upload/1.jpg/1.php
就可以执行 PHP代码。
3、对于 iis 6.0 上传 1.asp、1.jpg 这样的文件可以被作为 ASP 来执行,建立 1.asp文件夹,在1.asp 文件下的任意后缀文件都可以作为 ASP 来执行。有些是代码过滤不严谨造成的任意文件上传,有些代码对文件上传根本不过滤,对应过滤的文件也可以通过各种方法绕过上传。文件上传视情况而定,有各种各样可利用的方法。
(四)文件下载
1、下载系统上的任意文件,如数据库配置文件、密码文件 Shadow 等,Web 层面会提供下载附件或软件的功能,一般形式如 http://www.isafe.cc/download.php?filename=/files/document.doc
2、Web 后端会根据 filename 参数在指定的目录中读取文件的内容返回给浏览器,如果修改 filename 为 http://www.isafe.cc/download.php?filename= ../../../../../../../etc/passwd
这样的形式,则可以跨越指定的目录访问系统的任意文件。
(五)代码执行
远程代码执行多见于 PHP、Java 等脚本语言中,PHP 中的 Eval、System、Assert、Popen 等函数如果对外界传入的参数直接使用,则会造成远程代码执行,我们在找漏洞的时候只要定位到相关函数,观察相关函数的参数来源即可。