xss漏洞简述

1.xss漏洞简介

XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比   如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被黑客用来编写危害性更大的网络钓鱼(Phishing)攻击而变得广为人知。对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击“,而JavaScript是新型的“ShellCode”。

百度百科的解释: XSS又叫CSS  (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。

它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,通过插入恶意脚本,实现对用户游览器的控制,获取用户的一些信息

2.XSS攻击的危害包括

1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号

2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力

3、盗窃企业重要的具有商业价值的资料

4、非法转账

5、强制发送电子邮件

6、网站挂马

7、控制受害者机器向其它网站发起攻击

8、对于那些半年没有更新的小企业网站来说,发生XSS漏洞几乎没有什么用

扫描二维码关注公众号,回复: 3574858 查看本文章

9、但是在各类的社交平台,邮件系统,开源流行的Web应用,BBS,微博等场景中,造成的杀伤力却十分强大。

10、劫持用户cookie是最常见的跨站攻击形式,通过在网页中写入并执行脚本执行文件(多数情况下是JavaScript脚本代码),劫持用户浏览器,将用户当前使用的sessionID信息发送至攻击者控制的网站或服务器中。

11、又可以称为“框架钓鱼”。利用JS脚本的基本功能之一:操作网页中的DOM树结构和内容,在网页中通过JS脚本,生成虚假的页面,欺骗用户执行操作,而用户所有的输入内容都会被发送到攻击者的服务器上。

12、进行基于大量的客户端攻击,如DDOS攻击,结合其它漏洞,如CSRF漏洞,进一步渗透网站

3.xss基本原理

1.攻击者对某含有漏洞的服务器发起XSS攻击(注入JS代码)

2.诱使受害者打开受到攻击的服务器URL(邮件、留言等,此步骤可选项)

3.受害者在Web浏览器中打开URL,恶意脚本执行。

4.xss分类

XSS攻击需要具备两个条件:需要向web页面注入恶意代码;这些恶意代码能够被浏览器成功的执行。

xss攻击可以分成两种类型:

1.非持久型攻击
2.持久型攻击

非持久型xss攻击:顾名思义,非持久型xss攻击是一次性的,仅对当次的页面访问产生影响。非持久型xss攻击要求用户访问一个被攻击者篡改后的链接,用户访问该链接时,被植入的攻击脚本被用户游览器执行,从而达到攻击目的。

持久型xss攻击:持久型xss,会把攻击者的数据存储在服务器端,攻击行为将伴随着攻击数据一直存在。

也可以分成三类:

反射型:经过后端,不经过数据库

存储型:经过后端,经过数据库

DOM:不经过后端,DOM—based XSS漏洞是基于文档对象模型Document Objeet Model,DOM)的一种漏洞,dom - xss是通过url传入参数去控制触发的。

5.xss攻击代码演示

1.反射型xss

新建一个xss.php文件并加入以下代码:

\\XSS反射演示
<form action="" method="post">
    <input type="text" name="xss" value=""/>
    <input type="submit" value="test"/>
</form>
<?php
$xss = @$_POST['xss'];
if($xss!==null){
    echo $xss;
}
?>

这段代码中首先包含一个表单,用于向页面自己发送 POST请求,带一个名为xss的参数。 然后 PHP 会读取该参数,如果不为空,则直接打印出来,这里不存在任何过滤。也就是说,如果xss中存在 HTML 结构性的内容,打印之后会直接解释为 HTML 元素。部署好这个文件,访问http://localhost/xss.php,直接输入一个js代码,比如<script>alert('xss_hack')</script>,
 

接着点击test出现如下图

反射型 XSS 的数据流向是:前端利用js向后端传输带有(恶意js代码)数据 -> 后端接收数据并做输出处理 -> (恶意js代码数据)在前端被浏览器自动执行。

2.存储型xss

新建一个xss_stored.php文件并加入以下代码

<form  name="guestform" method="post">
<table width="550" cellspacing="1" cellpadding="2" border="0">
	<tbody>
		<tr>
			<td width="100">Name *</td>
			<td>
				<input type="text" maxlength="10" size="30" name="txtName">
			</td>
		</tr>
		<tr>
			<td width="100">Message *</td>
			<td>
				<textarea maxlength="50" rows="3" cols="50" name="mtxMessage"></textarea>
			</td>
			</tr>
		<tr>
		<td width="100"> </td>
			<td>
				<input type="submit"  value="Sign Guestbook" name="btnSign">
			</td>
		</tr>
	</tbody>
</table>
</form>
 <?php
setcookie("TestCookie",md5("xueh"), time()+3600*24);
$link=mysql_connect('localhost','root','root');
if(!$link)
{
	die("连接失败:".mysql_error());
}
//为后续的mysql扩展函数的操作选定一个默认的数据库,它相当于sql命令(use 数据库名)
mysql_select_db('fanke',$link) or die('不能选此数据库:'.mysql_error());


if( isset( $_POST[ 'btnSign' ] ) ) {
    // Get input
    $message = trim( $_POST[ 'mtxMessage' ] );
    $name    = trim( $_POST[ 'txtName' ] );

    // Sanitize message input
    $message = stripslashes( $message );
    $message = mysql_real_escape_string( $message );

    // Sanitize name input
    $name = mysql_real_escape_string( $name );

    // Update database
    $query  = "INSERT INTO user(username,password) VALUES ( '$message','$name' );";
    $result = mysql_query( $query ) or die( '<pre>' . mysql_error() . '</pre>' );
	

    //mysql_close();
}
?>

可以看到代码中用户输入的内容没有过滤,而且也被插入了数据库中

新建show_xss.php并加入如下代码

<?php
$link=mysql_connect('localhost','root','root');
if(!$link)
{
	die("连接失败:".mysql_error());
}
//为后续的mysql扩展函数的操作选定一个默认的数据库,它相当于sql命令(use 数据库名)
mysql_select_db('fanke',$link) or die('不能选此数据库:'.mysql_error());
$sql="select password from user where username='xss_hack' ";
$result=mysql_query($sql,$link);
while($row=mysql_fetch_array($result)){
	echo $row['password'];
	}
?>

在上面代码中的最后几行可以看到,插入到数据库中的恶意js代码回显到前端

在stored_xss.php的表单中name插入<script>alert("I am xss");</script>;message插入xss_hack

插入到数据库的恶意代码被后端相关代码输出到前端,且被浏览器自动执行,结果如下

存储型 XSS 的执行的页面位置通常不同于输入页面的位置。我们可以看出,存储行 XSS 的数据流向是:

前端输入(恶意代码)数据到后端 -> 后端相关代码处理将恶意js代码储存在数据库-> 后端相关代码将js恶意代码从数据库取出并输出到前端 -> js恶意代码被浏览器自动执行

简单说数据流向就是:浏览器 -> 后端 -> 数据库 -> 后端 -> 浏览器

3.DOM-XSS型

新建一个dom-xss.php文件,并添加如下代码

<?php
error_reporting(0); //禁用错误报告
$name = $_GET["name"];
?>
<input id="text" type="text" value="<?php echo $name;?>" />
<div id="print"></div>
<script type="text/javascript">
var text = document.getElementById("text"); 
var print = document.getElementById("print");
print.innerHTML = text.value; // 获取 text的值,并且输出在print内。这里是导致xss的主要原因。
</script>

DOM-XSS 的数据流向是:利用dom结构构造js恶意代码-->自动被浏览器 执行

猜你喜欢

转载自blog.csdn.net/qq_40491569/article/details/83031023
今日推荐