安全测试 web应用安全测试之XXS跨站脚本攻击检测
web应用安全测试之XXS跨站脚本攻击检测
by:授客 QQ:1033553122
说明
意在对XSS跨站脚本攻击做的简单介绍,让大家对xss攻击有个初步认识,并能够在实际工作当中运用本文所述知识做些简单的、基础性的XSS攻击检测。
定义
XSS攻击:类似sql注入,简单说,通过“HTML注入”,把用户输入的数据当作脚本执行。进而达到想要的目的,这种目的通常是恶意。
分类
反射型XSS(非持久型XSS):
简单说可充当执行脚本的恶意数据,需由用户从“外部”输入,通过提交输入的方式“嵌入”到网页。
简单举例:
针对存在XSS攻击的某个网页输入框中输入“恶意数据”,并提交,通常,这类提交操作对应着一个get请求,当我们把这个请求发送给其他用户,并让用户在web浏览器中打开请求,这时就会把恶意数据当作脚本再次执行
存储型XSS(持久型XSS)
类似反射型XSS,不同的是,其“恶意数据”本身就是包含在网页源码中、或者自动从服务器内部读取并“嵌入”网页中。
简单举例:
黑客在某个论坛写了一篇文章,并在文章中写入了用会充当脚本执行的数据,比如一段恶意javascript代码,这样所有浏览该文章的用户,都会自动在其浏览器中执行这段恶意代码。
DOM Bsed XSS
通过修改页面的DOM节点型的XSS,效果上来说也是发射型XSS
举例:
略,参靠下述实验
XSS检测
实验1
构造testxss.php,内容如下

说明:
$xss =
empty($_GET['xss_input']) ? '':$_GET['xss_input'];
#使用前做判断,防止报类似如下错误:
Notice:
Undefined index: xss_input in xxx\xx.php on line
xxx
报错
$_GET
变量是一个数组,元素索引和元素值分别是由 HTTP GET
方法发送的变量名称和值。
$_GET
变量用于收集来自 method="get"
的表单中的值。
请求上述testxss.php文件,并在打开页面的输入框中输入测试数据
输入测试数据:
“shouke”,提交查询,结果如下:

说明:正常情况如上,用户输入的数据不被当作脚本执行,用于但不局限于在浏览器端展示
输入测试数据:
,提交查询,结果如下:

说明:非正常情况如上,用户输入的数据被当作脚本执行,说明存在xss攻击
实验2
构造testxss2.php,内容如下

请求上述testxss2.php文件,并在打开页面的输入框中输入测试数据

第一个输入框中输入测试数据:"><!--
第二个输入框中输入测试数据:--><script>alert('xss')</script>
提交查询,结果如下

查看执行后展示页面的源代码

说明:如上,第三、第四个输入框分别从第一个和第二个输入框获中取值,获取后如下
<input type="text" value=""><!--">
<br>
<input type="text" value="--><script>alert('xss')</script>">
,显而易见,中间部分被当作注释掉了
实验3
构造testxss3.php,内容如下
构造testxss3.php,内容如下
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset="utf-8" />
<title>利用监听事件执行xss</title>
</head>
<body>
<form action="" method="get">
<input type="text" name="xss_input_value" value="输入要展示的字符">
<input type="submit">
</form>
<hr>
<?php
$xss = empty($_GET['xss_input_value']) ? '':$_GET['xss_input_value'];
if(isset($xss)){
echo '<input type="text" value="'.$xss.'">';
}else{
echo '<input type="type" value="输出">';
}
?>
</body>
</html>
请求上述testxss3.php文件,并在打开页面的输入框中输入测试数据

第一个输入框中输入测试数据:" onclick="alert('xss')
然后点击第二个输入框,结果如下

查看执行后展示页面的源代码

