DVWA------XSS(全)

目录

一、XSS

1.简介

2.XSS的原理

3.XSS的攻击方式

4.XSS的危害

5.常见XSS攻击方式

6.常见基本过滤方法

7.XSS的防御措施

8.xss平台

二、XSS(DOM)

1.LOW

 2.medium

 3.High

 4.impossible

三、XSS (Reflected)反射型

1.Low

 2.Medium

3.high

 4.impossible

四、XSS (Stored)存储型

1.Low

 2.Medium

3.High

4.Impossible 


一、XSS

1.简介

        XSS 又称CSS(Cross Site Scripting)或跨站脚本攻击,攻击者在网页中插入由JavaScript编写的恶意代码,当用户浏览被嵌入恶意代码的网页时,恶意代码将会在用户的浏览器上执行。

2.XSS的原理

  • 攻击者对含有漏洞的服务器发起XSS攻击(注入JS代码)。
  • 诱使受害者打开受到攻击的服务器URL。
  • 受害者在Web浏览器中打开URL,恶意脚本执行。

3.XSS的攻击方式

​XSS攻击可分为三种:分别为反射型(Reflected),存储型(Stored)和DOM型。

  • 反射型xss:只是简单地把用户输入的数据反射给浏览器,简单来说,黑客往往需要用户诱使用户点击一个恶意链接,才能攻击成功。(经后端,不经数据库)
  • 存储型XSS:将用户输入的数据存储在服务器端。用户访问了带有xss得页面代码后,产生安全问题。(经后端和数据库)
  • DOM XSS:通过修改页面的DOM节点形成的XSS。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。一般是浏览器前端代码进行处理。(不经过后端,是基于文档对象模型的一种漏洞,是通过url传入参数去控制触发的)

4.XSS的危害

1.挂马
2.盗取用户Cookie。
3.DOS(拒绝服务)客户端浏览器。
4.钓鱼攻击,高级的钓鱼技巧。
5.删除目标文章、恶意篡改数据、嫁祸。
6.劫持用户Web行为,甚至进一步渗透内网。
7.爆发Web2.0蠕虫。
8.蠕虫式的DDoS攻击。
9.蠕虫式挂马攻击、刷广告、刷浏量、破坏网上数据
10.其它安全问题

5.常见XSS攻击方式

1.scirpt 标签


2.img 标签

 标签定义 HTML 页面中的图像。


3.input 标签

 标签规定了用户可以在其中输入数据的输入字段。

onfocus 事件在对象获得焦点时发生:


竞争焦点,从而触发onblur事件:



input 标签的 autofocus 属性规定当页面加载时 元素应该自动获得焦点。可以通过autofocus属性自动执行本身的focus事件,这个向量是使焦点自动跳到输入元素上,触发焦点事件,无需用户去触发:



" οnclick=alert(1)>        这样需要点击一下输入框
" onmouseover=alert(1)> 需要鼠标划过输入框

4.details 标签

标签通过提供用户开启关闭的交互式控件,规定了用户可见的或者隐藏的需求的补充细节。ontoggle 事件规定了在用户打开或关闭
元素时触发:
使用details 标签的 open 属性触发ontoggle事件,无需用户去点击即可触发:

5.svg 标签

 标签用来在HTML页面中直接嵌入SVG 文件的代码。

6.select 标签

7.iframe 标签

8.video 标签

9.audio 标签

10.body 标签

 标签定义文档的主体。


6.常见基本过滤方法

1.空格过滤

当空格被过滤了时,我们可以用 / 来代替空格:

/**/,注释符号绕过;/符号绕过;

2.引号过滤

如果是html标签中,我们可以不用引号。如果是在js中,我们可以用反引号代替单双引号:

3.括号过滤

当括号被过滤的时候可以使用throw来绕过。throw 语句用于当错误发生时抛出一个错误。




// 在js中,我们可以用反引号代替单双引号

7.XSS的防御措施

(1)编码:对用户输入的数据进行HTML Entity编码

(2)过滤:移除用户上传的DOM属性,如onerror等,移除用户上传的style节点,script节点,iframe节点等。

