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