如上,提交后,第二个输入框源代码变成 了<input type="text" value="" onclick="alert('xss')">
注:
1、监听事件处理onclick之外,还有别的mouseover等
2、这也说明,input的value是默认值,仅初始化时会加载,对其所做的修改并不会在html页面显示,上例中,第一个输入框输入的值仅在被第二框作为默认值获取时,才产生xss
实验4
构造testxss4.php,内容如下
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset="utf-8" />
<title>解决textarea无法执行script xss</title>
</head>
<body>
<form action="" method="get">
<input type="text" name="xss_input_value" value="输入要展示的字符">
<input type="submit">
</form>
<hr>
<textarea rows=2 cols=50 name="textarea">
<?php
$xss = empty($_GET['xss_input_value']) ? '':$_GET['xss_input_value'];
echo $xss;
?>
</textarea>
</body>
</html>
请求上述testxss4.php文件,并在打开页面的输入框中输入测试数据
第一个输入框中输入测试数据:<script>alert('xss')</script>,提交查询,结果,没发现弹窗。
第一个输入框中输入测试数据:</textarea><script>alert('xss')</script>,提交查询,结果如下:

查看执行后展示页面的源代码

注:textarea标签可定义多行的文本输入控件,正常情况下无法执行javascript,通过上述方式可执行xss攻击
其它
除了上述所举,我们还可以通过其它构造方式,比如<iframe>,<img>,<a>标签构造用户输入数据,比如<img/src=# onerror=alert("test")>,当图片载入错误时执行弹窗,以执行xss
注意:onerror事件会在文档或图像加载过程中发生错误时被触发,有时候直接填写<script>alter("test")</script>不起作用时,可以尝试该方式。
构造testxss.php,内容如下
<html>
<head>
<meta http-equiv="Content-Type" content="text/html";charset=utf-8 />
<title>study xss</title>
</head>
<body>
<form action="" method="get">
<input type="text" name="xss_input">
<input type="submit">
</form>
<hr>
<?php
$xss = empty($_GET['xss_input']) ? '':$_GET['xss_input'];
echo '输入的字符为: '.$xss;
?>
</body>
</html>
访问上述页面,分别输入以下数据,提交测试,查看效果
<iframe src=javascript:alert('xss');height=0 width=0 /><iframe>利用iframe的scr来弹窗
<img src="1" onerror=eval("\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29")></img>过滤了alert来执行弹窗
<a href=javascript:alert('xss')>s</a> 点击s时运行alert('xss')
总结
如上所举例,实际运用时,还得根据实际环境,构造适当的“输入数据”来进行测试,方能达到预期效果。
注意:上述所例,仅是测试xss存在的可能性,是我们检测xss的手段,并不等同xss。如果存在xss漏洞,我们可以用它来执行其它更具备破坏性的操作,比如输入恶意数据,执行恶意js脚本:
<script scr="js_url"></script>
pdf版下载:web应用安全测试之XXS跨站脚本攻击检测.pdf
安全测试 web应用安全测试之XXS跨站脚本攻击检测的更多相关文章
- 【安全测试】Web应用安全之XSS跨站脚本攻击漏洞
前言 以前都只是在各类文档中见到过XSS,也进行过相关的学习,但是都是一知半解,过了一段时间就忘了. 前几天我们收到了了一份标题为<XX账号昵称参数中存在存储XSS漏洞>的报告文档,来源是 ...
- Web攻防系列教程之跨站脚本攻击和防范技巧详解
摘要:XSS跨站脚本攻击一直都被认为是客户端Web安全中最主流的攻击方式.因为Web环境的复杂性以及XSS跨站脚本攻击的多变性,使得该类型攻击很 难彻底解决.那么,XSS跨站脚本攻击具体攻击行为是什么 ...
- 跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
背景 这个系列有很多题,但是其实考察的相近,类似的就不在多说,我们来看吧.主要分几个点来讲: 反射型 存储型 JSON XM 头部字段相关 分类介绍 反射型 在请求中构造了XSS的Payload,一般 ...
- Web安全测试之XSS(跨站脚本攻击)
XSS 全称(Cross Site Scripting) 跨站脚本攻击, 是Web程序中最常见的漏洞.指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时,脚本就会在用户的 ...
- Web安全相关(一):跨站脚本攻击(XSS)
简介 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意攻击者往Web页 ...
- 安全测试 WEB安全测试手册
WEB安全测试手册 By:授客 QQ:1033553122 欢迎加入软件性能测试交流QQ群:7156436 概述 Ø 目的 Ø 适用读者 Ø 适用 ...
- Web安全之跨站脚本攻击(XSS)
XSS 简介 跨站脚本攻击,英文全称是 Cross Site Script,本来缩写是CSS,但是为了和层叠样式表(Cascading Style Sheet,CSS)有所区别,所以在安全领域叫做&q ...
- 跨站脚本攻击XXS(Cross Site Scripting)修复方案
今天突然发现,网站被主页莫名奇妙的出现了陌生的广告. 通过排查发现是跨站脚本攻击XXS(Cross Site Scripting).以下为解决方案. 漏洞类型: Cross Site Scriptin ...
- web 安全 & web 攻防: XSS(跨站脚本攻击)和 CSRF(跨站请求伪造)
web 安全 & web 攻防: XSS(跨站脚本攻击)和 CSRF(跨站请求伪造) XSS(跨站脚本攻击)和CSRF(跨站请求伪造) Cross-site Scripting (XSS) h ...
随机推荐
- 使用 Navicate 连接 Oracle9i 数据库
Navicat Premium 是一个可多重连接的数据库管理工具,它可让你以单一程序同時连接到 MySQL.SQLite.Oracle 及 PostgreSQL 数据库,让管理不同类型的数据库更加方便 ...
- Liferay7 BPM门户开发之3: Activiti开发环境搭建
下载地址: http://activiti.org/download.html 源码: https://github.com/Activiti/Activiti 环境准备(检查项): JDK 1.7 ...
- rsync排除多个文件实现同步
首先创建exclude目录放入xx.list排除文件. [root@localhost tmp]# cat /exclude/a_exclude.list a.txt lai ———————————— ...
- Oracle PL/SQL,游标,过程
1.PL/SQL 语法相关 -- SQL 语言只是访问,操作数据库的语言,而比并不是程序设计语言,因此不能用于程序开发. -- PL/SQL 是在标准SQl语言上进行过程性扩展后形成的程序设计语言, ...
- Docker 数据卷和数据卷容器
1.本节课主要讲解如何在Docker内部及容器之间管理数据.容器中管理数据主要有两种方式:数据卷(Data volumes)数据卷容器(Data volume containers) 2.数据卷:是一 ...
- C# 位运算详解
运算符 描述 &(位与) 当两个二进制操作位都为1时,结果就为1 |(位或) 当两个二进制操作位有1个为1时,结果就为1 ^(位异或) 当两个二进制操作位只有1个为1时,结果为1 ~(位非) ...
- python之字符串中有关%d,%2d,%02d的问题
python之字符串中有关%d,%2d,%02d的问题 在python中,通过使用%,实现格式化字符串的目的.(这与c语言一致) 其中,在格式化整数和浮点数时可以指定是否补0和整数与小数的位数. 首先 ...
- vb.bet 控件
TextBox1.BackColor = Color.White'设置控件的背景色(白色) TextBox1.BackColor = Color.Yellow'设置控件的背景色(黃色) TextBox ...
- [PHP] 算法-统计一个数字在排序数组中出现的次数的PHP实现
统计一个数字在排序数组中出现的次数. 1.有序的数组查找,使用二分法 2.二分法查找第一次出现的位置,二分法查找最后一次出现的位置,end - start +1 left=getLeft(data,k ...
- JavaSE List集合
我们掌握了Collection接口的使用后,再来看看Collection接口中的子接口和实现类,他们都具备那些特性呢? 接下来,我们一起学习Collection中的常用几个子接口: java.ut ...