(3)校正:避免直接对HTML Entity编码,使用DOM Prase转换,校正不配对的DOM标签。

8.xss平台

https://xss.pt

1.一个xss平台来收集cookie,加以利用。

 2.对于反射型xss可构造链接,当用户点击时,用户cookie被发送到xss平台。

二、XSS(DOM)

1.LOW

源码

 

发现并没有做任何过滤

构造xss语句,看到出现弹窗,代码执行成功,说明存在xss漏洞。

DVWA------XSS(全)_第1张图片

查看页面代码,发现xss代码以及插入并执行了。

DVWA------XSS(全)_第2张图片

 xss平台+DOM的xss联动

DVWA------XSS(全)_第3张图片

打开代码界面,查看xss代码语句。

DVWA------XSS(全)_第4张图片

 复制到dvwa的url中DVWA------XSS(全)_第5张图片

 返回xss平台,可以看到我点击dvwa的信息。

DVWA------XSS(全)_第6张图片

 2.medium

 

 查看源代码,发现对

DVWA------XSS(全)_第7张图片

 既然不能使用script,那么我们换一种标签,使用img进行尝试,发现还是没有出现弹窗。

DVWA------XSS(全)_第8张图片

 查看页面代码,发现我们构造的语句已经被插入到了value当中,不能成功执行的原因是select标签中只允许内嵌option标签,而option标签是不能嵌套我们构造的img标签的,因此我们需要先将前面的select标签和option标签都闭合后才能使用img标签.DVWA------XSS(全)_第9张图片

 当我们把闭合后的img构造语句执行后,发现出现弹窗,说明存在xss注入漏洞。

DVWA------XSS(全)_第10张图片

 我们继续和xss平台梦幻联动一波

DVWA------XSS(全)_第11张图片DVWA------XSS(全)_第12张图片

 3.High

 

 查看源代码,可以知道此处使用了白名单过滤,只允许 传的 default值 为 French English German Spanish 其中一个。

我们只能找方法绕过服务器端的处理,直接在本地运行我们构造的语句,可以通过“#”来注释掉后面的内容,因为URL栏中的“#”之后的内容不会被发送到服务器当中去,不会经过JS的过滤,只在客户端显示,可以直接与浏览器进行交互。

#

DVWA------XSS(全)_第13张图片

 xss平台也是可以的。

#

DVWA------XSS(全)_第14张图片

 DVWA------XSS(全)_第15张图片

 4.impossible

查看源代码,发现什么也没有,在客户端上处理,不会在进行URL解码。

 

三、XSS (Reflected)反射型

1.Low

Hello ' . $_GET[ 'name' ] . '
'; } ?>

发现没有任何防御,所以我们直接输入

DVWA------XSS(全)_第16张图片

 同样xss平台也可以实现  url输入

DVWA------XSS(全)_第17张图片

 2.Medium

 ', '', $_GET[ 'name' ] );

    // Feedback for end user
    echo "
Hello ${name}
"; } ?>

发现源码过滤了会直接显示alert('xss')

DVWA------XSS(全)_第18张图片

 大写绕过    DVWA------XSS(全)_第19张图片

 双写绕过  ript>alert('xss')

DVWA------XSS(全)_第20张图片

 标签img  

DVWA------XSS(全)_第21张图片

3.high

 Hello ${name}
"; } ?>

 查看源代码,发现preg_replace 函数,是执行一个正则表达式的搜索和替换,直接将所有的

DVWA------XSS(全)_第25张图片

 Sign登录触发存储型xss

DVWA------XSS(全)_第26张图片

 xss平台 

DVWA------XSS(全)_第27张图片

DVWA------XSS(全)_第28张图片

 2.Medium

 ', '', $name );
    $name = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $name ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));

    // Update database
    $query  = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
    $result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '
' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
' ); //mysql_close(); } ?>

查看源代码,发现将Message所有可能xss攻击的标签都进行了转义或过滤,但对Name仅仅限制了

DVWA------XSS(全)_第29张图片

3.High

 ' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
' ); //mysql_close(); } ?>
  • 查看代码,发现在Medium的基础上对Name的输入进行了

你可能感兴趣的:(DVWA,安全,web安全,xss,php,服务器)