《网络安全学习》 第三部分-----XSS攻击系列学习

关于更详细的文档资料,请回看第一部分
《网络安全学习》第一部分-----初识OWASP

1、SS的常见攻击方式:

  • 反射型
  • 存储型

第一种:反射型XSS攻击

发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。这个过程像一次反射,故叫反射型XSS。

模拟反射型XSS攻击:

通过构建Node应用,演示反射型XSS攻击。后台框架位jfinal,页面渲染也是jfinal,其他框架的话只需要修改方式即可,原理一样。

前端页面代码

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>XSS脚本攻击演示</title>

<body>
  <hr>
    浏览器的参数值是: <p>#(xss)</p>
</body>
</html>

后台Controller代码

package com.demo.web;

import com.demo.model.User;
import com.jfinal.core.Controller;

public class IndexController extends Controller {
	
	public void index() {

		// 获得连接参数xss ,并渲染到前台
		String attr = getPara("xss");
		setAttr("xss", attr);
		
		render("index.html");
	}
}

然后我们访问我们的项目,加上xss的参数,机会得到如下效果。
《网络安全学习》 第三部分-----XSS攻击系列学习_第1张图片

接下来,我们将xss的值改为具有攻击性的脚本:

xss=

然后我们访问这个地址,就会出现下图,会弹出对话框。

http://127.0.0.1:8080/tomatocc/?xss=

《网络安全学习》 第三部分-----XSS攻击系列学习_第2张图片

如果没有弹出对话框,而是下面的报错,那是因为现在的浏览器已经将这种低级的xss攻击加入到的自身防护中,不过ie浏览器还没有,因此本人用的是ie浏览器进行操作。
《网络安全学习》 第三部分-----XSS攻击系列学习_第3张图片

我们可以看到,这种方式的攻击前提是,必须将地址中的参数在页面解析,如果不进行解析的话,那么这种攻击方式也就毫无意义。

而这种攻击方式下,又包含三种方式

  1. 主动攻击:上述的加img标签就是主动攻击。
  2. 引诱攻击:如果参数值为:

    点我

    ,这种引诱用户去点击的攻击,则为引诱攻击。
    《网络安全学习》 第三部分-----XSS攻击系列学习_第4张图片

3.iframe方式:如果参数值为:,那么将会直接将某个网站渲染到该页面。
《网络安全学习》 第三部分-----XSS攻击系列学习_第5张图片


第二种:存储型XSS攻击

模拟存储型XSS攻击:

  1. 首先,假设这是一个交流论坛,其中一个html页面中有一个允许我们留言的文本输入框,并且,我们的留言将会在该网站中被其他人所看到。然后,我们将具有攻击性的脚本写到文本框中,然后提交到服务端。(该脚本的含义表示,获取客户端的cookie,并发送到指定地址,攻击系数*****)。
    《网络安全学习》 第三部分-----XSS攻击系列学习_第6张图片
    2)这个时候,后台服务其已经将我们提交的数据存储到数据库中。
    3)当其他用户在自己计算机中登陆这个网站的时候,服务端会将我们之前写入具有攻击性的XSS脚本留言渲染到HTML页面,从而将该用户页面中的cookie信息发送到我们预留的网站中。
    4)接下来,我们就可以用这个人的cookie信息在该网站中“替代”他进行一系列的操作。
    5 ) 到这里一个简单的存储型XSS攻击(cookie欺骗)就完成。
    如果或许的有乱码,可以在攻击脚本中使用编码
    《网络安全学习》 第三部分-----XSS攻击系列学习_第7张图片
针对js获取cookie的解决方案:

在cookie中设置了HttpOnly属性为true,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,具体一点的介绍请google进行搜索


> 存储型XSS和反射型XSS的差别仅在于,`提交的代码会存储在服务器端(数据库,内存,文件系统等)`,下次请求目标页面时不用在提交XSS代码。 由于这种方式和上述方式的差别仅仅在于数据存储,前端代码无需任何变更,后端在获取连接值后,进行存储数据库,然后在去渲染,因此不做代码演示。

XSS的防御措施:

上面掌握了XSS的攻击方式,下面就来学习防御措施。

  • 编码
  • 过滤
  • 校正

编码

对用户输入的数据进行HTML Entity编码
《网络安全学习》 第三部分-----XSS攻击系列学习_第8张图片

过滤
移除用户上传的DOM属性,如onerror等
移除用户上传的Style节点、Script节点、Ifram节点等。
校正
避免直接对HMTL Entity解码
使用DOM Parse转换,校正不匹配对的DOM标签


2、基于文档模型(DOM)造成的XSS攻击

由于文档的某些输入、输出点没有做过滤,攻击者可以插入JavaScript代码,从而在客户端执行,造成了XSS跨站脚本攻击。
常见的可控对象:

  • doucument.location
  • doucument.URL
  • document.URLUnencoded
  • document.referrer
  • window.location
  • window.location.hash

模拟XSS攻击,使用AJAX异步,实现蠕虫攻击
攻击前提:

  • A网站:具有留言功能,并将留言显示在页面的功能
  • B网站:用来放置我们的XSS

1) 首先我们创建一个ajax异步攻击脚本,

《网络安全学习》 第三部分-----XSS攻击系列学习_第9张图片
2) 创建一个B网站的首页,并将上述js在该页面重新写一遍。(可以实现,B站主动攻击效果。)
《网络安全学习》 第三部分-----XSS攻击系列学习_第10张图片
3) 首先我们刷新B网站,就可以主动的完成一次主动攻击。将我们的攻击脚本植入到服务端的数据库中,接下来只要有用户登陆A网站,都会从数据库中获取一次攻击脚本,并且显示在A网站中,这样就是先XSS蠕虫攻击(不停的繁衍)。

针对上述XSS蠕虫攻击的解决方案:
  • 对用户的所有输入点和输出点进行特殊字符过滤。
  • 过滤<、>、&、#、"、‘、//、/*等等符号
    CSRF(跨站请求伪造)解决方案
  • 验证码
  • 验证referer(请求头的一部分,该页面从哪个请求过来)1
  • Toket2(主流解决方案)
  • 设置跨域权限

【网络安全学习】系列教程

《网络安全学习》第一部分-----初识OWASP
《网络安全学习》第二部分-----SQL注入学习
《网络安全学习》第三部分-----XSS攻击系列学习
《网络安全学习》第四部分-----SSRF服务器端请求伪造
《网络安全学习》第五部分-----远程代码执行漏洞
《网络安全学习》 第六部分-----文件上传漏洞
《网络安全学习》 第七部分-----跨域资源共享(CORS)漏洞
《网络安全学习》 第八部分-----《网络安全学习》 第八部分-----越权漏洞详解
《网络安全学习》 第九部分----CSRF(跨站请求伪造)漏洞详解


  1. referer是什么 ↩︎

  2. 深入理解token ↩︎

你可能感兴趣的:(开发栈----网络安全学习)