XSS攻击初步认识

本文详细介绍了三种类型的XSS漏洞:反射型XSS通过即时执行代码,存储型XSS通过持久化存储,DOM型XSS依赖浏览器解析。讨论了各自利用原理和示例,以及代码输出在HTML标签、CSS和JS中的注意事项。
摘要由CSDN通过智能技术生成

0x00 前言

​ 学完了基本 SQL 漏洞,也需要进行下一步的学习,继续看着书学习吧,等学完之后就去 BUU 刷一下 Web 题。

0x01 简单的分类

​ 跨站脚本攻击(Cross Site Scripting,为避免与层叠样式表 CSS 混淆,通常简称为 XSS )是一种网站应用程序的安全漏洞,是代码注入漏洞的一种。它使得攻击者可以通过巧妙的方法向网页中注入恶意代码,导致用户浏览器在加载网页、渲染 HTML 文档时就会执行攻击者的恶意代码。

​ 以漏洞成因可分为三类:反射型、存储型、DOM 型。
​ 也可以根据输出点的不同分为三类:

  • 输出在 HTML 属性中。
  • 输出在 CSS 代码中。
  • 输出在 JavaScript 中。

0x02 反射型 XSS

关于反射型:

​ 我觉得这个反射是指当我们进行漏洞的利用的时候,漏洞利用代码马上就会执行,如同反射一般。

关于漏洞的利用:

​ 我们首先假设具有漏洞的网站的 php 代码为:(来自:XSS的原理分析与解剖 - FreeBuf网络安全行业门户

<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
$xss = $_GET['xss_input_value'];
if(isset($xss)){
echo '<input type="text" value="'.$xss.'">';
}else{
echo '<input type="type" value="输出">';
}
?>
</center>
</body>
</html>

​ 页面的显示情况为:

在这里插入图片描述

​ 所以我们可以通过注入以下代码来利用其存在的漏洞:

//"><script>alert('xss')</script>
//其中前面的 ' "> ' 使用于将前方的 '<' 闭合,后面的代码可以使得页面出现弹窗,弹窗内写着 xss 。

0x03 存储型 XSS

关于存储型:

​ 其和反射型 XSS 的区别在于所提交的 XSS 代码是否会被存储在服务端,是否可以在将来再次被利用。

关于漏洞利用:

​ 我们以下面的代码为漏洞原型:(来自:《CTF 特训营》)

<html>
    <head>
        <title>GuestBook v1.0</title><meta charset="utf-8">
	</head>
	<body>
		<form method="post">
			昵称:<input type="text" name="nickname"><br>
			内容:<textarea name="content"><ltextarea><br>
			<input type="submit" name="submit" value="提交留言">
         </form>
		<hr>
		<?php
			$conn = mysql_connect("localhost","root","root");
			if (!$conn){
				die('Could not connect: '. mysql_error());
			}
			mysql_select_db("guestbook", $conn);
			if (isset($_POST['submit]')){
				$nickname =$_PoST['nickname";$content= $_POST['content];
				mysql_query("INSERT INTO guestbook (nickname, content) VALUES ('$nickname', '$content")");
				$result = mysql_query("SELECT * FROM guestbook");
				while($row = mysql_fetch_array($result)){
					echo $row['nickname'].": ".$row['content'] . '<br>;
				}
				mysql_close($conn);
		?>
	</body>
</html>

​ 此时,我们如果在内容处提交了<script>alert('xss')</script> ,那么在我们下一次访问被漏洞利用的用户的时候,会再一次的弹出弹窗。

0x04 DOM 型 XSS

关于 DOM 型:

​ DOM 型 XSS与反射型 XSS、存储型 XSS 的主要区别在于 DOM 型 XSS 的 XSS 代码不需要服务端解析响应的直接参与,触发 XSS 的是浏览器端的 DOM 解析。

关于漏洞利用:

​ 我们假设具有 DOM 型 XSS 漏洞给的网站代码如下:(来自:《CTF 特训营》)

<html>
    <head>
        <title>DOM XSS</title>
        <meta charset="utf-8">
    </head>
    <body>
        <div id="area"></div>
        <script>
            document.getElementByld("area").innerHTML = unescape(location.hash);
        </script>
    </body>
</html>

http://example.com/dom.html#<img src=x οnerrοr=alert(/xss/)>

原因:由于以下三者的共同作用,使得产生了 DOM 型 XSS
unescape 函数:已被废弃,可用于将参数其中的十六进制转义序列将被其表示的字符替换
onerror:表示当发生错误时
window.location.hash 读取 # 值
# 号:将自动跳转到页面相应的位置处,提交带有 # 的 url 时,不会提交 # 后的数据,除非转码为 %23;每次该变 # 后的值,不会重新加载页面,但会在浏览记录留下新的记录。

总结:

​ 个人感觉就是利用 html 页面本身存在的漏洞问题,而这个漏洞问题可能存在于 js 代码、CSS 代码、HTML代码等。

0X05 输出在 HTML 标签、CSS、JS中

关于注意点:

​ 当输出点在 HTML 代码中时,我们需要注意标签的闭合问题。如

<input name="user" value="{{ your input }}"/>
<!--对于上面的标签,我们需要注意双引号和括号闭合,可以输入:"οnclick="alert(/xxs/),使其变为-->
<input name="user" value="" onclick="alert(/xss/)">
<!--也可以输入:">cscript>alert(/xss/)</script>,使其变为-->
<input name="user" value=""><script>alert(/xss/)</script>">
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值