Web漏洞介绍
Web漏洞
WEB漏洞通常是指网站程序上的漏洞,可能是由于代码编写者在编写代码时考虑不周全等 原因而造成的漏洞,常见的WEB漏洞有Sql注入、Xss漏洞、上传漏洞等
Web漏洞危害
常见web漏洞
sql注入
原理:
由于网站的开发者在处理sql语句不严谨,从而导致攻击者可以插入恶意的sql语句,然后使得原有的sql语句产生了歧义,从而达到了攻击者目的。
发生情景:
如何判断有sql注入漏洞:
在参数后面加上单引号,比如: http://xxx/aaa.php?id=1',若页面返回错误,则存在 Sql 注入。
解释:无论字符型还是整型都会因为单引号个数不匹配而报错(如果未报错,不代表不存在 Sql 注入,因为有可能页面对单引号做了过滤,这时可以使用判断语句进行注入。)
通常 Sql 注入漏洞分为 2 种类型:
- 数字型
- 字符型
数字型判断:可以使用经典的 and 1=1 和 and 1=2 来判断:
url中输入?id=1 and 1=1 页面依旧正常运行,继续下一步
url中输入?id=1 and 1=2 页面运行错误,则说明此 Sql 注入为数字型注入。
解释:当输入 and 1=1时,后台执行 Sql 语句:select * from <表名> where id = x and 1=1,语法正确且逻辑判断为正确,所以返回正常。
当输入 and 1=2时,后台执行 Sql 语句:select * from <表名> where id = x and 1=2,语法正确但逻辑判断为假,所以返回错误。
也可以使用假设法来验证:
假设这是字符型注入的话,我们输入以上语句之后应该出现如下情况:
当输入1 and 1=1,1 and 1=2时,后台执行 Sql 语句:
select * from <表名> where id = 'x and 1=1'
select * from <表名> where id = 'x and 1=2'
查询语句将 and 语句全部转换为了字符串,并没有进行 and 的逻辑判断,所以不会出现以上结果,故假设是不成立的。
字符型判断:可以使用 and ‘1’='1 和 and ‘1’='2来判断:
url中输入1' and '1' = '1,页面运行正常,继续进行下一步。
url中继续输入1' and '1' = '2,页面运行错误,则说明此 Sql 注入为字符型注入。
解释:当输入 and ‘1’='1时,后台执行 Sql 语句:select * from <表名> where id = 'x' and '1'='1'语法正确,逻辑判断正确,所以返回正确。
当输入 and ‘1’='2时,后台执行 Sql 语句:select * from <表名> where id = 'x' and '1'='2'语法正确,但逻辑判断错误,所以返回异常。
危害:
2. 数据库中的内容被篡改。
3. 登录认证被绕过
4. 其他,例如服务器上的文件被读取或修改/服务上的程序被执行等。
防御:
文件上传漏洞
定义:
文件上传漏洞是web系统中常见的一种功能,通过文件上传能实现上传图片、视频,以及其他类型的文件,但是随着web中包含的功能越来越多,潜在的网络安全风险也就越大。如果恶意用户上传了可执行的文件或者脚本,就会导致网站被其控制甚至会使其服务器沦陷,以至于引发恶意的网络安全事件。
原理:
文件上传漏洞是指恶意用户通过界面上的上传功能上传了一个可执行的脚本文件,而WEB端的系统并未对其进行严格的验证与过滤,最终可能获取执行服务端命令的能力,从而实现控制WEB网站的目的。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。WebShell主要以asp,php,jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以称之为一种网页后门。一句话木马就是最常用的WebShell。其中jsp语言相对于其他语言最流行。
文件上传漏洞的成因,一方面服务器配置不当会导致任意文件上传;
另一方面,Web 应用开放了文件上传功能,并且对上传的文件没有进行足够的限制;
再者就是程序开发部署时候,没有考虑到系统特性和验证过滤不严格而导致限制被绕过,上传任意文件。
危害:
上传漏洞最直接的威胁就是上传任意文件,包括恶意脚本、程序等。如果 Web 服务器所保存上传文件的可写目录具有执行权限,那么就可以直接上传后门文件,导致网站沦陷。如果攻击者通过其他漏洞进行提权操作,拿到系统管理权限,就能直接导致服务器沦陷。且同服务器下的其他网站也无一幸免,均会被攻击者控制。通过上传漏洞获得的网站后门,就是 Webshell。
防御手段:
1.文件上传目录设置为不可执行。这样子做即使攻击者上传了恶意脚本文件,服务器也不会受到影响。
2.使用随机数改写文件名和文件路径。文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果应用了随机数改写了文件名和路径,将极大地增加攻击的成本。再来就是像shell.php.rar.rar和crossdomain.xml这种文件,都将因为重命名而无法攻击。
3.使用安全设备防御。文件上传攻击的本质就是将恶意文件或者脚本上传到服务器,专业的安全设备防御此类漏洞主要是通过对漏洞的上传利用行为和恶意文件的上传过程进行检测。恶意文件千变万化,隐藏手法也不断推陈出新,对普通的系统管理员来说可以通过部署安全设备来帮助防御。
4.严格检查用户上传的文件名和文件路径等。服务器端的检查最好使用白名单过滤的方法,这样能防止大小写等方式的绕过。
5.定时查看系统日志,web服务器日志以发现入侵痕迹。
XSS(跨站脚本攻击)漏洞
定义:
跨站脚本攻击是一种针对网站应用程序的安全漏洞攻击技术,是代码注入的一种。它允许恶意用户将代码注入网页,其他用户在浏览网页时会受到影响,恶意用户利用xss 代码攻击成功后,可能得到很高的权限、私密网页内容、会话和cookie等各种内容。
原理:
XSS的原理是恶意攻击者往 Web 页面里插入恶意可执行网页脚本代码,当用户浏览该页之时,嵌入其中 Web 里面的脚本代码会被执行,从而可以达到攻击者盗取用户信息或其他侵犯用户安全隐私的目的。
分类:
反射型(非持久型)XSS、存储型(持久型)XSS、DOM型XSS、通用型XSS、突变型XSS。主要来分辨一下反射型与存储型之间的区别。
反射型XSS,又称为非持久性XSS,攻击相对于受害者而言是一次性的.具体表现在受害者点击了含有恶意的javascript脚本的url,恶意代码并没有保存在目标网站,而Web应用程序只是不加处理的把该恶意脚本“反射”回受害者的浏览器而使受害者的浏览器执行相应的脚本.反射型XSS只是简单的把用户输入的数据从服务器反射给用户浏览器,要利用这个漏洞,攻击者必须以某种方式诱导用户访问一个精心设计的URL(恶意链接),才能实施攻击。
存储型XSS,又称为持久性XSS,是指应用程序通过Web请求获取不可信赖的数据,在未检验数据是否存在XSS代码的情况下,便将其存入数据库。当下一次从数据库中获取该数据时程序也未对其进行过滤,页面再次执行XSS代码持续攻击用户。存储型XSS漏洞大多出现在留言板、评论区,用户提交了包含XSS代码的留言到数据库,当目标用户查询留言时,那些留言的内容会从服务器解析之后加载出来。一旦用户访问受感染的页,执行是自动的。
存储型XSS和反射型XSS的差别仅在于,提交的代码会存储在服务器端(数据库、内存、文件系统等),下次请求目标页面时不用再提交XSS代码。最典型的例子就是留言板XSS,用户提交一条包含XSS代码的留言存储到数据库,目标用户查看留言板时,那些留言就会从数据库中加载出来并显示,于是触发了XSS攻击.
危害:
1.窃取用户Cookie
2.后台增删改文章
3.XSS钓鱼攻击
4.利用XSS漏洞进行传播和修改网页代码
5.XSS蠕虫攻击
6.网站重定向
7.获取键盘记录
8.获取用户信息等
CSRF(跨站请求伪造)
定义:
CSRF是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装成受信任用户请求受信任的网站。简单的说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己以前认证过的站点并运行一些操作(如发邮件,发消息,甚至财产操作(如转账和购买商品))。因为浏览器之前认证过,所以被访问的站点会觉得这是真正的用户操作而去运行。
你可以这么来理解:攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等
原理:
要完毕一次CSRF攻击,受害者必须依次完毕两个步骤:
1.登录受信任站点A,并在本地生成Cookie。
2.在不登出A的情况下,访问危急站点B。
危害:
- 篡改、盗取目标网站上的重要用户数据
- 伪造HTTP请求进行未授权操作
- 未经允许执行对用户名誉或者资产有害的操作,比如:散播不良信息、进行消费等
- 如果通过使用社工等方式攻击网站管理员,会危害网站本身的安全性
XSS 与 CSRF区别:
1.CSRF是跨站请求伪造; XSS是跨域脚本攻击。
2、CSRF需要用户先登录网站A,获取cookie; XSS不需要登录。
3、CSRF是利用网站A本身的漏洞,去请求网站A的api; XSS是向网站A注入JS代码,然后执行JS里的代码,篡改网站A的内容。(XSS利用的是站点内的信任用户,而CSRF则是通过伪装来自受信任用户的请求来利用受信任的网站。你可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义向第三方网站发送恶意请求。)
SSRF(服务器端请求伪造)
定义:
SSRF指的是攻击者在未能取得服务器所有权限时,利用服务器漏洞以服务器的身份发送一条构造好的请求给服务器所在内网。SSRF攻击通常针对外部网络无法直接访问的内部系统。
原理:
SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。
危害:
1.内外网的端口和服务扫描
2.攻击运行在内网或本地的应用程序
3.对内网web应用进行指纹识别,识别企业内部的资产信息
4.攻击内网的web应用,主要是使用GET参数就可以实现的攻击(比如Struts2漏洞利用,SQL注入等)
5.利用file协议读取本地敏感数据文件等
OWASP top10
OWASP top10,总结了Web应用程序最可能、最常见、最危险的十大漏洞.