XSS漏洞及复现

一、什么是XSS

跨站脚本( Cross-site Scripting )攻击,攻击者通过网站输入框输入payload(脚本代码 ),当用户访问网页时,恶意payload自动加载并执行,以达到攻击者目的( 窃取cookie、恶意传播、钓鱼欺骗等)为了避免与HTML语言中的CSS相混淆,通常称它为“XSS”。

二、XSS的分类

反射性

特点:只执行一次,非持久型

主要存在于攻击者将payload附加到url的参数中,服务端没有经过严格的过滤输出到用户浏览器中,导致恶意代码被执行。

防范思路

可以使用str_replace()函数区分大小写

preg_replace() 利用正则过滤标签(<script>)

htmlspecialchars(string) 将"<",">","&"等转化为html实体,防止浏览器将其作为html元素

靶场复现

输入<script>alert(1)</script>测试发现只输出了alert(1)

查看源码得知,过滤了<script>标签,将script换成大写的SCRIPT,或者将标签换成<img>即可

存储型

特点:持久型

主要存在于攻击者将恶意脚本存储到服务器数据库中,当用户访问包含恶意相关数据的页面时,服务端未经严格过滤处理而输出在用户浏览器中,导致浏览器执行代码数据。

防范思路

trim(string[,charlist]) 移除字符串两侧的空白字符或预定义字符(\t,\n,\x0B,\r)

stripslashes(string) 移除字符串中的反斜杠

strip_tags(string,allow) 剥去字符串中的html、xml以及php的标签

靶场复现

在尝试<script>alert(1)</script>后,输出为alert(1)

查看源码发现对<script>标签进行了过滤,尝试换成大写或者使用别的标签进行注入

<?php
 
if( isset( $_POST[ 'btnSign' ] ) ) {
    // Get input
    $message = trim( $_POST[ 'mtxMessage' ] );
    $name    = trim( $_POST[ 'txtName' ] );
 
    // Sanitize message input
    $message = strip_tags( addslashes( $message ) );
    $message = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $message ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
    $message = htmlspecialchars( $message );
 
    // Sanitize name input
    $name = str_replace( '<script>', '', $name );
    $name = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $name ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
 
    // Update database
    $query  = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
    $result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );
 
    //mysql_close();
}
 
?> 

dom型

特点:通过JavaScript操作document,实现dom树的重构

简单来说DOM文档就是一份XML文档,当有了DOM标准之后,DOM便将前端html代码化为一个树状结构,方便程序和脚本能够轻松的动态访问和更新这个树状结构的内容、结构以及样式,且不需要经过服务端,所以DOM型xss在js前端自己就可以完成数据的输入输出,不与服务器产生交互,这样来说DOM型xss也可以理解为反射性xss。

DOM型与反射型和存储型的区别

前面两种都将数据提交到后台处理,但是dom直接在客户端执行

DOM型xss可以在前端通过js渲染来完成数据的交互,达到插入数据造成xss脚本攻击,且不经过服务器,所以即使抓包无无法抓取到这里的流量,而反射性与存储型xss需要与服务器交互,这便是三者的区别。

 靶场复现

url栏里的default参数可修改

查看源代码,发现对<script>标签进行了不区分大小写的查找,并将结果返回为default=English,所以不使用script标签

<?php

// Is there any input?
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {
	$default = $_GET['default'];
	
	# Do not allow script tags
	if (stripos ($default, "<script") !== false) {
		header ("location: ?default=English");
		exit;
	}
}

?>

使用img标签后发现并无弹窗

查看网页源代码发现需要闭合标签

重新输入

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
XSS(Cross-site scripting)跨站脚本攻击,是一种常见的Web攻击方式,攻击者通过在网页中注入恶意脚本代码,使得用户在浏览网页时执行这些脚本代码,达到攻击的目的。 XSS攻击的原理是,攻击者在网页中注入恶意脚本代码,当用户访问这个网页时,恶意脚本代码会被执行,从而达到攻击的目的。攻击者可以通过XSS攻击来窃取用户的敏感信息、绕过网站的访问控制、劫持用户会话、篡改网页内容等。 XSS漏洞的挖掘方法一般包括以下几个步骤: 1. 扫描目标网站:使用一些扫描工具,如Burp Suite、OWASP ZAP等,对目标网站进行扫描,找出可能存在的XSS漏洞。 2. 注入恶意脚本代码:在目标网站的输入框中注入恶意脚本代码,如<script>alert("XSS漏洞");</script>,并提交表单。 3. 检查注入的恶意脚本代码是否生效:在提交表单后,在网页中查看是否弹出了XSS漏洞的测试弹窗。如果弹出了,说明注入的恶意脚本代码生效了,存在XSS漏洞。 4. 利用XSS漏洞:如果发现了XSS漏洞,攻击者可以利用这个漏洞来进行攻击,如窃取用户的敏感信息、绕过网站的访问控制、劫持用户会话、篡改网页内容等。 为了防止XSS漏洞的产生,网站开发人员可以采取以下措施: 1. 对用户输入的数据进行过滤和转义,将特殊字符进行转义,如<、>、&等。 2. 在Cookie中设置HttpOnly属性,禁止JavaScript访问Cookie,防止攻击者通过XSS攻击窃取用户的Cookie信息。 3. 在HTTP响应头中设置X-XSS-Protection属性,开启浏览器的XSS保护功能。 4. 对网站进行安全审计,定期检查网站是否存在XSS漏洞

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值