dvwa中的xss(跨站脚本)攻击

环境:

dvwa: 192.168.11.135 dvwa版本Version 1.9 (Release date: 2015-09-19)

kail机器:192.168.11.156

一、XSS是什么

XSS(Cross Site Scripting,跨站脚本攻击),是指恶意攻击者往web页面里插入恶意script代码,当用户浏览该页面时,嵌入其中web里面的script代码会被执行,从而达到恶意攻击用户的目的。

xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数

二、跨站脚本攻击XSS分类

  • 反射型XSS:<非持久化> 攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。

  • 存储型XSS:<持久化> 代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie(虽然还有种DOM型XSS,但是也还是包括在存储型XSS内)。

  • DOM型XSS:基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。

三、常用绕过方式

  1. 普通注入 或者

  1. 大小写绕过 或者

  1. 双写绕过ipt>alert(document.cookie)ipt> 或者 ipt>aleralertt(document.cookie)ipt>

  1. html标签绕过 或者 http://192.168.11.135:81/phpinfo.php>link 或者 xss

  1. 闭合标签绕过:>xss

  1. 闭合+html标签绕过:>xss

、XSS(Reflected)

4.1、XSS(Reflected) LOW级别

代码:

dvwa中的xss(跨站脚本)攻击_第1张图片

主要步骤:array_key_exists函数判断name变量是否存在,并判断是否非空。若存在且非空,直接输出。

漏洞原因:

  • 输入未过滤

  • 输出未改变编码

普通注入

弹出:

dvwa中的xss(跨站脚本)攻击_第2张图片

4.2、XSS(Reflected) Medium级别

代码:

dvwa中的xss(跨站脚本)攻击_第3张图片

主要步骤:array_key_exists函数判断name变量是否存在,并判断是否非空。若存在且非空,使用str_replace函数替换

dvwa中的xss(跨站脚本)攻击_第4张图片

大小写绕过

弹出:

dvwa中的xss(跨站脚本)攻击_第5张图片

双写绕过

dvwa中的xss(跨站脚本)攻击_第8张图片

注入失败,仅剩余了>,其他全部没有了,再尝试大小写或双写绕过。

大小写绕过

dvwa中的xss(跨站脚本)攻击_第9张图片

注入失败。

双写绕过

dvwa中的xss(跨站脚本)攻击_第16张图片

点击Sign Guestbook后:

dvwa中的xss(跨站脚本)攻击_第17张图片

注入失败。

方法1Name有长度限制,Message注入失败,应该是Name可以注入,但是被限制了。尝试抓包进行注入:

dvwa中的xss(跨站脚本)攻击_第18张图片

注入成功,弹出:

dvwa中的xss(跨站脚本)攻击_第19张图片

方法2:前端页面中删除maxlength="10"

改成

dvwa中的xss(跨站脚本)攻击_第20张图片

5.2、XSS(Stored) Medium级别

正常输出:

dvwa中的xss(跨站脚本)攻击_第21张图片

前端限制Name、Message的长度。

代码:

dvwa中的xss(跨站脚本)攻击_第22张图片

主要步骤

  • isset函数判断btnSign是否提交,即是否点击了Sign Guessbook按钮;

  • 使用trim函数去除提交的mtxMesssage、txtName前后导空格,分别给message、name变量;

  • 使用strip_tags函数对 使用函数addslashes添加反斜杠的message变量 剥去heml、xml、php标签,使用mysqli_real_escape_string函数对message变量中的特殊字符转义

  • 使用str_replace函数将name中的

    dvwa中的xss(跨站脚本)攻击_第23张图片

    标签被删除

    标签没了,尝试大小写绕过。

    大小写绕过

    dvwa中的xss(跨站脚本)攻击_第24张图片

    注入成功。

    5.3、XSS(Stored) High级别

    post方式,前端检查长度,直接删除,然后Html标签绕过。

    代码:

    dvwa中的xss(跨站脚本)攻击_第25张图片

    主要步骤

    • isset函数判断btnSign是否提交,即是否点击了Sign Guessbook按钮;

    • 使用trim函数去除提交的mtxMesssage、txtName前后导空格,分别给message、name变量;

    • 使用strip_tags函数对 使用函数addslashes添加反斜杠的message变量 剥去heml、xml、php标签,使用mysqli_real_escape_string函数对message变量中的特殊字符转义

    • 使用preg_replace函数进行正则表达式匹配,然后替换为空字符串,使用mysqli_real_escape_string函数对name变量中的特殊字符转义

    • 使用mysqli_query函数插入数据库

    漏洞原因:

    • 输入过滤不到位,尝试使用preg_replace函数进行正则表达式匹配过滤,但仅匹配了

你可能感兴趣的:(安全,xss)