记一次原生JS实现XSS攻击案例

XSS:跨站脚本(Cross-site scripting

攻击手段和目的:
攻击者使被攻击者在浏览器中执行脚本后,如果需要收集来自被攻击者的数据(如cookie或其他敏感信息),可以自行架设一个网站,让被攻击者通过JavaScript等方式把收集好的数据作为参数提交,随后以数据库等形式记录在攻击者自己的服务器上。

为了加深自己对XSS攻击的理解,特意尝试了一下,并把整个过程记录下来。

攻击过程:
①、客户端收集用户数据(如留言、发布文章功能)
②、攻击者将留言内容写入了可执行的JavaScript代码
③、将上面的数据未经处理直接存入数据库
④、其他用户查看该网站,看了上面包含了可执行的JavaScript代码的文章和评论
⑤、其他用户就会在浏览器客户端执行攻击者注入的JavaScript代码

本次试验用到如下技术:
①、(客户端)原生Ajax请求
②、(服务端)thinkphp,为了试验方便,不使用数据库,直接返回数据
③、 Cors跨域

原生Ajax请求

<!DOCTYPE html>
<html lang="en">
<head> 
    <meta charset="UTF-8">
    <title>XSS测试</title> 
</head> 
<body> 
    <div id="Text"></div> 
    <input type="button" value="XSS测试"  onclick="ajax();"/> 
    
    <script type="text/javascript"> 
        function ajax() { 
            //先声明一个异步请求对象 
            let xmlHttpReg = null; 
            if (window.ActiveXObject) { //如果是IE 
                xmlHttpReg = new ActiveXObject("Microsoft.XMLHTTP"); 
            } else if (window.XMLHttpRequest) { 
                xmlHttpReg = new XMLHttpRequest(); //实例化一个xmlHttpReg 
            } 
            
            //如果实例化成功,就调用open()方法,就开始准备向服务器发送请求 
            if (xmlHttpReg !== null) { 
                xmlHttpReg.open("get", "http://vueapp.com", true);
                xmlHttpReg.send(null); 
                xmlHttpReg.onreadystatechange = doResult; //设置回调函数 
            } 
        
            //设定函数doResult() 
            function doResult() { 
                if (xmlHttpReg.readyState == 4) {//4代表执行完成 
                    if (xmlHttpReg.status == 200) {//200代表执行成功 
                        document.getElementById("Text").innerHTML = xmlHttpReg.responseText;   
                    } 
                } 
             }
        } 
    </script> 
</body>
</html>

在这里我使用的是get请求
其中请求地址http://vueapp.com 是我自定义的地址,使用Apache配置

由于这里涉及到跨域问题(出于浏览器安全的同源策略,协议、域名、端口号任一不同都属于跨域)

Failed to load http://vueapp.com/: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

我的解决方法是CORS
在后端的接口中添加这么一行代码

header('Access-Control-Allow-Origin:*');  // 允许所有访问源

返回的数据是:

$this->ajaxReturn(array('status' => 0,'info' => "<img src='11.png' onerror='alert(11)'/>"));

这里我们利用img标签的onerrer属性来执行JS代码,所以src属性填一个访问不了就可以触发onerrer了

开始测试

点击 XSS测试 按钮,结果如图(谷歌浏览器):
图片描述


图片描述

这就是一个最最最简单的XSS攻击案例

这次我们去一个网站盗用cookie
图片描述


图片描述

可以看到所有的cookie信息都在这里了

*发现的问题

为什么我不直接用script标签,而用img的onerror属性。
因为script标签有问题,在后台返回来的script标签在dom是存在的,但是并没有执行
还请各位大佬多多指正
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、什么是XSS攻击 XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被黑客用来编写危害性更大的网络钓鱼(Phishing)攻击而变得广为人知。对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击“,而JavaScript是新型的“ShellCode”。 二、XSS漏洞的危害 (1)网络钓鱼,包括盗取各类用户账号; (2)窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作; (3)劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账、强制发表日志、发送电子邮件等; (4)强制弹出广告页面、刷流量等; (5)网页挂马; (6)进行恶意操作,例如任意篡改页面信息、删除文章等; (7)进行大量的客户端攻击,如DDoS攻击; (8)获取客户端信息,例如用户的浏览历史、真实IP、开放端口等; (9)控制受害者机器向其他网站发起攻击; (10)结合其他漏洞,如CSRF漏洞,实施进一步作恶; (11)提升用户权限,包括进一步渗透网站; (12)传播跨站脚本蠕虫等; 三、过滤器配置 web.xml配置 XssFilter com.xxx.Filter.XssFilter XssFilter /*

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值