[关闭]
@1kbfree 2018-10-06T16:37:59.000000Z 字数 1514 阅读 1189

Dvwa中xss的impossible等级是如何防御的

渗透 代码审计


在之前分别讲了Dvwa的Xss测试的LowMediumHigh等级,这节课就深入的来讲impossible如何防御的( 其实之前文章也有讲过,不详细,这节课就深入的来讲解一下 )

老套路,直接看源码:

  1. <?php
  2. // Is there any input?
  3. if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
  4. // Check Anti-CSRF token
  5. checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
  6. // Get input
  7. $name = htmlspecialchars( $_GET[ 'name' ] );
  8. // Feedback for end user
  9. echo "<pre>Hello ${name}</pre>";
  10. }
  11. // Generate Anti-CSRF token
  12. generateSessionToken();
  13. ?>

{% note danger %}
这段代码中的checkToken()函数是用于防御Csrf攻击的,先不用管,我们先来看看这个htmlspecialchars()函数
{% endnote %}

官方解释

htmlspecialchars — 将特殊字符转换为 HTML 实体

执行转换

字符 替换后
& (和号) 成为 &amp;
" (双引号) 成为 &quot;
' (单引号) 成为 '
< (小于) 成为 &lt;
> (大于) 成为 &gt;

开始操作

未过滤

先看一段代码简单的代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Demo</title>
  6. </head>
  7. <body>
  8. <?php
  9. $name = $_GET['name'];
  10. ?>
  11. <h1>你好,<?php echo $name;?></h1>
  12. </body>
  13. </html>

访问http://127.0.0.1/myphp/demo.php?name=1:

image_1ceefa1be1bbm1rnk1mnt1jn019nc9.png-86.4kB

访问http://127.0.0.1/myphp/demo.php?name=<img src=x>:

image_1ceefbiqtarl1pcuc268a01lm7m.png-33.9kB

可见,这个是存在Xss的,那么我们用htmlspecialchars函数来过滤~

过滤

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Demo</title>
  6. </head>
  7. <body>
  8. <?php
  9. $name = $_GET['name'];
  10. $name = htmlspecialchars( $name );
  11. ?>
  12. <h1>你好,<?php echo $name;?></h1>
  13. </body>
  14. </html>

继续访问http://127.0.0.1/myphp/demo.php?name=<img src=x>:

image_1ceefgvqvh1ta2riv01papfcb13.png-34.8kB

看到这里,你们就会好奇了,为什么会直接把输入的内容输出出来,而不是以代码被解析?我们打开审查元素看一看(F12)

image_1ceefjr3mik51606kc21ete15ct1g.png-31.9kB

我们可以发现这里是把<变成了&lt;,把'>'变成了&gt;,从而导致了代码只会原样输出而不会当成代码来编译

如果你还困惑的,我再给你看一段代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Demo</title>
  6. </head>
  7. <body>
  8. <h1>你好,&lt;img src=x&gt;</h1> <!-- 注意看这里 -->
  9. </body>
  10. </html>

访问http://127.0.0.1/myphp/demo.php:

image_1ceefpck81ibnca2re9bvb1tpd1t.png-74kB

Xss反射型部分撒花完结~

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注